AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen von Remote Desktop

Ein Thema von Alfonso · begonnen am 1. Nov 2010 · letzter Beitrag vom 3. Nov 2010
Antwort Antwort
Alfonso

Registriert seit: 10. Jan 2006
251 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Erkennen von Remote Desktop

  Alt 1. Nov 2010, 19:44
In meinem Programm kann man Dateien in die Datenbank kopieren.
Ich bitte meinen Anwemdern nicht den normalen Dateiauswahldialog an, sondern habe auf basis von TFilelistbox eine eigene Dateiauswahl gemacht. Wenn ich mein Programm über Remotedesktop aufrufe, soll das Quell-Laufwerk natürlich nicht C:, D: oder ähnliches sein, da dieses ja auf dem Remoterechner liegt. Ich muss in diesem Fall erkennen, welche Laufwerke er Remote als lokale Ressource eingebunden hat, in dem ich folgendes mache:
Delphi-Quellcode:
for i := 67 to 90 do
  begin
   if DirectoryExists('\\tsclient\'+chr(i)+'\') then
    cbbDrive.Items.Add('Remote '+chr(i));
  end;
Dann werden diese "Netzlaufwerke" als Quelllaufwerke angezeigt.

Oder gibt es etwas einfacheres?

Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Erkennen von Remote Desktop

  Alt 1. Nov 2010, 20:05
Oder gibt es etwas einfacheres?
Da müßtest du mal Remko fragen (der ist auch Benutzer hier, aber dann ggf. auf Englisch fragen ).

Es könnte durchaus eine der WTS*-Funktionen besser geeignet sein, aber ich müßte mich erst einlesen und er weiß es vielleicht ohne Nachgucken.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Erkennen von Remote Desktop

  Alt 1. Nov 2010, 20:50
Selbst wenn es anders besser geht,
aber so sieht es bestimmt etwas übersichtlicher aus.
Delphi-Quellcode:
var c: Char;

for c := 'Cto 'Zdo
  if DirectoryExists('\\tsclient\' + c) then
    cbbDrive.Items.Add('Remote ' + c);
Du könntest doch immer nach Remote-Laufwerken suchen und alle lokalen ( X: ) und Remote-Laufwerke ( \\tsclient\X ) anbieten, egal wo das Programm läuft.

Eventuell möchte auch mal jemand via Remote ein lokales Laufwerk nutzen und umgekehrt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Nov 2010 um 20:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#4

AW: Erkennen von Remote Desktop

  Alt 1. Nov 2010, 22:54
Oder gibt es etwas einfacheres?
Da müßtest du mal Remko fragen (der ist auch Benutzer hier, aber dann ggf. auf Englisch fragen ).

Es könnte durchaus eine der WTS*-Funktionen besser geeignet sein, aber ich müßte mich erst einlesen und er weiß es vielleicht ohne Nachgucken.
Sadly there is not Wts* or even WinStation* function that can do this, but I tested the code below and that's the only way I see to enumerate all Client Drives:

Delphi-Quellcode:
uses
  JwaWinType, JwaWinNetWk; // Jedi Apilib, can also use JwaWindows instead of Single Units

const
  WNNC_NET_TERMSRV = $00360000;

type
  TNetResourceArray = array[0..ANYSIZE_ARRAY-1] of NETRESOURCE;
  PNetResourceArray = ^TNetResourceArray;

procedure TForm3.Button1Click(Sender: TObject);
var
  NetResPtr: PNetResourceArray;
  ProviderName: array[0..MAX_PATH] of Char;
  BufSize: DWORD;
  hEnum: DWORD;
  Count: DWORD;
  Res: Cardinal;
  i: Integer;
begin
  // Get Provider Name (should be 'Microsoft Terminal Services')
  BufSize := Length(ProviderName) * SizeOf(Char);
  ZeroMemory(@ProviderName[0], BufSize);
  Res := WNetGetProviderName(WNNC_NET_TERMSRV, ProviderName, BufSize);
  if Res <> NO_ERROR then
  begin
    // Handle the Error (call WNetGetLastError for more info), raise exception..
  end;

  Memo1.Lines.Add(Format('ProviderName=%s', [ProviderName]));
  Res := WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, 0, nil, hEnum);
  if Res = NO_ERROR then
  begin

    // return as many entries as possible
    Count := DWORD(-1);

    // Allocate a some memory, 16 KB is typical size per docs
    BufSize := 16384;
    Memo1.Lines.Add(Format('Allocate %d Bytes', [BufSize]));
    GetMem(NetResPtr, BufSize);
    Res := WNetEnumResource(hEnum, Count, NetResPtr, BufSize);

    while Res = ERROR_MORE_DATA do
    begin
      Inc(BufSize, SizeOf(NETRESOURCE));
      Memo1.Lines.Add(Format('Allocate %d Bytes', [BufSize]));
      ReAllocMem(NetResPtr, BufSize); // Alloc more...
      Count := DWORD(-1);
      Res := WNetEnumResource(hEnum, Count, NetResPtr, BufSize);
    end;

    if Res = NO_ERROR then
    begin
      Memo1.Lines.Add(Format('Count=%d', [Count]));
      for i := 0 to Count - 1 do
      begin
        if lstrcmpi(NetResPtr^[i].lpProvider, @ProviderName[0]) = 0 then
        begin
          Memo1.Lines.Add(Format('Found TSClient Drive: %s', [NetResPtr^[i].lpRemoteName]));
        end
        else begin
          Memo1.Lines.Add(Format('Found non TSClient Drive: %s', [NetResPtr^[i].lpRemoteName]));
        end;
      end;
    end
    else begin
      Memo1.Lines.Add(Format('WNetEnumResource returned %d', [Res]));
    end;

    FreeMem(NetResPtr);
    WNetCloseEnum(hEnum);
  end
  else begin
    Memo1.Lines.Add(Format('WNetOpenEnum returned %d', [Res]));
  end;
end;

end.
On my testsystem the output is:
ProviderName=Microsoft Terminal Services
Allocate 16384 Bytes
Count=3
Found TSClient Drive: \\tsclient\Z
Found TSClient Drive: \\tsclient\C
Found TSClient Drive: \\tsclient\D
See my blog blog
See our Jedi blog

Geändert von Remko ( 1. Nov 2010 um 23:10 Uhr)
  Mit Zitat antworten Zitat
Dezipaitor

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

AW: Erkennen von Remote Desktop

  Alt 2. Nov 2010, 16:09
Raymond Chen hat auch was geschrieben, wann man auf RDP prüfen sollten und warum:
http://blogs.msdn.com/b/oldnewthing/...03/508694.aspx
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Erkennen von Remote Desktop

  Alt 2. Nov 2010, 17:12
Wird da nicht die Umgebungsvariable "SESSIONNAME" gesetzt?

Wenn ich mich recht entsinne, enthält SESSIONNAME den Wert "RDP" auf den ersten 3 Zeichen.

Wie zuverlässig das ist, weiß ich allerdings nicht zu sagen.
  Mit Zitat antworten Zitat
Dezipaitor

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

AW: Erkennen von Remote Desktop

  Alt 3. Nov 2010, 11:20
Wird da nicht die Umgebungsvariable "SESSIONNAME" gesetzt?

Wenn ich mich recht entsinne, enthält SESSIONNAME den Wert "RDP" auf den ersten 3 Zeichen.

Wie zuverlässig das ist, weiß ich allerdings nicht zu sagen.
Code:
SET SESSIONNAME=RDPbla
callmyapp.exe
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 himitsu
himitsu
Online

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

AW: Erkennen von Remote Desktop

  Alt 3. Nov 2010, 12:03
Code:
SET SESSIONNAME=RDPbla
callmyapp.exe
OK, letztendlich kann man alle Tests mehr oder weniger leicht umgehen.

Aber wenn man mal davon ausgeht, daß da keiner absichtlich was verstellt, warum soll man dann sowas nicht nutzen?

Dieses läßt sich sogar recht einfach in einer Batchdatei prüfen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:29 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