2009-04-04 3 views
0

Dies sind ein paar Fragen in einem Beitrag kompiliert.Arbeiten mit USB in C (Windows)

1) Was ist der beste Weg, wenn ein USB-Massenspeichergerät eingesteckt ist zu sagen wäre.

2) Was ist der beste Weg, um Daten auf ein USB-Laufwerk

3) schreiben Können Sie Behandle den Speicher auf einem USB-Stick wie im normalen Speicher. (Könnte ich wie malloc verwenden oder schreibe direkt zwei mit Werten/und oder null es aus?)

Antwort

5

Ein USB-Laufwerk erscheint als Laufwerksbuchstabe . Mit der GetDriveType API können Sie feststellen, dass es sich um ein USB-Gerät handelt. Dies sagt jedoch nur, dass es entfernbar ist, nicht, dass es tatsächlich ein USB-Laufwerk ist. Um dies festzustellen, müssen Sie möglicherweise die Funktion SetupDiGetDeviceRegistryProperty (Referenz von der GetDriveType MSDN-Referenz) betrachten. Es ist auch möglich, Festplatten zu installieren, die keine Laufwerksbuchstaben sind, oder Laufwerksbuchstaben, die keine Laufwerkshalterungen darstellen. Um also alle USB-Laufwerke zu finden, sollten Sie sich einige der anderen SetupDi ... -Funktionen ansehen.

Da es sich um einen Laufwerksbuchstaben handelt, besteht die übliche Methode zum Lesen und Schreiben auf einem USB-Laufwerk darin, Dateisystemfunktionen wie oder Windows CreateFile zu verwenden. Wenn Sie direkt wie im Speicher schreiben möchten, können Sie eine Datei erstellen, die sich über das gesamte Gerät erstreckt, und dann die Datei im Speicher abbilden. Allerdings würde ich das nicht empfehlen, außer in spezialisierten Anwendungen, denn wenn es einen E/A-Fehler gibt (einschließlich z. B. das Entfernen des Laufwerks durch den Benutzer), dann erhält Ihr Programm eine SEH-Ausnahme, und das bringt viele Komplikationen mit sich am besten vermieden.

0

Sie möchten vielleicht einen Blick auf HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR werfen. Hier erfahren Sie, welche USB-Speichergeräte bekannt sind. Die Einträge enthalten alle ein ParentIdPrefix. Wenn das Laufwerk gegenwärtig vorhanden ist, kann dies im Datenteil eines HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices-Werts gefunden werden.