wtsapi32.WTSQuerySessionInformation()在x64上失败

时间:2009-03-11 19:58:11

标签: .net winapi terminal-services

我正在尝试在64位Windows计算机上收集终端服务器会话信息。我的问题是双重的。首先,在32位机器上,我们调用了以下函数,该函数工作正常。

Private Declare Function WTSQuerySessionInformation Lib "wtsapi32" _
                  Alias "WTSQuerySessionInformationA" _
                 (ByVal hServer As Integer, _
                  ByVal SessionID As Integer, _
                  ByVal WTSInfoClass As Integer, _
                  ByRef ppBuffer As String, _
                  ByRef lLen As Integer) As Integer

在64位计算机上,此函数调用失败。有没有人知道如何解决这个问题?我google了一下,但在64位机器上调用这个函数找不到多少。第二,有没有人知道获取TS客户端会话信息的任何其他选项?具体来说,我需要访问TS的计算机名称。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

64位计算机上的呼叫到底是怎么回事?我的猜测是,它与你正在调用函数的ANSI版本有关。也许你对Unicode版本(WTSQuerySessionInformationW)有更好的运气。

但要回答你的第二个问题,你可以尝试使用Cassia,这样你就不必处理P / Invokes:

New Cassia.TerminalServicesManager().CurrentSession.ClientName

我不记得以前是否曾在64位机器上试过它,但是如果它有效,它可能会让事情变得更容易。

编辑:刚刚在64位Windows Server 2008 R2 beta机器上测试了Cassia,它运行正常。