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
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
HI!
@donmarten:
Erklär doch naoch mal genau, was deine Anforderungen sind, dann kann dir vielleicht auch "leichter" 😉 geholfen werden...
So denn,
Yahoo
@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
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.
Hi!
...Und schon wurde dir geholfen 😉
Das wollte ich damit bezwecken.
Yahoo
Irgendwie bin ich überfordert 🙁
Wie kann ich jetzt von C# (SharpDevelop) auf die CreateFile Funktion zugreifen? 🤔
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.
Hallo donmarten,
die Forumssuche hilft. Der nötige DllImport-Code steht hier:
HTH
herbivore
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(
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
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(/*..*/);