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 winhexapi unformatierter USB Datenträger (https://www.delphipraxis.net/171187-winhexapi-unformatierter-usb-datentraeger.html)

PhilmacFLy 25. Okt 2012 08:25

winhexapi unformatierter USB Datenträger
 
Moin

Ich hab folgendes Problem:
Ich soll sobald ein USB Datenträger angesteckt wird und er eine spezielle Bezeichnung trägt,
diesen mit der Winhex API auslesen, weil dort Daten direkt ohne Filesystem gespeichert sind.
Nun ist mein Problem das die Winhex api in open folgendes erwartet:
Zitat:

Examples for lpResName:

C:\My File.txt file
D: logical drive
E: logical drive
00h floppy disk
80h hard disk 0*
81h hard disk 1*
82h removable medium 2*
83h hard disk 3*
... ...
9Eh 1st optical disc
9Fh 2nd optical disc
*80h = BIOS disk 80h under Windows 9x/Me, physical disk no. 0 under Windows NT/2000/XP, 81h = BIOS disk 81h under Windows 9x/Me, physical disk no. 1 under Windows NT/2000/XP, etc. Physical removable media are accessed and enumerated just like physical hard disks.
Wie finde ich nun die "Nummer" des Datenträgers am einfachsten herraus?

Bummi 25. Okt 2012 08:30

AW: winhexapi unformatierter USB Datenträger
 
mal schnell geraten über WMI >> LogicalDisk
gegf. auch per WMDeviceChange

PhilmacFLy 25. Okt 2012 09:22

AW: winhexapi unformatierter USB Datenträger
 
Ok und wie genau?
Hab mal grad gegoogelt und nix was mir hilft gefunden.

himitsu 25. Okt 2012 09:46

AW: winhexapi unformatierter USB Datenträger
 
Wie kommst du denn an die Bezeichnung des Datenträgers?

WinHexAPI?
Nja, man könnte einfach via CreateFile/TFileStream nacheinander auf auf alle \\.\PHYSICALDRIVE%d zugegreifen, jeweils über dieses Handle auch den Kardwarenamen auslesen und hätte auch sofort das Handle für den Zugriff. :angle2:

PhilmacFLy 25. Okt 2012 10:13

AW: winhexapi unformatierter USB Datenträger
 
Ja winhexapi ist halt Vorgabe deswegen kann ich nicht aus.

Ich hab mir bis jetzt auch noch keine Gedanken gemacht wie ich an die Bezeichnung des Datenträgers komm...

Bummi 25. Okt 2012 10:21

AW: winhexapi unformatierter USB Datenträger
 
Liste der Anhänge anzeigen (Anzahl: 1)
das wäre ein Auszug einer Ausgabe bei:

Delphi-Quellcode:
 GetWMIstring('.', 'root\CIMV2', 'SELECT * FROM CIM_MediaAccessDevice',sl);
Code:
instance of Win32_DiskDrive
{
   BytesPerSector = 512;
   Capabilities = {3, 4, 7};
   CapabilityDescriptions = {"Random Access", "Supports Writing", "Supports Removable Media"};
   Caption = "Kingston DataTraveler G3 USB Device";
   ConfigManagerErrorCode = 0;
   ConfigManagerUserConfig = FALSE;
   CreationClassName = "Win32_DiskDrive";
   Description = "Laufwerk";
   DeviceID = "\\\\.\\PHYSICALDRIVE1";
   FirmwareRevision = "PMAP";
   Index = 1;
   InterfaceType = "USB";
   Manufacturer = "(Standardlaufwerke)";
   MediaLoaded = TRUE;
   MediaType = "Removable Media";
   Model = "Kingston DataTraveler G3 USB Device";
   Name = "\\\\.\\PHYSICALDRIVE1";
   Partitions = 1;
   PNPDeviceID = "USBSTOR\\DISK&VEN_KINGSTON&PROD_DATATRAVELER_G3&REV_PMAP\\001372982BA9BA91150F0158&0";
   SectorsPerTrack = 63;
   SerialNumber = "";
   Signature = 3272027672;
   Size = "8003197440";
   Status = "OK";
   SystemCreationClassName = "Win32_ComputerSystem";
   SystemName = "BUMMOB6";
   TotalCylinders = "973";
   TotalHeads = 255;
   TotalSectors = "15631245";
   TotalTracks = "248115";
   TracksPerCylinder = 255;
};

Delphi-Quellcode:
 GetWMIstring('.', 'root\CIMV2', 'SELECT * FROM CIM_LogicalDisk',sl);
ergäbe u.a. ....

Code:
instance of Win32_LogicalDisk
{
   Access = 0;
   Caption = "G:";
   Compressed = FALSE;
   CreationClassName = "Win32_LogicalDisk";
   Description = "Wechseldatenträger";
   DeviceID = "G:";
   DriveType = 2;
   FileSystem = "FAT32";
   FreeSpace = "6257410048";
   MaximumComponentLength = 255;
   Name = "G:";
   Size = "8004993024";
   SupportsDiskQuotas = FALSE;
   SupportsFileBasedCompression = FALSE;
   SystemCreationClassName = "Win32_ComputerSystem";
   SystemName = "BUMMOB6";
   VolumeDirty = TRUE;
   VolumeName = "KINGSTON";
   VolumeSerialNumber = "F51D9F89";
};




Den Code für GetWMIstring kann ich auf Wunsch Uploaden

PhilmacFLy 25. Okt 2012 10:43

AW: winhexapi unformatierter USB Datenträger
 
Da wär ich sehr dankbar wenn du das machen könntest

Edit: Hab mir das mal angeschaut, das ist ganschön viel Holz, da muss es doch was "einfacheres" geben

Edit2: himi ich hab mir jetzt den Code von dir in diesem Trhead angeschaut: http://www.delphipraxis.net/24737-post.html und der würde mir ja schon sehr weiterhelfen weil ich ja dann schon weiss wo welche Devices sind, jetzt müsst ich nur noch den Namen auslesen. Kannst du mir dafür ein Snippet geben wie ich das mache?


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