Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Freigegebene Festplatten eines PCs ermitteln (https://www.delphipraxis.net/4623-freigegebene-festplatten-eines-pcs-ermitteln.html)

jobo 18. Jan 2021 07:34

AW: Freigegebene Festplatten eines PCs ermitteln
 
Das sind administrative Standardfreigaben. Die kannst Du auch aufheben oder so anschauen: Systemsteuerung> Computerverwaltung> Freigaben.

Du kannst ja selbst neue erzeugen und die sollten dann aufgeführt werden. Wie die genannt werden, ist glaube ich unwichtig.
(Vielleicht keine Fragezeichen oder so, die üblichen Regeln...)

MicMic 18. Jan 2021 08:38

AW: Freigegebene Festplatten eines PCs ermitteln
 
Zitat:

Zitat von jobo (Beitrag 1481106)
Das sind administrative Standardfreigaben. Die kannst Du auch aufheben oder so anschauen: Systemsteuerung> Computerverwaltung> Freigaben.

Du kannst ja selbst neue erzeugen und die sollten dann aufgeführt werden. Wie die genannt werden, ist glaube ich unwichtig.
(Vielleicht keine Fragezeichen oder so, die üblichen Regeln...)

Mir geht es um eine Liste wie im Explorer, damit der Benutzer in diese freigegebenen Ordner wechseln kann. Diese Standardfreigaben kommen dort nicht zur Ansicht. Das Dollarzeichen zu prüfen, geht leider nicht. Ein Ordner von "ADMIN$" wird dort zwar als Freigabename "ADMIN$2" angelegt aber ein Ordner mit "Hallo$" bekommt als Freigabename dann auch nur "Hallo$" zugewiesen. Somit kann ich leider nicht dieses Dollarzeichen als letzten Zeichen als Überprüfung nutzen. Was ich noch sehe, ist die Beschreibung der Einträge. Diese Standardfreigaben haben einen Kommentar. Auch ein Drucker bekommt mit "print$" einen Kommentar zugewiesen. Dagegen sind normale Ordner (die ich freigeben möchte) ohne Kommentar versehen. Das könnte man als Überprüfung nutzen. Aber denke, dass ist definitiv der falsche Weg.

MicMic 18. Jan 2021 16:00

AW: Freigegebene Festplatten eines PCs ermitteln
 
Inzwischen habe ich auf "shi2_type" geschaut. Somit kann ich schon mal diese C$,D$,ADMIN$,IPC$ ausblenden lassen (sie haben den Wert "[Disk] und [Special]"). Dagegen haben meine hinzugefügten Ordner nur den Wert "[Disk]". Damit kann man "shi2_type" auswerten lassen.
Delphi-Quellcode:
const
    STYPE_DISKTREE = 0;
    STYPE_PRINTQ   = 1;
    STYPE_DEVICE   = 2;
    STYPE_IPC      = 3;
    STYPE_TEMPORARY = $40000000;
    STYPE_SPECIAL  = $80000000;

function ShareTypeToStr(SType : DWORD) : String;
begin
    case SType and $FFFF of
    STYPE_DISKTREE: Result := '[Disk]';
    STYPE_PRINTQ:   Result := '[Printer]';
    STYPE_DEVICE:   Result := '[Device]';
    STYPE_IPC:      Result := '[IPC]';
    else
                     Result := '[Type0x' + IntToHex(SType, 8) + ']';
    end;
    if (SType and STYPE_SPECIAL) <> 0 then
        Result := Result + '[Special]';
    if (STYpe and STYPE_TEMPORARY) <> 0 then
        Result := Result + '[Temporary]';
end;
Leider hat nun ein Drucker (print$) kein "[Special]" dabei. Nur "[Disk]". Dieser Eintrag sollte natürlich auch als nicht hinzugefügten freigegebenen Ordner erkannt werden. Aber ich bin ja schon mal weiter. Ich frage mich auch, was "[Temporary]" sein kann, um damit mal zu testen.

Mir ist das mit dem Netzwerk-Zeugs alles noch etwas unlogisch. Keine Erfahrung damit. Habe auch nur einen PC. Bei der Funktion "NetShareEnum" kann man anstatt "nil" (steht ja für Lokal) auch einen Computernamen angeben. Wie kann ich damit denn mal herumtesten?

himitsu 18. Jan 2021 16:57

AW: Freigegebene Festplatten eines PCs ermitteln
 
Zitat:

Zitat von MicMic (Beitrag 1481138)
Ich frage mich auch, was "[Temporary]" sein kann, um damit mal zu testen.

Ich würde empfehlen den Hersteller zu fragen, oder Google und Co.
https://docs.microsoft.com/en-us/win...-netsharecheck
https://stackoverflow.com/questions/...type-temporary

Also ein Beispiel dafür wäre ein RAM-Drive, welches z.B. beim Neustart des Rechners den Inhalt vergessen hat.
Bzw. hier ein "temporärer" Share, wäre Einer, welcher beim Neustart weg ist. (ist nur jetzt da, bis zum Ende ... wurde also nicht "permanent" gespeichert)


Welchen Typ ein Share/Drive hat, das bestimmt der Treiber.
Es gibt auch Treiber, die einfach schlecht programmiert sind und falsche Eigenschaften liefern.




PACKED einfach einfach so weglassen, bzw. einfügen, das ist definitiv das falsche Vorgehen.

Ob das PACKED oder sonstwie ausgerichtet ist, dass steht in der Dokumentation, bzw. den Header-Files dieser API.
Im Delphi muß "einfach" nur das gleiche gemacht werden, wie es die Quelle vorschreibt.


Aber ja, grundsätzlich trifft es zu, dass die meisten Records der WinAPI nicht packed sind.
PACKED entspricht {$ALIGN 1}

MicMic 18. Jan 2021 18:25

AW: Freigegebene Festplatten eines PCs ermitteln
 
Danke für die Info zum STYPE_TEMPORARY
Ja, ist logisch... RAM-Disk.

Ich teste gerade Werte, damit ich z.B. diesen Drucker identifizieren und somit diesen ausschließen kann.
Habe mal direkt als DWORD shi2_type überprüft. Damit komme ich nicht weiter. Gleiche Werte

Ich habe mal das Ganze mit SHARE_INFO_502 probiert. Weil hier gibt es noch shi502_reserved.

Hier stehen die Infos drinnen. Also normale hinzugefügte Ordner haben hier den Wert 128. Ein Drucker den Wert 104. Dagegen ein hinzugefügter Ordner mit Kommentar wiederum 92. Da muss man wohl was ähnliches zusammenbauen wie die Funktion "ShareTypeToStr", damit man am Ende richtig unterscheiden kann. Ich versuche Google zu bemühen. Man weiß ja erst mal nicht was in "shi502_reserved" alles enthalten sein kann.

MicMic 18. Jan 2021 21:46

AW: Freigegebene Festplatten eines PCs ermitteln
 
Mal zur Info:

Sogar der Explorer prüft auf das Dollarzeichen.
Also Microsoft selbst mach es nicht richtig (sieht zumindest so aus).

Also ein Ordner "hallo$" kann man ganz normal freigeben. NetShareEnum findet diesen auch aber der Explorer zeigt diesen nicht an. Also prüft Microsoft hier wohl auch auf das Dollarzeichen.

Auch Sources von Apple habe ich gefunden. Da wird auf "print$" geprüft. Das ist auch falsch. Wenn es nämlich kein Drucker freigegeben ist, dann kann man einen Ordner mit dem Namen "print$" auch ganz normal benutzen, für eine Freigabe. Nur die Programme werden dann falsch funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 Uhr.
Seite 4 von 4   « Erste     234   

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