Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Floppy schreibschutz an oder aus? (https://www.delphipraxis.net/18008-floppy-schreibschutz-oder-aus.html)

Meflin 12. Mär 2004 19:48


Floppy schreibschutz an oder aus?
 
wie lässt sich das am einfachsten rausfinden?

CalganX 12. Mär 2004 20:02

Re: Floppy schreibschutz an oder aus?
 
Hi,
da es auf dem Datenträger steht und (AFAIK) sich nicht einlesen lässt, würde ich vorschlagen einfach versuchen eine Datei zu erstellen und wenn das fehlt schlägt einfach vermuten dass der Schreibschutz aktiv ist. ;)

Chris

MathiasSimmack 12. Mär 2004 20:03

Re: Floppy schreibschutz an oder aus?
 
Früher, in alten TurboPASCAL-Zeiten, habe ich versucht, temporär eine Datei auf der Disk anzulegen.
Wenn das ging, gab´s keinen Schreibschutz. ;)


Edit: Hm, da war der Chakotay schneller.

Wheelie 12. Mär 2004 20:32

Re: Floppy schreibschutz an oder aus?
 
wenn die floppy noch nicht formatiert wurde, dann nützt dieses verfahren recht wenig.
was anderes fällt mir aber auch nicht ein :(

Delphi-Quellcode:
function WriteProtected: Boolean;
var
  H: DWord;
begin
  Result := False;
  H := CreateFile(PChar('A:\1_dd_fg_666_4423_4.dojwq'),
                  GENERIC_WRITE,
                  0,
                  nil,
                  CREATE_ALWAYS,
                  0,
                  0);
  Result := (H = INVALID_HANDLE_VALUE);
  CloseHandle(H);
end;

w3seek 12. Mär 2004 21:27

Re: Floppy schreibschutz an oder aus?
 
mit DeviceIoControl() und IOCTL_DISK_IS_WRITABLE sollte das gehen.

Luckie 12. Mär 2004 21:29

Re: Floppy schreibschutz an oder aus?
 
Aber vorsicht, da gibt es wieder unterschiedliche Implementierungen bei NT ff. und Consumer Windows.

w3seek 12. Mär 2004 21:41

Re: Floppy schreibschutz an oder aus?
 
Ich erkenne das "Consumer Windows" nicht als Betriebssystem an :P :lol:
ich gehe davon aus, dass der Code nur auf NT-Systemen funktionieren soll ;-)

w3seek 12. Mär 2004 22:08

Re: Floppy schreibschutz an oder aus?
 
Delphi-Quellcode:
function IsDriveWritable(Drive: Integer): Boolean;
const
  IOCTL_DISK_IS_WRITABLE = (
    ($00000007 shl 16) or (0 shl 14) or
    ($0009 shl 2) or 0);
var
  Device: String;
  hFile: THandle;
  BytesReturned: Cardinal;
begin
  Result := false;
  Device := Format('\\.\%s:', [Char(Drive + 65)]);
  hFile := CreateFile(@Device[1], GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile <> 0 then
  begin
    Result := DeviceIoControl(hFile, IOCTL_DISK_IS_WRITABLE, nil, 0, nil, 0,
                              BytesReturned, nil);
    CloseHandle(hFile);
  end;
end;
ungetestet! hab leider kein Floppylaufwerk hier.
Drive 0 = A:, 1 = B:, 2 = C:, etc...

Meflin 13. Mär 2004 10:59

Re: Floppy schreibschutz an oder aus?
 
vielen dank. werds mal ein bisschen durchtesten!

Go2EITS 5. Okt 2006 13:54

Re: Floppy schreibschutz an oder aus?
 
@Alle
Zum obigen Code: Funktioniert nicht!

Ich habe mit der Zeile
Zitat:

Device := Format('\\.\%s:', ['D']);
mein CD Laufwerk angesprochen. Prima: Meldet schreibgeschützt. Aber meine beschreibare Festplatte leider auch. :cry:

Delphi-Quellcode:
function IDW(Drive: Integer): Boolean;
const
  IOCTL_DISK_IS_WRITABLE = (
    ($00000007 shl 16) or (0 shl 14) or
    ($0009 shl 2) or 0);
var
  Device: String;
  hFile: THandle;
  BytesReturned: Cardinal;
begin
  Result := false;
  //Device := Format('\\.\%s:', [Char(Drive + 65)]); //Original!
  Device := Format('\\.\%s:', ['D']); //Zum Testen von Laufwerk D etc.
  hFile := CreateFile(@Device[1], GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile <> 0 then
  begin
    Result := DeviceIoControl(hFile, IOCTL_DISK_IS_WRITABLE, nil, 0, nil, 0,
                              BytesReturned, nil);
    CloseHandle(hFile);
  end;
end;
Mit dem nachfolgendem Beispiel funktioniert es zumindestens auf CD ROMS und Festplatten: Aber auf eine Diskette, die schreibgeschützt ist, kommt eine dicke Fehlermeldung, wie immer, wenn auf Laufwerk A: geschreiben werden soll.

Delphi-Quellcode:
function IsDriveWritable(Drive: Integer): Boolean;
const
  IOCTL_DISK_IS_WRITABLE = ( 
    ($00000007 shl 16) or (0 shl 14) or
    ($0009 shl 2) or 0);
var
  Device: String;
  hFile: THandle;
  BytesReturned: Cardinal;
begin
  Result := false;
  Device := Format('\\.\%s:', [Char(Drive + 65)]);
  hFile := CreateFile(@Device[1], GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile <> 0 then
  begin
    Result := DeviceIoControl(hFile, IOCTL_DISK_IS_WRITABLE, nil, 0, nil, 0,
                              BytesReturned, nil);
    CloseHandle(hFile);
  end;
end;
Vorerst habe ich es mit IsDriveWritable gelöst. Besser ist es natürlich zu wissen, was für einen Datenträger man hat:ListDrives Torry und dann IsDriveWritable aufruft.

Wer hat was zusammengestoppselt, was funktioniert?
Beste Grüße Go2EITS


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.
Seite 1 von 3  1 23      

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 by Thomas Breitkreuz