我正在使用以下 API 调用来确定终端服务器会话中远程客户端的名称:
ret = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION,
WTS_INFO_CLASS.WTSClientName, buffer, bufferLen)
通常,当应用程序没有在终端服务器会话中运行时,调用成功(ret != 0)并且buffer
只返回一个空指针。所以我认为这是预期的行为。
然而,在一位客户的机器上,该函数开始失败(ret == 0)并GetLastError
返回 5:拒绝访问。(像往常一样,客户声称他的系统配置没有任何变化。)
所以,我的问题如下:
- 在非终端服务机器(例如,“常规”Windows 7 PC)上查询 WTSClientName 时的预期行为是什么?
- 返回此错误代码的原因可能是什么?请注意,在我们的测试机器上,函数调用总是按预期运行(成功和空缓冲区),即使用户没有管理权限。
我不知道这是否相关,但我们可以通过从 Web 应用程序内部调用该函数来重现此问题(错误 5)。但是,在这种情况下并非如此(它是一个常规的 Windows 应用程序)。