Hallo,
ich habe bereits sowohl im Forum als auch im Web nach einer Lösung gesucht, aber nichts gefunden. Ausgehend von der
unit JwaWinIoctl habe ich folgenden Code erarbeitet:
Delphi-Quellcode:
Const
IOCTL_CHANGER_GET_PRODUCT_DATA = $00304008;
{$EXTERNALSYM IOCTL_CHANGER_GET_PRODUCT_DATA}
Type
PCHANGER_PRODUCT_DATA = ^CHANGER_PRODUCT_DATA;
{$EXTERNALSYM PCHANGER_PRODUCT_DATA}
_CHANGER_PRODUCT_DATA = Record
VendorId : Array [0..7] Of BYTE;
ProductId : Array [0..15] Of BYTE;
Revision : Array [0..3] Of BYTE;
SerialNumber: Array [0..31] Of BYTE;
DeviceType : BYTE;
End;
{$EXTERNALSYM _CHANGER_PRODUCT_DATA}
CHANGER_PRODUCT_DATA = _CHANGER_PRODUCT_DATA;
{$EXTERNALSYM CHANGER_PRODUCT_DATA}
TChangerProductData = CHANGER_PRODUCT_DATA;
PChangerProductData = PCHANGER_PRODUCT_DATA;
Function GetDiskData(RootPath: String): String;
Var
hDevice : THandle;
ProductData : TChangerProductData;
BytesReturned : DWord;
Begin
hDevice:=CreateFile(PChar('\\.\' + RootPath),
GENERIC_READ or GENERIC_WRITE, 0, nil,
OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0);
If (hDevice <> INVALID_HANDLE_VALUE) Then
Begin
If DeviceIoControl(hDevice, IOCTL_CHANGER_GET_PRODUCT_DATA, nil, 0,
@ProductData, SizeOf(ProductData), BytesReturned, nil) then
Begin
Result:=RootPath + ' - OK!';
End
Else Result:=RootPath + ' - ' + SysErrorMessage(GetLastError);
CloseHandle(hDevice);
End
Else Result:=RootPath + ' - Device not opened...';
End;
procedure TForm1.FormCreate(Sender: TObject);
Var
I : Integer;
begin
For I:=1 To 26 Do
ListBox1.Items.Add(GetDiskData(Chr(I + 64) + ':'));
end;
Leider komme ich immer in den Zwei, wo er mit
SysErrorMessage(GetLastError)
anzeigt. Allerdings kann ich mit der Meldung "Ungültige Funktion" nicht soviel anfangen.
Wo liegt mein Fehler?
Ich hatte
hier mal ein entsprechende Code-Fragment gefunden und auch gesehen, dass es
himitsu irgendwie hinbekommen haben muss, denn die späteren Versionen seines Programmes arbeiten auf meinen Rechnern.
Gruß & Dank, Alex