Lesen einer SD Karten ID

18/07/2008 - 02:46 von chrkon | Report spam
Hallo allerseits,

kann mir jemand einen Tipp zur Lösung des folgenden Problems geben?
Eventuell stehe ich ja einfach nur auf dem Schlauch?
Ich programmiere zur Zeit mit C# vorrangig für PocketPCs und noch mit
VS2003, da auch noch àltere PPC2002 Geràte unterstützt werden müssen. Für
die gesuchte Lösung kann aber auch VS2008 verwendet werden, da die Software
standalone auf einem PC laufen soll.

Doch nun zu meinem Problem:

Ich habe eine Software für PocketPCs geschrieben, die über die SD Karten ID
lizensiert wird. Dazu wird auf dem Handheld natürlich die ID gelesen. Ich
verwende dafür über P/Invoke die API Function DeviceIoControl mit dem
Parameter IOCTL_STORAGE_GET_DEVICEID.

Die ID, die ich dadurch bekomme ist spezifisch für die SD Karte und muss nun
in eine Lizenzdatei "eingewebt" werden. Dies geschieht auf einem speziellen
Lizensierungs PC. So weit so schön.

Das Problem ist nun, das ich die ID immer per Datei vom PocketPC auf den
Lizensierungsrechner kopieren muss. Ich habe keinen Weg gefunden, diese ID
direkt an einem PC (über einen CardReader) von der SD Karte zu lesen.

Gefunden habe ich die Möglichkeit mittels "GetVolumeInformation" an eine
spezifische ID zu kommen, allerdings passt diese ID nicht zu der
IOCTL_STORAGE_GET_DEVICEID. Zudem àndert sich die Volume ID bei jeder
Formatierung. Sie kommt also nicht in Frage. :-(

So wie es aussieht gibt es die "DeviceIoControl" Funktion leider nur auf den
WindowsMobile Systemen.

Ich war schon soweit und habe über Active Sync und die Remote API ein
kleines natives C Programm auf den PocketPC geschoben, es dort ferngesteuert
gestartet und damit eine Datei erzeugen lassen, in der die ID gespeichert
wurde. Diese Datei wurde dann, ebenfalls automatisch, über die RAPI zurück
auf den PC geholt und in den Lizensierungsprozess eingefügt. Leider ist
dieser Weg aber problematisch, da ActiveSync nicht die stabilste Lösung ist.

Hat von Euch jemand eine Idee, wie ich diese ID direkt am PC von der SD
Karte lesen kann?

Viele Grüße aus Dortmund,
Christof Konstantinopoulos
 

Lesen sie die antworten

#1 Kerem Gümrükcü
18/07/2008 - 06:05 | Warnen spam
Hallo Christof,

Gefunden habe ich die Möglichkeit mittels "GetVolumeInformation" an eine
spezifische ID zu kommen, allerdings passt diese ID nicht zu der
IOCTL_STORAGE_GET_DEVICEID. Zudem àndert sich die Volume ID bei jeder
Formatierung. Sie kommt also nicht in Frage. :-(



dieses Verfahren ist absolut unbrauchbar, wende dich schnell davon ab,...


So wie es aussieht gibt es die "DeviceIoControl" Funktion leider nur auf
den WindowsMobile Systemen.



Nein, die ist auf allen Windows Varianten (die 9x/ME sind da etwas anders,
da musst
Du Assembler nehmen, wenn ich das richtig in Erinnerung habe) verfügbar:

[DeviceIoControl(kernel32)]
http://www.pinvoke.net/default.aspx...ntrol.html

Hat von Euch jemand eine Idee, wie ich diese ID direkt am PC von der SD
Karte lesen kann?



Probier mal "IOCTL_CHANGER_GET_PRODUCT_DATA" mit dem DeviceIoControl,
da es einen Speicherblock mit diesen Daten zurückgibt:

typedef struct _CHANGER_PRODUCT_DATA {
BYTE VendorId[VENDOR_ID_LENGTH];
BYTE ProductId[PRODUCT_ID_LENGTH];
BYTE Revision[REVISION_LENGTH];
BYTE SerialNumber[SERIAL_NUMBER_LENGTH];
BYTE DeviceType;
} CHANGER_PRODUCT_DATA,
*PCHANGER_PRODUCT_DATA;

Bin mir aber nicht sicher, ob das mit USB/SD Karten geht,...

Ansonsten geht das mit WMI recht elegant, genauergesagt mit der
"CIM_PhysicalMedia" Klasse:

[CIM_PhysicalMedia Class]
http://msdn.microsoft.com/en-us/library/aa387967(VS.85).aspx

Vielleich hilft Dir das weiter,...

Grüße

Kerem


Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.codeplex.com/restarts
Latest Open-Source Projects: http://entwicklung.junetz.de
"This reply is provided as is, without warranty express or implied."

Ähnliche fragen