Определение типа тонкого клиента в терминальной сессии

Ответить

Смайлики
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ОТКЛЮЧЕН
Смайлики ВКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Определение типа тонкого клиента в терминальной сессии

Re: А есть ли способ узнать...

aka » Вт фев 19, 2013 8:53 pm

Кусок кода, который у нас сейчас канал открывает и компилируется в visual studio express 2008:

===

#define WTS_CHANNEL_OPTION_DYNAMIC 0x00000001L
#define WTS_CHANNEL_OPTION_DYNAMIC_NO_COMPRESS 0x00000008L

typedef HANDLE (__stdcall *type_WTSVirtualChannelOpenEx) (
_In_ DWORD SessionId,
_In_ LPSTR pVirtualName,
_In_ DWORD flags
);

.....

HMODULE _wtsapi32_dll = ::LoadLibrary (L"wtsapi32.dll");
если (_wtsapi32_dll == NULL) все пропало

type_WTSVirtualChannelOpenEx l_WTSVirtualChannelOpenEx = (type_WTSVirtualChannelOpenEx) ::GetProcAddress (_wtsapi32_dll, "WTSVirtualChannelOpenEx");

HANDLE VC;
if (l_WTSVirtualChannelOpenEx != NULL)
{
// На 2012 сервере WTSVirtualChannelOpen зависает секунд на десять, если пытается открыть
// несуществующий статический канал. Поэтому я, если возможно, пользуюсь динамическим
// каналом. На 2003 сервере динамических каналов не было, но зато на нем статические каналы
// открываются без этих тупых тормозов.

VC = l_WTSVirtualChannelOpenEx (WTS_CURRENT_SESSION, "WTDVC", WTS_CHANNEL_OPTION_DYNAMIC | WTS_CHANNEL_OPTION_DYNAMIC_NO_COMPRESS);
}
else
{
VC = WTSVirtualChannelOpen (WTS_CURRENT_SERVER, WTS_CURRENT_SESSION, "WTVC");
}

if (VC != NULL)
{
// ура, мы под втварью.
}

Re: А есть ли способ узнать...

Rushmore » Вт фев 19, 2013 8:40 pm

aka писал(а):вызовом винапи WTSVirtualChannelOpen попытаться открыть виртуальный канал "WTVC". Если канал откроется, то это втварь.
Спасибо, попробую. Для начала уже неплохо.

Re: А есть ли способ узнать...

aka » Вт фев 19, 2013 7:31 pm

Не знаю, как определить из скрипта. Нет общего способа определить тип клиента. Через вызовы винапи докуентированно можно только эту информацию вытащить:
Untitled.png
Untitled.png (24.64 КБ) 7546 просмотров
Если все компьтеры твои, то в Client Name можно тип клиента зашить. В втвари хостнейм задается через DHCP или параметром clienthostname, в виндовсе это имя компьютера.

Костыль именно для втвари - вызовом винапи WTSVirtualChannelOpen попытаться открыть виртуальный канал "WTVC". Если канал откроется, то это втварь.

Определение типа тонкого клиента в терминальной сессии

Rushmore » Вт фев 19, 2013 3:43 pm

Можно ли как-то узнать изнутри сессии (скриптом? exe?) с какого клиента подключился юзер?
Интересует в частности, это WtWare, или обычный mstsc, или может вообще 2x какой-нибудь?

Вернуться к началу