Мы пытаемся написать C ++ DLL, которая будет работать на сервере VMWare и будет возвращать IP-адрес и имя клиента (конечного пользователя).
Я использую WTSQuerySessionInformation для получения IP-адреса. Проблема заключается в том, что когда я работаю из сети компании, DLL возвращает точный 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
, он возвращает IP-адрес, разделенный дефисом (как W-X-Y-Z). Не могли бы вы помочь мне понять, если я сделал что-то не так здесь? Вот код:
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;
Задача ещё не решена.
Других решений пока нет …