windows - WTSClientInfo 在 Windows 10 操作系统上通过 RDP 连接返回 NULL
问题描述
我正在通过 RDP 客户端远程连接到 Windows 10 客户端操作系统。当我收集WTSIsRemoteSession
和WTSClientProtocolType
使用WTSQuerySessionInformationW
() 时,我正确地收到它是一个远程会话并且协议是 RDP。但是,当我尝试按如下方式收集客户端信息时,AF_INET 的条件失败并且客户端设备 ID 也为空。需要知道我在这里可能缺少什么。我注意到所有的PWTSCLIENTA
数据都是空的。奇怪的是,查询函数本身并没有失败。以下是我的代码。
if (WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientInfo, &pData, &bytesReturned)){
PWTSCLIENTA address = (PWTSCLIENTA)pData;
printf("\tWTSQuerySessionInformationW - session %d - %s returned \"%p\"\n", WTS_CURRENT_SESSION, "WTSClientInfo", pData);
if (AF_INET == address->ClientAddressFamily)
{
printf("\n\tClient Address : %d.%d.%d.%d\n", address->ClientAddress[2], address->ClientAddress[3], address->ClientAddress[4], address->ClientAddress[5]);
}
printf("\tClient DeviceId : %s\n\n", address->DeviceId);
}
解决方案
您正在调用WTSQuerySessionInformationW()
,但是当您需要将其转换为时,您正在转换pData
为。因此,您正在使用错误的字节偏移量访问、和字段。PWTSCLIENTA
PWTSCLIENTW
ClientAddressFamily
ClientAddress
DeviceId
另外,请确保您处理存在的可能性,ClientAddressFamily
而AF_INET6
不是AF_INET
.
尝试更多类似的东西:
PWTSCLIENTW pData;
if (WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientInfo, (LPWSTR*)&pData, &bytesReturned)){
printf("\tWTSQuerySessionInformationW - session %d - %s returned \"%p\"\n", WTS_CURRENT_SESSION, "WTSClientInfo", pData);
char ipAddress[46];
if (inet_ntop(pData->ClientAddressFamily,pData->ClientAddress), ipAddress, sizeof(ipAddress)))
{
printf("\n\tClient Address : %s\n", ipAddress);
}
printf("\tClient DeviceId : %ls\n\n", pData->DeviceId);
WTSFreeMemory(pData);
}
推荐阅读
- bash - 流解压到拆分
- json - ListiewBuilder 下的单选按钮未正确选择项目
- conda - 如何删除未出现在 jupyterlab 的 conda env 列表中的 conda 环境?
- mysql - 使用 nvarchar(max) 类型将 MSSQL SERVER 迁移到 MY SQL
- security - .net core 3.1 api 子域安全响应标头
- git - 更改 git 存储库哈希函数?
- android - 为什么 Android 版 MoveNet 的性能比网页版差?
- typescript - 打字稿泛型奇怪的行为
- node.js - 如何摇树和打包快速服务器而不是安装 node_modules?
- javascript - 后端数据未在前端正确过滤