关于VPN的WTSQuerySessionInformation

时间:2018-04-24 01:31:45

标签: c++ terminal-services wtsapi32

我们正在尝试编写一个可在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;

0 个答案:

没有答案