我是通过RDP客户端远程连接到Windows 10客户端操作系统。当我收集到 WTSIsRemoteSession
和 WTSClientProtocolType
使用 WTSQuerySessionInformationW
()我正确地接收到这是一个远程会话,协议是RDP,但当我试图收集客户端信息时,如下所示,AF_INET的条件失败,客户端设备Id也是空白。然而,当我试图收集客户端信息时,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);
}