AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datenaustausch (Message o.Ä.) von Terminalserver an Client
Thema durchsuchen
Ansicht
Themen-Optionen

Datenaustausch (Message o.Ä.) von Terminalserver an Client

Ein Thema von jensw_2000 · begonnen am 20. Sep 2005 · letzter Beitrag vom 22. Sep 2005
 
jensw_2000
(Gast)

n/a Beiträge
 
#9

Re: Datenaustausch (Message o.Ä.) von Terminalserver an Clie

  Alt 21. Sep 2005, 20:26
Hallo,
Hier ist mein nächstes Problem, an dem ich nun schon fast den ganzen Tag experimentiere.

WTSEnumerateSessions liefert bei korrektem Aufruf ein Array (?) of WTS_SESSION_INFO und die Anzahl der in dem Array (?) enthantenen Elemente zurück.

Delphi-Quellcode:
typedef struct _WTS_SESSION_INFO
  {  DWORD SessionId;  LPTSTR pWinStationName;  WTS_CONNECTSTATE_CLASS State; } 
  WTS_SESSION_INFO, PWTS_SESSION_INFO;

typedef enum _WTS_CONNECTSTATE_CLASS
{
  WTSActive,
  WTSConnected,
  WTSConnectQuery,
  WTSShadow,
  WTSDisconnected,
  WTSIdle,
  WTSListen,
  WTSReset,
  WTSDown,
  WTSInit
}
 WTS_CONNECTSTATE_CLASS;


BOOL WTSEnumerateSessions(
  HANDLE hServer,
  DWORD Reserved,
  DWORD Version,
  PWTS_SESSION_INFO* ppSessionInfo,
  DWORD* pCount
);
Nachdem ich hier ein paar Infos gefunden habe, sieht meine derzeitige Umsetzung wie folgt aus:

Delphi-Quellcode:
type
  WTS_CONNECTSTATE_CLASS = LongInt;
const
  WTSActive = WTS_CONNECTSTATE_CLASS(1);
  WTSConnected = WTS_CONNECTSTATE_CLASS(2);
  WTSConnectQuery = WTS_CONNECTSTATE_CLASS(3);
  WTSShadow = WTS_CONNECTSTATE_CLASS(4);
  WTSDisconnected = WTS_CONNECTSTATE_CLASS(5);
  WTSIdle = WTS_CONNECTSTATE_CLASS(6);
  WTSListen = WTS_CONNECTSTATE_CLASS(7);
  WTSReset = WTS_CONNECTSTATE_CLASS(8);
  WTSDown = WTS_CONNECTSTATE_CLASS(9);
  WTSInit = WTS_CONNECTSTATE_CLASS(10);

type
  _WTS_SESSION_INFO = record
    SessionId: DWORD;
    pWinStationName: LPTSTR;
    State: WTS_CONNECTSTATE_CLASS;
  end;
  WTS_SESSION_INFO = _WTS_SESSION_INFO;
  PWTS_SESSION_INFO = ^_WTS_SESSION_INFO;

type
  TWTSAPI32_WTSEnumerateSessions = function(hServer: THandle; Reserved: DWORD; Version: DWORD; ppSessionInfo: pWTS_SESSION_INFO; pCount: pDWORD): BOOL; stdcall;
  TWTSAPI32_WTSFreeMemory = procedure(pMemory: Pointer); // zum Freigben des Speichers von pPWTS_SESSION_INFO



Type
  TMain = Class(TForm) ...
  ...
  private
    // Rückgabewerte von WTSEnumerateSessions
    ARR_WTS_SESSION_INFO : ARRAY OF WTS_SESSION_INFO;
    pPWTS_SESSION_INFO : Pointer = @ARR_WTS_SESSION_INFO;

    WTS_SESSION_COUNT : Integer;
    pCount : Pointer = @WTS_SESSION_COUNT;
    
    
    WTSAPI32_WTSEnumerateSessions: TWTSAPI32_WTSEnumerateSessions;
    WTSAPI32_WTSFreeMemory: TWTSAPI32_WTSFreeMemory;
  


...
...
implementation

...
  if NOT WTSAPI32_WTSEnumerateSessions(WTS_Server_Handle, 0, 1, pPWTS_SESSION_INFO, pCount) then
  begin
    log.Lines.Add('TerminalserverSessions konnten nicht ausgelesen werden');
    FreeLibrary(HDL_WTSAPI32_DLL);
    HDL_WTSAPI32_DLL := 0;
    WTSAPI32_WTSFreeMemory(pPWTS_SESSION_INFO);
    exit;
  end
  else begin
    log.Lines.Add(' TerminalserverSessions wurden ermittelt');
    WTSAPI32_WTSFreeMemory(pPWTS_SESSION_INFO);
  end;

...
Leider ist das Ergebnis von WTSAPI32_WTSEnumerateSessions immer false
Der Aufruf von WTSAPI32_WTSFreeMemory(pPWTS_SESSION_INFO) bringt eine AV, wahrscheinlich weil der Pointer ins Nirvana zeigt ...

[EDIT]

Ich habe eben noch ein GetLastError eingebaut ...
Unter Win2000 Server (aus einer Terminalsession) bekomme ich als Fehler "Klasse nicht vorhanden" und unter WinXP Pro "Zugriff verweigert".
Das "Zugriff verweigert" kommt sicher daher, das ich unter WinXP keine Möglichkeit finde, das TS Recht "Query Information" zu setzen ...

[/EDIT]


Ich brauche Hilfe bei der Übersetzung der C Header und Typen ...
Wäre wirklich nett, wenn ihr mir dabei helfen würdet.

Danke und schöne Grüße,
Jens
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz