Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi unverständliches Verhalten von ReadFile (https://www.delphipraxis.net/142565-unverstaendliches-verhalten-von-readfile.html)

p80286 30. Okt 2009 11:05


unverständliches Verhalten von ReadFile
 
Hallo zusammen,

ich bastele z.Zt. nebenbei an einer Möglichkeit eine CD-ROM zulesen. Dafür hab ich mich an einer Leseroutine für denm MBR bedient.

Delphi-Quellcode:
var
  nBytesRead ,
  fHandle   : Cardinal;
 
  errc      : dword;
  vbuffer   : array of byte;
begin
  fHandle := CreateFile(PChar('\\.\'+lw),           // ...PHYSICALDRIVE0 <--<< first Harddisk ( Primary Master )
                        GENERIC_READ,               // ...read only
                        FILE_SHARE_WRITE+FILE_SHARE_WRITE,  // ...Wichtig, nicht das es Probleme gibt
                        nil,
                        OPEN_EXISTING,              // ...ist klar warum
                        0,
                        0);

  if fHandle = INVALID_HANDLE_VALUE then
  begin
    errc:=GetLastError;
    ShowMessage('CreateFile - Error: Invalid Handle'#13#10'LastErrcode:'+inttostr(errc)+' '+syserrorMessage(errc));
    exit;
  end;
  { secsize ist mit 512 vorbelegt }
  SetLength(vBuffer,secsize);
  if not ReadFile(fHandle,vBuffer[0],secsize,nBytesRead,nil) then .....
Wenn ich diesen code unter XP Prof/Vista home loslasse, dann wird der Zugriff auf C: mit dem Fehler 5 (Zugriff verweigert) belohnt, was ja zu erwarten ist. Das es unter XPProf beim Zugriff auf USB-Sticks eine 5 gibt, aber unter Vista alles problemlos funktioniert schiebe ich mal auf unterschiedliche Zugriffsrechte.

Beim Zugriff auf die CD-ROM (daten sind vorhanden und lesbar!) erhalte ich folgende Ergebnisse:
XPProf
Audio-CD Fehler: 0 GeleseneBytes: 0
Daten-CD Fehler: 0 GeleseneBytes: 512

Vista Home
in beiden Fällen Fehler 87 (ungültiger Parameter)

zum einen frage ich mich warum auf einmal ein "ungültiger Parameter" auftaucht, (und welcher bitte ist es??)

zum anderen, warum werden von einer Daten-CD auch Daten gelesen und von einer Audio-CD nicht?

Habt Ihr eine Erklärung für mich?

Gruß
K-H

Bernhard Geyer 30. Okt 2009 11:14

Re: unverständliches Verhalten von ReadFile
 
Zitat:

Zitat von p80286
.. aber unter Vista alles problemlos funktioniert schiebe ich mal auf unterschiedliche Zugriffsrechte.

Verwendet deine Exe eine erweiterte Vista-Manifest? Ansonsten wird der Zugriff direkt auf C:\ u.U. virtualisiert.

p80286 30. Okt 2009 11:23

Re: unverständliches Verhalten von ReadFile
 
Hallo Bernhard,

ein bitte was??
Aber interressante Idee muß ich im Hinterkopf behalten.
Es geht aber vor allem auf die Zugriffe auf die CD-ROM (ist auf den Rechnern verschieden, E: und F:, darum hatte ich keine Laufwerksbuchstaben angegeben)

Gruß
K-H

himitsu 30. Okt 2009 14:45

Re: unverständliches Verhalten von ReadFile
 
eine Audio-CD kann nicht einfach via ReadFile gelesen werden
sonst könnte sich ja jeder ein Audio-/Video-Rippingprogramm schreiben


Zitat:

PHYSICALDRIVE0
CD/DVD-Laufwerke heißen anders (aber ich glaub das sollte wohl beachtet worden sein)

Und CDs/DVDs haben eine andere Sektorgröße.

Apollonius 30. Okt 2009 14:52

Re: unverständliches Verhalten von ReadFile
 
Was soll denn FILE_SHARE_WRITE+FILE_SHARE_WRITE werden?

himitsu 30. Okt 2009 15:06

Re: unverständliches Verhalten von ReadFile
 
Ja, das ist für Festplatten wichtig, aber bei CDs sollte es egal sein, die sind ja sowieso nur Read-Only.

PS: auf Festplatten zuzugreifen wird ab Vista schwierig (in XP zwar auch, aber da ist man oftmals ja eh schon ADMIN)

Und, wie gesagt, so geht es eben nur mit der aktuellen "Session" bei Multisessiondatenträgern und mit Daten-CDs/DVDs.
für alles andere muß man sozusagen direkt den IDE-Controler ansprechen

Bernhard Geyer 30. Okt 2009 15:14

Re: unverständliches Verhalten von ReadFile
 
Zitat:

Zitat von p80286
ein bitte was??

Meinst du jetzt Vista-Manifest oder virtualisiertes Dateisystem?

p80286 30. Okt 2009 15:20

Re: unverständliches Verhalten von ReadFile
 
@ Bernhard
Entschuldige! das Vista-Manifest!
In meiner Vorstellung ist alles was bunt ist und runde Ecken hat ganz viel bäh. Darum bin ich der Meinung das ich so etwas nicht benötige. Oder irre ich da?

Vielen dank für die Antworten!

Zitat:

Zitat von himitsu
eine Audio-CD kann nicht einfach via ReadFile gelesen werden
sonst könnte sich ja jeder ein Audio-/Video-Rippingprogramm schreiben

ok, das erklärt den Fehler 0 mit 0 gelesenen Bytes!

(mit DOS und ASPI ging das noch *grummel*)

Zitat:

Zitat von himitsu
Und CDs/DVDs haben eine andere Sektorgröße.

Ja und? wenn ich nur die ersten 512 Bytes lesen will? oder muß die Anzahl der zu lesenden Bytes der Physischen Sektorgröße entsprechen? Wenn Ja dann aber nur unter Vista wo dann der Fehler 87 Ungültiger Parameter gekommen ist.

Ach ja unter Vista hab ich es auch als Admin versucht : immer noch die 87.

Gruß
K-H

P.s. das brauch ich um an den CD-Text zu kommen, warum noch einmal erfassen was es schon gibt.

Neutral General 30. Okt 2009 15:24

Re: unverständliches Verhalten von ReadFile
 
Ich glaube Apollonius wollte darauf hinaus, dass er statt:

Delphi-Quellcode:
FILE_SHARE_WRITE+FILE_SHARE_WRITE
wahrscheinlich

Delphi-Quellcode:
FILE_SHARE_READ or FILE_SHARE_WRITE
meint/will/braucht.

p80286 30. Okt 2009 15:32

Re: unverständliches Verhalten von ReadFile
 
OK
'll try it!

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr.
Seite 1 von 2  1 2      

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