AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Terminalserver Session ID

Ein Thema von oakley · begonnen am 5. Sep 2019 · letzter Beitrag vom 6. Sep 2019
Antwort Antwort
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#1

AW: Terminalserver Session ID

  Alt 5. Sep 2019, 14:09
Ganz komische Sache.
Code:
GetEnvironmentVariable('SESSIONNAME')
Gibt mir RDP-Tcp#29. Hinter dem Drucker steht aber (redirected 19).
Hat die "redirected" Zahl also nichts mit der Session ID zu tun?

LG

Mirko
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Terminalserver Session ID

  Alt 5. Sep 2019, 14:13
Nein, hat sie nicht.
Der SessionName kann nicht aus der SessionID hergeleitet werden.
Der Wert hinter dem redirected ist aber auf jeden Fall die SessionID.

So kommt man an SessionName und ID:
Code:
C:\>query session
 SITZUNGSNAME     BENUTZERNAME            ID STATUS TYP        GERÄT
 services                                   0  Getr.
 console                                    1  Verb.
 rdp-tcp#12        hansfranz                9  Aktiv  rdpwd
>rdp-tcp#16        administrator           12  Aktiv  rdpwd
 rdp-tcp                                65536  Abhör.
Die Zeile mit dem > davor, das ist man selber.

Geändert von Schokohase ( 5. Sep 2019 um 18:26 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
985 Beiträge
 
Delphi 6 Professional
 
#3

AW: Terminalserver Session ID

  Alt 5. Sep 2019, 16:20
Hmm..

Lass das mit dem Drucker, das funktioniert nur dann wenn der TherminalServer so konfiguriert ist..

Geht auch einfacher:

Delphi-Quellcode:
function ProcessIdToSessionId(dwProcessId: DWORD;var pSessionId: DWORD): BOOL; stdcall; external kernel32 name 'ProcessIdToSessionId';



var
  nProcessID, nSessionID : DWORD;
begin
  nProcessID := GetCurrentProcessId;
  nSessionID := 0;
  if ProcessIdToSessionID( nProcessID, nSessionID) then begin
    if nSessionID > 0 then begin
      // Mach was mit der ID....
    end;
  end;
end;

Kann z.B. genutzt werden um den ClientNamen zu ermitteln:

Delphi-Quellcode:
function GetPCClientName : string;
var
  nProcessID, nSessionID : DWORD;
  nByteCount : DWORD;
  acNameBuff : Pointer;
  tmpName : string;
begin
  Result := '';

  nProcessID := GetCurrentProcessId;
  nSessionID := 0;
  if ProcessIdToSessionID( nProcessID, nSessionID) then begin
    if nSessionID > 0 then begin
      if WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, nSessionId, WTSClientName, acNameBuff, nByteCount) then begin
        tmpName := StrPas(PChar(acNameBuff));
        // Da bei Vista kein Name vorhanden ist, auf Leerstring prüfen!
        if tmpName <> 'then
          result := tmpName;
        WTSFreeMemory(acNameBuff);
      end;
    end;
  end;
end;
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#4

AW: Terminalserver Session ID

  Alt 6. Sep 2019, 08:12
Hallo

Holger, Schokohase, danke für die Erklärungen das hilft mir schon weiter.
Ich habe hier eine Kasse die über den Terminalserver läuft.
Problem ist, das der User immer wieder eine neue SessionID beim login bekommt und die Kasse den alten "redirected" Drucker nimmt.

Daher wollte beim Login ich die SessionID ermitteln und den dementsprechenden Drucker dann eintragen.

LG

Mirko
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: Terminalserver Session ID

  Alt 6. Sep 2019, 09:33
Den Drucker, den du benötigst kannst du dir aus der Registry auslesen
Code:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\<Name des Druckers>\PrinterDriverData
- TSSessionID REG_DWORD
Wenn es den Eintrag TSSessionID gibt, dann ist das ein Drucker von so einer Sitzung und anhand der dort eingetragenen ID kann man den Drucker eindeutig der aktuellen Sitzung zuordnen.
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#6

AW: Terminalserver Session ID

  Alt 6. Sep 2019, 10:56
Ja aber das Problem ist das ich eventuell den Drucker 2 oder 3 mal da drin habe.
Einmal als redicted 20 und nochmal als redirected 21 und möglicherweise nochmal als redirected 22 oder höher.

Bei beiden greift der Registry Eintrag und die SessionID steht da drin aber ich muss das eigentlich nach dem Login auf dem TS wissen welche Session ID vergeben wurde damit ich weiß welcher Druckereintrag der richtige ist.

Ich sehe gerade das in HKEY_CURRENT_USER\Volatile Environment ein Subkey besteht, der gleich der Session ID ist.
HKEY_CURRENT_USER\Volatile Environment\23 bei mir und darin steht ein DWORD Eintrag TEMP. Am Ende des Pfades steht auch die SessionID.

HKEY_CURRENT_USER beinhaltet doch nur Daten des aktuell eingeloggten Users richtig? Da können also HKEY_CURRENT_USER\Volatile Environment\ nie 2 Subkeys stehen.

LG

Mirko

Geändert von oakley ( 6. Sep 2019 um 11:02 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
985 Beiträge
 
Delphi 6 Professional
 
#7

AW: Terminalserver Session ID

  Alt 6. Sep 2019, 11:03
Hmm..

Aber dafür ist doch das 'ProcessIdToSessionId' brauchbar:

https://www.delphipraxis.net/1444853-post9.html

Nach login deine App starten und über ProcessIdToSessionId die SessionID deiner App erhalten, damit kannst Du dann schauen, welcher Drucker zu der Session gehört, in der die App 'jetzt' 'gerade' läuft.

Wird die App in einer anderen Session gestartet, ist auch die SessionID eine Andere....
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:46 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