AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Remote Terminal Session erkennen
Thema durchsuchen
Ansicht
Themen-Optionen

Remote Terminal Session erkennen

Ein Thema von shmia · begonnen am 3. Feb 2011 · letzter Beitrag vom 6. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Remote Terminal Session erkennen

  Alt 3. Feb 2011, 15:03
Ich verwende folgenden Code, um festzustellen, ob mein Programm auf einem Terminal Server läuft:
Delphi-Quellcode:
function IsRemoteTerminalServerSession:Boolean;
const
  SM_REMOTESESSION = $1000; // in Windows.pas nicht enthalten
begin
   result := GetSystemMetrics( SM_REMOTESESSION ) <> 0;
end;
Leider kann ich so nicht unterscheiden, ob ich auf einen Terminal Server arbeite
oder ob ich auf einer normalen Arbeitsstation über eine Remote Session bin.

Was könnte man tun, um das herauszufinden?
Andreas
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

AW: Remote Terminal Session erkennen

  Alt 3. Feb 2011, 16:49
Also erstmal:
Seit XP läuft immer ein Terminal Server. D.h. du kannst nur unterscheiden, ob deine Anwendung ferngesteuert wird oder nicht...eben RDP.

Also ist SM_REMOTESESSION schon richtig, um dies festzustellen. Oder willst du wissen, ob du auf einem Serversystem läufst oder ob der TS Dienst läuft?

BTW:
Du kannst erkennen, ob dein Programm in der Konsolensitzung (console session) läuft, indem du die Prozesssitzungskennung mit dem Wert von WTSGetActiveConsoleSessionId vergleichst. Wenn gleich, dann ist wird deine Anwendung von der lokalen Maus-, Tastatur gesteuert.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

AW: Remote Terminal Session erkennen

  Alt 3. Feb 2011, 18:20
Deine Frage ist leider etwas unverständlich formuliert. Du kannst folgendes nicht: Per RDP von einem "Client"-System auf das selbe "Client"-System eine Verbindung aufbauen. Aber: Du kannst, wenn du einen TS-Server(dienst) hast, gerne an der lokalen Konsole eine RDP-Verbindung zu localhost aufbauen (in den Einstellungen schauen, Windows verbietet das bei default).

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Remote Terminal Session erkennen

  Alt 3. Feb 2011, 23:14
Abfrage des Betriebssystems?

Es gibt aber auch alternative Terminalserver, die aus (fast) jedem Desktop BS einen echten Terminalserver machen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Remote Terminal Session erkennen

  Alt 4. Feb 2011, 15:58
Deine Frage ist leider etwas unverständlich formuliert
Ja, ich probier's nochmal.
Es gibt folgende Rechner:
A - Windows Server 2003/Terminal Server, nach dem Neusprech von Microsoft heisst das nicht mehr Terminal Server sondern Remote Desktop Session Host.
B - Windows 7
C - Windows XP
Mein Programm muss je nach dem ob es auf einem Terminal Server oder auf einer Workstation läuft unterschiedlich reagieren (andere Pfade usw).

Szenario 1:
Anwendung läuft ganz normal auf Rechner B
Szenario 2:
Rechner C stellt eine RDP-Verbindung zu Rechner A her und startet dort meine Anwendung.
Szenario 3:
Benutzer von Rechner B braucht Hilfe. Deshalb verbindet sich Rechner C mit B und startet meine Anwendung.
Und jetzt denkt meine Anwendung sie würde auf einem Terminal Server laufen und reagiert falsch weil sie ja in Wirklichkeit auf einer Arbeitstation läuft.
Ich möchte also Szenario 2 von 3 unterscheiden können.

Ich könnte nun meine Funktion zur Erkennung der Betriebsart erweitern:
Delphi-Quellcode:
function IsServerOS:boolean;
begin
// rauszufinden ob wir auf einem Server OS laufen
// GetVersionEx

  Result := ...;
end;

function IsRemoteTerminalServerSession:Boolean;
const
  SM_REMOTESESSION = $1000; // in Windows.pas nicht enthalten
begin
  result := (GetSystemMetrics( SM_REMOTESESSION ) <> 0) and
    IsServerOS;
end;
Ich möchte die Funktion IsServerOS gerne vermeiden weil sie aufwändig (bei Delphi5 fehlen die nötigen Strukturen) und nicht sicher ist.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Remote Terminal Session erkennen

  Alt 4. Feb 2011, 16:01


Der Anwendung im Setup die entsprechenden Pfade übergeben ... dann ist es ja egal was wie wo läuft.
$2B or not $2B
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: Remote Terminal Session erkennen

  Alt 4. Feb 2011, 17:15
Der Anwendung im Setup die entsprechenden Pfade übergeben ... dann ist es ja egal was wie wo läuft.
Wäre wohl besser gewesen, aber es sind schon einige Anwendungen in freier Wildbahn.
Andreas
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#8

AW: Remote Terminal Session erkennen

  Alt 4. Feb 2011, 19:27
Was genau machst du, dass du unterscheiden musst?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Remote Terminal Session erkennen

  Alt 4. Feb 2011, 19:44
Vor allem das mit den Pfaden ist doch kein Problem (eigentlich), wenn man es richtig macht, dann ist es völlig egal, worauf das Programm gerade läuft
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Remote Terminal Session erkennen

  Alt 6. Feb 2011, 18:32
Hi,

vielleicht wäre IsServerOS doch nicht so schlecht, nur halt z.B. aus der ntdll...RtlGetNtProductType

Kann man ja mal probieren (siehe GetNTType aus IdGlobalProtocols.Pas)

Frank
Frank Reim
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz