AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Freigegebene Festplatten eines PCs ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Freigegebene Festplatten eines PCs ermitteln

Ein Thema von Salomon · begonnen am 6. Mai 2003 · letzter Beitrag vom 18. Jan 2021
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Re: Freigegebene Festplatten eines PCs ermitteln

  Alt 16. Jan 2021, 23:13
Ich kürze das mal hier ab. Ich glaube diese Zeile macht mir Probleme:
Code:
  Inc(LsiWork); // Da der Typ jetzt dem der Struktur entspricht reicht inc
Ich hatte auch mal ähnliches benutzt, wo die Variable mit SizeOf() hochgezählt wurde. Dies ging ebenfalls nicht aber ein Test mit der hälfte (größe div 2) ging dann wiederum. Aber man kann ja nicht (ohne Plan) irgendwas machen
Ich bekomme jedenfalls immer eine "c0000005 ACCESS_VIOLATION" Meldung angezeigt. Im Debugger wird eine Zeile markiert:
Code:
function _PWCharLen(P: PWideChar): Integer;
{$IFNDEF LEGACY_PWCHARLEN}
begin
  Result := 0;
  if P <> nil then
    while P[Result] <> #0 do  // <- diese hier wird markiert (ist aus der system.pas)
      Inc(Result);
end;
Hier beim schreiben... ich habe den Code gerade mal unter Win32 ausgeführt. Ist mir gerade so eingefallen. Da geht es. Zurück auf Win64 und schon ist der Fehler wieder da. Weiß jemand, wie ich das anpasse, damit es bei 32 sowie auch bei 64 Bit geht?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#2

AW: Freigegebene Festplatten eines PCs ermitteln

  Alt 17. Jan 2021, 10:15
@MicMic:
Definiere mal das record nicht als packed . Vor einigen Jahren hatte ich auch mit diversen Problemen, vor allem Zugriffsverletzungen, zu kämpfen, als es um Win64 ging. Mit der Entfernung der Anweisung packed waren die Zugriffsverletzungen dann verschwunden.

Grüße
Dalai
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Freigegebene Festplatten eines PCs ermitteln

  Alt 17. Jan 2021, 17:51
@MicMic:
Definiere mal das record nicht als packed . Vor einigen Jahren hatte ich auch mit diversen Problemen, vor allem Zugriffsverletzungen, zu kämpfen, als es um Win64 ging. Mit der Entfernung der Anweisung packed waren die Zugriffsverletzungen dann verschwunden.

Grüße
Dalai
Ja Super... jetzt geht es mit 32 und 64. Danke
Habe zur Ansicht:
ADMIN$, C$, D$, E$, IPC$ und einen freigegebenen Ordner

Was kann denn da alles so drin stehen?
Noch andere spezielle Sachen? In der "LsiWork.shi2_remark" Variable habe ich bei mir "Remoteverwaltung, Standardfreigabe und Remote-IPC" stehen. Ein freigegebenen Ordner hat bei mir kein Kommentar im "remark" stehen. Frage mich auch gerade wie ich einen hinzugefügten freigegebenen Ordner identifizieren kann. Das Dollarzeichen zu überprüfen, bringt wohl nicht viel, weil ein Ordner selber auch ein "$" Zeichen haben kann.

Mike
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Freigegebene Festplatten eines PCs ermitteln

  Alt 18. Jan 2021, 07:34
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...)
Gruß, Jo
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Freigegebene Festplatten eines PCs ermitteln

  Alt 18. Jan 2021, 08:38
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.
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Freigegebene Festplatten eines PCs ermitteln

  Alt 18. Jan 2021, 16:00
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Freigegebene Festplatten eines PCs ermitteln

  Alt 18. Jan 2021, 16:57
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}
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Jan 2021 um 17:08 Uhr)
  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 03:13 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