我正在使用the following API call来确定终端服务器会话中远程客户端的名称:
ret = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION,
WTS_INFO_CLASS.WTSClientName, buffer, bufferLen)
通常,当应用程序不在终端服务器会话中运行时,调用成功(ret!= 0),buffer
只返回空指针。所以我认为这是预期的行为。
但是,在一个客户的计算机上,该功能开始失败(ret == 0),GetLastError
返回5:拒绝访问。 (像往常一样,客户声称他的系统配置没有任何改变。)
所以,我的问题如下:
我不知道这是否相关,但我们可以通过从Web应用程序内部调用该函数来重现此问题(错误5)。但是,在这种情况下不是这种情况(它是常规的Windows应用程序)。
答案 0 :(得分:1)
我同意你的观点,并且假设客户端系统配置中的某些内容已更改。要找出文件系统或注册表中的哪些更改对WTSQuerySessionInformation
很重要,您可以尝试使用Process Monitor。
您也可以要求您的客户下载该工具,启动Process Monitor,然后启动您使用的WTSQuerySessionInformation
测试程序,保存日志并将其发布给您。我想,你会在日志中看到一些“访问被拒绝”的错误。我希望它能帮助您在客户端计算机的配置中找到问题。
答案 1 :(得分:0)
我不知道预期的行为,但在Win7上调用WTSEnumerateSessions时遇到错误代码5,访问被拒绝。将DWORD
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\AllowRemoteRPC
设置为1
,问题立即得到解决。
答案 2 :(得分:0)
当您从Web应用程序调用它时就会发生这种情况,因为Web服务器正在Windows的(会话0)下运行。