wtsapi32.WTSQuerySessionInformation() Ошибка на x64

Я пытаюсь собрать информацию о сеансе сервера терминалов на 64-разрядных машинах Windows. Мой вопрос двоякий. Во-первых, на 32-битных машинах мы вызывали следующую функцию, которая отлично работала.

Private Declare Function WTSQuerySessionInformation Lib "wtsapi32" _
                  Alias "WTSQuerySessionInformationA" _
                 (ByVal hServer As Integer, _
                  ByVal SessionID As Integer, _
                  ByVal WTSInfoClass As Integer, _
                  ByRef ppBuffer As String, _
                  ByRef lLen As Integer) As Integer

Однако на 64-битных машинах вызов этой функции завершается ошибкой. У кого-нибудь есть идеи о том, как это исправить? Я погуглил, но не нашел ничего о вызове этой функции на 64-битной машине. Во-вторых, кто-нибудь знает какие-либо другие варианты получения информации о сеансе клиента TS? В частности, мне нужно имя компьютера, с которого осуществляется доступ к TS.

Большое спасибо за помощь.


person Charlie White    schedule 11.03.2009    source источник


Ответы (1)


Как именно происходит сбой вызова на 64-битной машине? Я предполагаю, что это как-то связано с тем, что вы вызываете ANSI-версию функции. Возможно, вам больше повезет с версией Unicode (WTSQuerySessionInformationW).

Но чтобы ответить на второй вопрос, вы можете попробовать использовать Cassia, чтобы вам не приходилось иметь дело с P/вызывает:

New Cassia.TerminalServicesManager().CurrentSession.ClientName

Я не могу вспомнить, пробовал ли я это на 64-битной машине раньше, но если это сработает, это может немного облегчить вам задачу.

РЕДАКТИРОВАТЬ: только что протестировал Cassia на 64-битной бета-версии Windows Server 2008 R2, и она отлично работает.

person Dan Ports    schedule 09.04.2009