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
 
#6

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

  Alt 20. Sep 2005, 23:00
So, jetzt gehts los ... ich und API und obendrauf noch C Syntax. Da habe ich mir was vorgenommen

Zum Verständnis für Diejenigen, die auch einmal Daten zwischen Terminalserver und Terminalclient über Virtual Channels austauschen müssen, hier einmal knapp die grobe Funktion.

Die um VirtuelChannels nutzen zu können, wird auf den Terminalclient eine DLL als Addin an den Terminalclient gebunden. Diese DLL wird dem Terminalclient über einen RegistryKey bekanntgegeben und geladen, sobald eine Terminalsitzung aufgebaut wird. Der Client initialisiert den/die Virtual Channel. Auf den Terminalserver läuft eine kleine Applikation in der Clientsitzung, die den Virtual Channel öffnet.
Sobald ein Kanal steht können beide Seiten (Server-Applikation und Client-Addin) mit WTSVirtualChannelRead / WTSVirtualChannelWrite über diesen Kanal Daten austauschen. Insgesamt können bis max. 28 VChannels geöffnet werden.


Jetzt zu meinem ersten Problem:

Um das Terminalserverhandle herauszufinden (benötigt um mit WTSEnumerateSessions die aktuellen SitzungsID zu ermitteln) werden die beiden DLL-Funktionen WTSOpenServer und WTSCloseServer aus der wtsapi32.dll benötigt.
Die DLL habe ich dynamisch geladen und die DLL Funktionen in der Server-Applikation wie folgt zugewiesen:

Delphi-Quellcode:
type
  TWTSAPI32_WTSOpenServer=function (pServerName:Pointer):THandle; stdcall;
  TWTSAPI32_WTSCloseServer=procedure (hServer:Pointer); stdcall;
  ...
private
  WTSAPI32_WTSOpenServer:TWTSAPI32_WTSOpenServer;
  WTSAPI32_WTSCloseServer:TWTSAPI32_WTSCloseServer;

var

implementation
...
  @WTSAPI32_WTSOpenServer := GetProcaddress(HDL_WTSAPI32_DLL,pchar('WTSOpenServer'));
  if @WTSAPI32_WTSOpenServer = NIL then
  begin
    log.lines.add('WTSAPI32.DLL - Funktion WTSOpenServer wurde nicht gefunden oder ist falsch deklariert');
  end
  else begin
    log.lines.add('WTSAPI32.DLL - Funktion WTSOpenServer erfolgreich initialisiert');
  end;

  @WTSAPI32_WTSCloseServer := GetProcaddress(HDL_WTSAPI32_DLL,pchar('WTSCloseServer'));
  if @WTSAPI32_WTSCloseServer = NIL then
  begin
    log.lines.add('WTSAPI32.DLL - Prozedur WTSCloseServer wurde nicht gefunden oder ist falsch deklariert');
  end
  else begin
    log.lines.add('WTSAPI32.DLL - Prozedur WTSCloseServer erfolgreich initialisiert');
  end;
...
WTSCloseServer wird erfolgreich zugewiesen, WTSOpenServer jedoch nicht.

Laut MSDN ist WTSOpenServer so deklariert...

Delphi-Quellcode:
HANDLE WTSOpenServer(
  LPTSTR pServerName
);
Was ist hieran falsch ?
TWTSAPI32_WTSOpenServer=function (pServerName:Pointer):THandle; stdcall; 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