我们正在尝试编写一个可在VMWare服务器上运行的C ++ DLL,并返回客户端(终端用户)的IP地址和名称。
我正在使用WTSQuerySessionInformation来获取IP地址。问题是当我在公司网络内运行时,DLL会返回映射到适当HostName的确切IP地址。
但是当我从家里登录到公司的VPN并尝试相同的操作时,它会给我一个不同的IP,但没有任何DNS名称。
LPTSTR ppBuffer = NULL;
DWORD pBytesReturned = 0;
PWTS_CLIENT_ADDRESS pWTSCA = NULL;
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientAddress, &ppBuffer, &pBytesReturned);
pWTSCA = (PWTS_CLIENT_ADDRESS)ppBuffer;
String^ addrStr = String::Empty;
for (int i = 2; i < 6; i++)
{
addrStr += Convert::ToString(pWTSCA->Address[i]);
if (i != 5)
addrStr += ".";
}
有没有办法解决这个问题?我是否采用了正确的方法,或者采用了不同的方法?
修改
如果我使用WTSClientName
,它将用连字符(如W-X-Y-Z)分隔IP地址。如果我在这里做错了什么,请你帮我理解一下吗?这是代码:
LPTSTR szClientName = NULL;
DWORD dwSize = 0;
String^ cliName = String::Empty;
if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, TSClientName, &szClientName, &dwSize))
{
cliName = gcnew String(szClientName, 0, dwSize);
}
return cliName;