Forum: PC-Programmierung C# Kann man zu getLogivalDrive den PHYSICAL DRIVE erfahren


von Erik (Gast)


Lesenswert?

Hallo Leutle,

Ich habe ein dringendes Problem.
Leider kenne ich mich in C# noch nicht so gut aus.
Ich muss für ein Mikrocontrollerprojekt Sektorweise auf eine MMC-Karte 
schreiben.

Dies ist unter C# über "kernel32" auch leicht möglich, da man ja jedes 
Laufwerk mit "CreateFile" als "Physical Device" über 
"\\.\PhysicalDrive<n>" ansprechen kann.
Statisch geht das auch schon (n fest vorgegeben). Nur will ich nun den 
Kartenleser wählen können in dem die MMC-Karte steckt.
Hierzu lasse ich mir mit "Environment.GetLogicalDrives()" alle Laufwerke 
des Systems ausgeben.
Das liefert z.B. "C:\", "D:\", ...
Ein "GetDriveType(drive) == 2" filtert nun die REMOVABLE DEVICEs aus.
Für meinen Kartenleser dann z.B. "L:\"
Jetzt habe ich aber das Problem, dass "CreateFile("\\.\\L:",...." ja nur 
auf die Partition L innerhalb des physikalischen Mediums zugreift. 
Sektor 0 beginnt demnach nach der Partitionstabelle und ist nicht der 
"echte" Sektor Null.
Wie schaffe ich es in C# herauszufinden welchem physikalischen Medium 
("\\.\PhysicalDrive<n>") das logische Medium ("\\.\\L:") angehört?
Kann jemand vielleicht einen Beispielcode posten?
Ich habe es schon mit "DeviceIoControl" versucht, in C++:
1
 DeviceIoControl( hDeviceHandle,IOCTL_STORAGE_GET_DEVICE_NUMBER,NULL,0,&sdn,sizeof(sdn),&returned,NULL)
Ich bekomme aber die Implementierung davon in C# nicht hin!

Danke für eure Hilfe,
Erik

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.