Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi USB Device ID auslesen (https://www.delphipraxis.net/33415-usb-device-id-auslesen.html)

CReber 6. Nov 2004 16:08


USB Device ID auslesen
 
Ich suche eine sichere Methode die Device ID (nicht Windows ID) eines USB-Sticks auszulesen. Was mir dabei ins Auge gefallen ist

MSDN-Library durchsuchenMEDIA_SERIAL_NUMBER_DATA
MSDN-Library durchsuchenIOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER

und als alternative

http://www.entwickler-forum.de/webx?...eCn.0@.ee8d6c4


Kann mir jemand sagen welche Lib ich verwenden muss, um die beiden APIs verwenden zu können?

CReber 6. Nov 2004 17:42

Re: USB Device ID auslesen
 
Update:

Ich habe jetzt mal bissl rumprobiert und komme mal wieder nicht weiter. Die Lib habe ich aus Luckie's SysInfo. Mein Problem ist das die if Abfrage immer false liefert. Irgendwas ist falsch ich weiß nur nicht was.

Delphi-Quellcode:
uses JwaWinIoctl;


procedure GetSerial:String;
  var Dummy                           :DWord;
      FHandle                         :Cardinal;
      RealPath                        :String;
      dg                              :CHANGER_PRODUCT_DATA; //falscher Datentyp? Laut SDK müsste es eigentlich
                                                              // MEDIA_SERIAL_NUMBER_DATA sein aber den gibs nicht
      Serial                          :String;
      i                               :byte;
begin
        RealPath:='\\.\F:';
        FHandle:=CreateFile(PChar(RealPath),GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if DeviceIOControl(FHandle,IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, nil, 0, @dg, sizeof(dg), dummy, nil) then begin
            Serial:='';
            for i:=0 to 31 do Serial:=Serial+IntToStr(dg.SerialNumber[i]);
            Result:=Serial;
          end;
      end;
    end;
    Inc(pDrive, 4);
  end;
end;

Robert Marquardt 7. Nov 2004 05:32

Re: USB Device ID auslesen
 
Das ist eine ziemlich verwinkelte Gegend des APIs.
MEDIA_CHANGER ist ein CD-Wechsler, also unbrauchbar hier.
Das '\\.\F:' sich nicht oeffnen laesst liegt wahrscheinlich daran das du keine Admin-Privilegien hast.

Fuer IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER muss man mit der richtigen GUID die Geraete (Volumes) mit den SetupDi-Funktionen aufzaehlen.
Ich schau mal nach ob das mit meinem Win 2000 geht. Ich bin so ziemlich der Einzige der sich damit auskennt.

Ich habe ein bischen rumprobiert, aber unter Win 2000 scheint es nicht zu funktionieren.

CReber 7. Nov 2004 08:57

Re: USB Device ID auslesen
 
Kennst du evtl. eine andere Methode DeviceID und DeviceName auszulesen? Ich verzweifle hier langsam :(

Robert Marquardt 7. Nov 2004 11:37

Re: USB Device ID auslesen
 
Was willst du genau erreichen?
Schreib mich mal direkt an. Ich habe Setup API und Config Manager API fuer Delphi fast fertig.
Ich muss nur noch die Beispiele aufarbeiten und dann ist es zur Verbreitung fertig.
Viele der DeviceIoControl Konstanten sind aber nur im DDK aufgefuehrt.

robert_marquardt att gmx dott de

CReber 7. Nov 2004 12:16

Re: USB Device ID auslesen
 
Habe dir geschrieben ! Danke


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