Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi CDLaufwerks-Schublade sperren (https://www.delphipraxis.net/29083-cdlaufwerks-schublade-sperren.html)

SirThornberry 3. Sep 2004 19:47


CDLaufwerks-Schublade sperren
 
Ich hab heute verzweifelt danach gesucht wie man verhindern kann das jemand das CD-Romlaufwerk öffnet (per Knopfdruck an der Hardware). Unter Dos hatte ich dazu ein Programm bei dem CD-Romlaufwerk dabei... Bei meiner Suche hab ich leider nix brauchbares gefunden. Zu guter letzt hab ich dann einen VB-Source gefunden und hab den versucht in delphi zu bringen. Für Leute die das gleiche Problem haben hier der Source (geht nicht unter Win9x)
Delphi-Quellcode:
function LockMedia(ADriveLetter: Char; ALock: Boolean): Boolean;
var LWStatus: Hwnd;
    LTemp: Cardinal;
    LPMR32: Boolean;//TPreventMediaRemoval;
begin
  LwStatus := CreateFile(PChar('\\.\' + ADriveLetter + ':'),GENERIC_READ Or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
  LPMR32 := ALock;
  If LwStatus <> INVALID_HANDLE_VALUE Then
  begin
    DeviceIoControl(LwStatus, $2D4804, @LPMR32, sizeof(LPMR32), nil, 0, LTemp, nil);
    CloseHandle(LwStatus);
  end;
end;

Luckie 3. Sep 2004 20:09

Re: CDLaufwerks-Schublade sperren
 
Was bedeutet: $2D4804?

Dax 3. Sep 2004 20:10

Re: CDLaufwerks-Schublade sperren
 
Ist wahrscheinlich ein nicht definiertes Flag.

Luckie 3. Sep 2004 20:12

Re: CDLaufwerks-Schublade sperren
 
Ich geh stark davon aus, dass es eine Konstante ist und die hat bestimmt auch einen Namen. Und den wüßte ich gerne.

Dax 3. Sep 2004 20:16

Re: CDLaufwerks-Schublade sperren
 
Vielleicht sagt er's uns ja. :stupid:

static_cast 3. Sep 2004 20:16

Re: CDLaufwerks-Schublade sperren
 
Zitat:

Zitat von Luckie
Was bedeutet: $2D4804?

Das ist der wert zu: FSCTL_LOCK_VOLUME

Gruß
Daniel

Dax 3. Sep 2004 20:17

Re: CDLaufwerks-Schublade sperren
 
Was hat der eigentlich mit der CD-SChublade zu tun?

static_cast 3. Sep 2004 20:18

Re: CDLaufwerks-Schublade sperren
 
Die fährt dann nimma mehr raus!

Luckie 3. Sep 2004 20:19

Re: CDLaufwerks-Schublade sperren
 
Bei einer Festplatte wird der Zugriff gesperrt, bei einem CD-ROM Laufwerk das Öffnen der Schublade verhindert und bei einer Diskette bekommst du einen Stromschlag, wenn du sie rausziehst. :mrgreen:

Dax 3. Sep 2004 20:20

Re: CDLaufwerks-Schublade sperren
 
Schade, habe kein Diskettenlaufwerk mehr, ansonsten hätte ich das in der Schule mal eingesetzt. :-D

static_cast 3. Sep 2004 20:24

Re: CDLaufwerks-Schublade sperren
 
Seit wann leitet Plastik Strom? :gruebel: Oder Luckie hat soebend die Metalldiskette eingeführt :roll:

Dax 3. Sep 2004 20:26

Re: CDLaufwerks-Schublade sperren
 
Na ja, bei 10000 Volt leitet auch Plastik - es schmilzt, aber es leitet.

static_cast 3. Sep 2004 20:28

Re: CDLaufwerks-Schublade sperren
 
Was für PC's habt ihr denn in der Schule? :zwinker: Aber lass wir das wird ja sonst noch mehr OT!

Nothine 3. Sep 2004 21:38

Re: CDLaufwerks-Schublade sperren
 
wenn ich ma so fragen dürfte, warum ist deine funktion eigentlich ne funktion wenn du keinen wert zurückgibst? des ganze müsste (wenn ich mich nich irre :stupid:) so aussehen:
Delphi-Quellcode:
function LockMedia(ADriveLetter: Char; ALock: Boolean): Boolean;
var LWStatus: HWND;
    LTemp: Cardinal;
    LPMR32: Boolean;
const FSCTL_LOCK_VOLUME = $2D4804;
begin
  LwStatus := CreateFile(PChar('\\.\'+ADriveLetter+':'),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
  LPMR32 := ALock;
  if LwStatus <> INVALID_HANDLE_VALUE then begin
    Result := DeviceIoControl(LwStatus,FSCTL_LOCK_VOLUME,@LPMR32,SizeOf(LPMR32),nil,0,LTemp,nil);
    CloseHandle(LwStatus);
  end else Result := False;
end;

Ultimator 3. Sep 2004 22:10

Re: CDLaufwerks-Schublade sperren
 
Probiers doch mal mit der Bass.dll und der Bass_CD.dll von www.un4seen.com
und dann
BASS_CD_Door(drive,action);

drive:integer; 0=CD-Laufwerk 1, 1= CD-Laufwerk 2 usw...
action: eins der Folgenden: BASS_CD_DOOR_CLOSE; BASS_CD_DOOR_OPEN; BASS_CD_DOOR_LOCK; BASS_CD_DOOR_UNLOCK.

Ist eigentlich selbsterklärend; du musst halt die basscd.dll mit deinem Programm weitergeben...

SirThornberry 4. Sep 2004 08:44

Re: CDLaufwerks-Schublade sperren
 
ups, hab ich wohl vergessen beim umbauen in eine funktion ein result zu setzen.
@Ultimator: Wenn ich einfach nur das Laufwerk sperren will find ichs bissl overkill eine DLL mitliefern zu müssen.

$2D4804 ist eine Konstante die im VB Code wie folgt definiert war
Zitat:

Private Const IOCTL_STORAGE_MEDIA_REMOVAL As Long = &H2D4804
in der Hilfe hab ich diese Konstante (oder eine ähnlich benannte) gefunden. Allerdings wurde diese Konstante bei mir nicht gefunden. Deswegen hab ich einfach den Wert direkt verwendet. Hätte natürlich auch die Konstante declarieren können aber da ich diese nur in der einen Funktion benötige fand ichs hinnfällig

Luckie 4. Sep 2004 08:46

Re: CDLaufwerks-Schublade sperren
 
Nun ja. Ic finde das Benennen von Konstanten immer sinnvoll. Dann sieht man auf den ersten Blick, was da passiert.

SirThornberry 4. Sep 2004 08:51

Re: CDLaufwerks-Schublade sperren
 
Stimmt auch wieder... habs jetzt in meinem Source die vorschläge einfließen lassen. Sieht jetzt also so aus (wurde glaub ich sogar schon von jemandem so gepostet nur mit anderem Konstantennamen)
Delphi-Quellcode:
function LockMedia(ADriveLetter: Char; ALock: Boolean): Boolean;
var LWStatus: Hwnd;
    LTemp: Cardinal;
    LPMR32: Boolean;
Const IOCTL_STORAGE_MEDIA_REMOVAL = $2D4804;
begin
  LwStatus := CreateFile(PChar('\\.\' + ADriveLetter + ':'),GENERIC_READ Or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
  LPMR32 := ALock;
  If LwStatus <> INVALID_HANDLE_VALUE Then
  begin
    result := DeviceIoControl(LwStatus, IOCTL_STORAGE_MEDIA_REMOVAL, @LPMR32, sizeof(LPMR32), nil, 0, LTemp, nil);
    CloseHandle(LwStatus);
  end else result := False;
end;

Wishmaster 14. Sep 2004 01:07

Re: CDLaufwerks-Schublade sperren
 
Hi

CD-Rom Öffnen und Schließen!

funzt in WinXP

Code:
const
  IOCTL_STORAGE_EJECT_MEDIA = 2967560;
  IOCTL_STORAGE_LOAD_MEDIA = $2D480C;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 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 by Thomas Breitkreuz