Laden...

Stream ohne Datei

Erstellt von donmarten vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.017 Views
donmarten Themenstarter:in
115 Beiträge seit 2004
vor 19 Jahren
Stream ohne Datei

Hi,
ich hab da so eine kleine Frage, und zwar, kann ich ein Stream benutzen, ohne eine Datei zu haben, also wenn ich zb eine komplette Diskette mit einsen oder nullen vollschreiben will. Hoffe ich hab mich nich zu kompliziert ausgedrückt 🙂

Grüssle

P
939 Beiträge seit 2003
vor 19 Jahren

Kurz und knapp - nein.

Mit .Net Bordmitteln geht es nicht, da kann man nur auf Dateiebene lesen und schreiben. Mit Windows-Programmierung könnte es u.U. gehen. Aber selbst da dürfte es sehr schwierig sein, da man am Dateisystem vorbei direkt auf Sektoren zugreifen müsste. Sowas ist Anwendungsprogrammen nicht gestattet, du müsstest wahrscheinlich einen Windows Treiber mit Kernel Mode Rechten schreiben.

Einstieg: How to Write a Windows Driver

Gruss
Pulpapex

Y
220 Beiträge seit 2004
vor 19 Jahren

HI!

@donmarten:

Erklär doch naoch mal genau, was deine Anforderungen sind, dann kann dir vielleicht auch "leichter" 😉 geholfen werden...

So denn,

Yahoo

donmarten Themenstarter:in
115 Beiträge seit 2004
vor 19 Jahren

@yahoo
im prinzip will ich ein programm schreiben, das so funktioniert wie ein low-level-formatierer, aber der halt unter windows läuft, und nicht unter dos
die festplatte soll dann von vorne bis hinten mit nullern vollgeschrieben werden

M
456 Beiträge seit 2004
vor 19 Jahren

Einen Treiber muss man nicht gleich schreiben, aber mit der Windows-API geht das.
Mit dem CreateFile Syscall kann man auch Datenträger im RAW-Mode öffnen.
Als symbolischen Dateinamen muss man "\.\PhysicalDriveX" nehmen.

http://support.microsoft.com/?scid=kb;en-us;150101
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B100027

Sei aber vorsichtig damit. Schreibst du irgend was falsches in die Sektoren, dann kannst du dein Dateisystem ins Nirvana schicken.

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.

Y
220 Beiträge seit 2004
vor 19 Jahren

Hi!

...Und schon wurde dir geholfen 😉
Das wollte ich damit bezwecken.

Yahoo

donmarten Themenstarter:in
115 Beiträge seit 2004
vor 19 Jahren

Juhu, danke, das hab ich gesucht, der raw-modus 🙂
Mal schaun obs klappt

donmarten Themenstarter:in
115 Beiträge seit 2004
vor 19 Jahren

Irgendwie bin ich überfordert 🙁
Wie kann ich jetzt von C# (SharpDevelop) auf die CreateFile Funktion zugreifen? 🤔

M
456 Beiträge seit 2004
vor 19 Jahren

DlllImport, Kernel32.dll, oder?

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo donmarten,

die Forumssuche hilft. Der nötige DllImport-Code steht hier:

USB ansteuern

HTH

herbivore

donmarten Themenstarter:in
115 Beiträge seit 2004
vor 19 Jahren

Ich schon wieder 😁
Dll ist Importiert, createfile funktioniert (denk ich mal, kommt nämlich keine messagebox), aber wie gehts nun weiter?
Ich wollte mit WriteFile was schreiben, macht er aber nicht, macht gar nix X(

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo donmarten,

das kann viele Gründe haben. Hast du die Rückgabewerte geprüft? Falls die Rückgabewerte auf einen Fehler hindeuten, wäre es auch hilfreich zu wissen, was GetLastError (auch per DllImport zu bekommen) zurückliefert. Ansonsten poste mal bitte Deinen Code.

herbivore

P
939 Beiträge seit 2003
vor 19 Jahren

Die GetLastError-Funktion wird schon durch die Marshal-Klasse bereitgestellt.

int lastError = Marshal.GetLastWin32Error();

In der API-Doku steht, dass Marshal.GetLastWin23Error verwenden soll, statt eine eigene DllImport-Methode für die Funktion zu schreiben. Weiter zu beachten ist, dass LastError nur bei Plattform-Aufrufen verfügbar ist, wenn im DllImport-Attribut zu einer Methode SetLastError=true angegeben ist.

[DllImport("user32.dll", SetLastError=true)]
public static extern int MessageBoxA(/*..*/);

MSDN: Marshal.GetLastWin32Error Method