2009-03-11 5 views
1

Ich versuche, Terminal Server-Sitzungsinformationen auf 64-Bit-Windows-Computern zu sammeln. Meine Frage ist zweifach. Zuerst haben wir auf 32-Bit-Maschinen die folgende Funktion aufgerufen, die gut funktionierte.wtsapi32.WTSQuerySessionInformation() fehlgeschlagen auf x64

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 

Auf 64-Bit-Maschinen schlägt dieser Funktionsaufruf jedoch fehl. Hat jemand eine Idee, wie man das beheben kann? Ich googelte herum, konnte aber nicht viel über das Aufrufen dieser Funktion auf einer 64-Bit-Maschine herausfinden. Zweitens, kennt jemand andere Optionen zum Abrufen von TS Client Session Info? Insbesondere benötige ich den Computernamen, der auf den TS zugreift.

Vielen Dank für die Hilfe.

Antwort

1

Wie genau schlägt der Anruf auf der 64-Bit-Maschine fehl? Meine Vermutung ist, dass es etwas damit zu tun hat, dass Sie die ANSI-Version der Funktion aufrufen. Vielleicht haben Sie mehr Glück mit der Unicode-Version (WTSQuerySessionInformationW).

Aber Ihre zweite Frage zu beantworten, können Sie versuchen, Cassia verwenden, so dass Sie nicht mit dem P zu beschäftigen haben/Ruft:

New Cassia.TerminalServicesManager().CurrentSession.ClientName 

Ich kann mich nicht erinnern, ob ich es versucht habe auf eine 64-Bit-Maschine vorher, aber wenn es funktioniert, kann es die Dinge ein bisschen leichter für Sie machen.

EDIT: Nur getestet Cassia auf einem 64-Bit-Windows Server 2008 R2-Beta-Maschine, und es funktioniert gut.

+0

Dan, Sie hatten Recht. Ich musste die Unicode-Version verwenden –