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 CD Laufwerk öffen - Wo ist das Problem? (https://www.delphipraxis.net/70776-cd-laufwerk-oeffen-wo-ist-das-problem.html)

skunker 4. Jun 2006 16:41


CD Laufwerk öffen - Wo ist das Problem?
 
Hallo,
ich versuche mittels DeviceIOControl ein CD Laufwerk zu öfnnen und habe daher folgendes recherchiert und zusammengebastelt:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
handle: THandle;
test: PSecurityAttributes;
back: Boolean;
return: Cardinal;
tt: POverlapped;
begin
handle := CreateFile('\\\\.\\PhysicalDrive0',GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NIL,OPEN_EXISTING,0,0);

back := DeviceIOControl(handle,IOCTL_STORAGE_EJECT_MEDIA,NIL,0,NIL,0,return,tt);

end;
So ausführen ist ja kein Problem nur bekomm ich eine Zugriffsverletzung in der kernel32.dll und nichts passiert, also das LW öffnet sich nicht.

Der Fehler liegt bei DeviceIOControl, den nach dem debugging weiß ich das CreateFile keinen Fehler aufruft.

Doch wo liegt der Fehler ?


Danke schonmal im Voraus.

vlees91 4. Jun 2006 16:44

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Ich weiß nciht, wo der Fehler liegt, aber verscuh doch mal das: (außer es MUSS mit dem DeviceIOControl gemacht werden)
http://dsdt.info/tipps/?id=138

Hawkeye219 4. Jun 2006 16:48

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Muß die Variable tt nicht vom Typ TOverlapped sein?

Gruß Hawkeye

//Edit: die Übergabe ist dann "@tt"

Daniel G 4. Jun 2006 16:49

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Is' PhysicalDrive0 nicht eigentlich immer die HDD? Ich mein, die lässt sich ja nicht auswerfen, oder? :stupid:

@vlees: Bei deinem Link ist es aber nicht möglich das Laufwerk auszuwählen. Es ist definitiv über ASPI/SPTI machbar.

vlees91 4. Jun 2006 16:51

Re: CD Laufwerk öffen - Wo ist das Problem?
 
bei mir zeigt der Compiler bei IOCTL_STORAGE_EJECT_MEDIA "Undefinierter Bezeichner" an (delphi-ver. steht links (D6 prof))

Daniel G 4. Jun 2006 16:55

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Jupp, gibt's ja auch erst seit NT 4.0

Zitat:

Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation 4.0.
IOCTL_STORAGE_EJECT_MEDIA = $002D4808;

vlees91 4. Jun 2006 16:57

Re: CD Laufwerk öffen - Wo ist das Problem?
 
aber nt gibts länger als delphi 6....

skunker 4. Jun 2006 16:59

Re: CD Laufwerk öffen - Wo ist das Problem?
 
@vlees91
ne es muss schon ohne MCI Commands gehen.
IOCTL_STORAGE_EJECT_MEDIA ist eine Konstante, auf der JEDI Page kannst du dir die winapi Headers ziehen und die JwaWinIoctl einbinden.


Ich habe jetzt anstatt POverlapped mal TOverlapped probiert bzw. beides und beim Command bei tt zu @tt geändert.

Jetzt kommt keine Zugrifssverletzung mehr, garnichts. Nur das Laufwerk öffnet sich immernoch nicht.

Ich hab schon \\\\.\\PhysicalDrive0-3 probiert und \\\\.\\D: probiert oder nur D: nichts funzt.

Daniel G 4. Jun 2006 17:03

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Zitat:

Zitat von vlees91
aber nt gibts länger als delphi 6....

:gruebel:

Hmm.. Dann hat Borland zu diesem Zeitpunkt die Konstanten für NT wohl nicht eingebaut... Interessant... D2005 kennt die Konstante jedenfalls..

//Edit: Äh... D2005 kennt die doch nicht... Dann hat Borland wohl nicht alle Konstanten aus'm PSDK übernommen..

Daniel G 4. Jun 2006 17:11

Re: CD Laufwerk öffen - Wo ist das Problem?
 
Soo...

Delphi-Quellcode:
handle := CreateFile('\\.\I:',GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NIL,OPEN_EXISTING,0,0);
Das gibt schonmal ein gültiges Handle. Dein Code hat nämlich nichtmal ein gültiges Handle geliefert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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