Forum: PC-Programmierung [VB2010] Auf einzelne Sekoren eines USB Sticks zugreifen


von Seek1 (Gast)


Lesenswert?

Hallo Leute,

Der Fairness halber möchte ich erwähnen, das ich schon in einem VB Forum 
um Hilfe gepostet habe.
Mein Problem:
Ich möchte bei einem USB Stick auf die einzelnen Sektoren 
zugreifen.(Auch MBR!!!)
Sinn des ganzen ist, das von einem Embedded PC auf den Stick ohne 
Dateisystem geschrieben wird.
Arbeite jetzt immer mit einem Diskeditor, den ich fernsteuere.
Daher: 
(http://www.vbarchiv.net/forum/id10_i75225t75225_exe-datei-an-projekt-anhaengen.html)
Das möchte ich aber nun selbst übernehmen, weil ich schneller und 
flexibler erbeiten kann.

Seht ihr da Möglichkeiten, um auf LowLevel darauf lesend UND schreiben 
zuzugreifen?

Habe eine Möglichkeit für VB6 gefunden.Dies funktioniert.
Leider lässt sich der Code nicht nach .net portieren :-(

mfG
Seek1

von Bitwurschtler (Gast)


Lesenswert?

Seek1 schrieb:

Im finsteren Mittelalter der PC-Ära, musste man für HDD-Sektorenzugriffe 
direkt auf die ATA-Register (IO-Ports =x2??) zugreifen. Unter Windows 
geht das nicht mehr ohne einen Device-Treiber dafür zu schreiben.

Ich würde also mal bei den Device API's schauen ob es da was passendes 
gibt. Ich bezweifle dass man mit VisualBasic so tief auf die Hardware 
zugreifen kann. Zumal hier noch USB als weiter SW-Schicht dazwischen 
liegt.

von Sebastian Hepp (Gast)


Lesenswert?

Windows selber abstrahiert die Sektoren zu einem Filesystem, was du ja 
nicht willst. Deswegen brauchst du einen Treiber. Ob du einen fertigen 
benutzen kannst oder selber einen schreiben musst weiß ich leider nicht.

von Thomas K. (muetze1)


Lesenswert?

Mit CreateFile() direkt die Harddisk öffnen und dann mit ReadFile() die 
Sektoren einlesen. Siehe MSDN
1
Another example of using the Win32 device namespace is using the CreateFile function with "\\.\PhysicalDiskX" (where X is a valid integer value) or "\\.\CdRomX". This allows you to access those devices directly, bypassing the file system. This works because these device names are created by the system as these devices are enumerated, and some drivers will also create other aliases in the system. For example, the device driver that implements the name "C:\" has its own namespace that also happens to be the file system.

[1] 
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
[2] 
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx
[3] 
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365467%28v=vs.85%29.aspx

: Bearbeitet durch User
von Seek1 (Gast)


Lesenswert?


von Seek1 (Gast)


Lesenswert?

Zu spät.

Danke an Thomas K. :-D

Ich glaube da werde ich einhaken :-)

von Jim M. (turboj)


Lesenswert?

Sebastian Hepp schrieb:
> Windows selber abstrahiert die Sektoren zu einem Filesystem, was du ja
> nicht willst.

Soweit richtig.

Sebastian Hepp schrieb:
> Deswegen brauchst du einen Treiber.

Falsch. Er kann - mit Admin Privilegien - einfach das Physical Device 
aufmachen und dann Sektoren lesen und schreiben.

Allerdings würde ich auch im embedded Device immer ein FAT Dateisystem 
benutzen. Das ist fast immer einfacher als selber was zu frickeln, denn 
es gibt reichlich open source Code.

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.