WTSQuerySessionInformation по VPN

Мы пытаемся написать 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-адрес, разделенный дефисом (например, WXYZ). Не могли бы вы помочь мне понять, если я сделал что-то не так здесь? Вот код:

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 ответов

Другие вопросы по тегам