Entwickler-Ecke

Windows API - direkt zugriff auf datenträger


mister_x - Do 25.09.08 17:33
Titel: direkt zugriff auf datenträger
sers leute

ich möchte gerne wie bei http://www.delphiforum.de/viewtopic.php?t=36173&highlight=hxd
direkt auf ein Laufwerk zugreifen(read/write) also auch wenn kein dateiensystem vorhanden ist
kann mir jemand sagen wie das geht oder mir nützliche links schicken.....

würd mich auf eure antworten freun

gruß
MISTER_X


Delete - Do 25.09.08 17:38

früher ging das, indem du direct das bios via assembler programmiert hast. aber da musst erst mal rausfinden welche hardware du genau hast...

persönlicher tipp, lass die finger davon. ist viel arbeit und du zerschiesst dir die platte allzugern ...


mister_x - Do 25.09.08 18:04

also ich will des mit ner SD-Card machn weil ich die als datenspeicher für ein selbstgebautes system nutzen will
un da will ich nen eigenes dateiensystem drauf machen.....

der editor zu dem ich oben den link gesetzt hab scheint gut auf ein laufwerk zugreifen zukönnen, ich müsst halt wissen wie man so was macht^^


BenBE - Do 25.09.08 18:07

Die Nutzung der Suchfunktion hätte Dir hier sicherlich geholfen, da dieses Thema (inklusive Units) schon mehrfach diskutiert wurde ...


mister_x - Do 25.09.08 18:19

wo? ich hab schon gesucht
wahrscheinlich ma wieder die falschen schlagwörter^^
könntest du mir einen tipp geben??^^


Delete - Do 25.09.08 22:33

Öffne das Laufwerk physisch mit Suche im MSDN CEATEFILE. Dann hast du einen direkten Schreizugriff. Das setzt allerdings Administratorenrechte vorraus. Die saubereste Lösung waäre aber ein eigener Dateisystemtreiber.


mister_x - Fr 26.09.08 17:03

so hab was gefunden
ging mit createfile
war auch nich so schwierig^^


Delete - Fr 26.09.08 22:28

user profile iconmister_x hat folgendes geschrieben:
so hab was gefunden

Wieso gefunden? Ich habe dir doch die richtige Funktion genannt. :?


Delete - Fr 26.09.08 23:04
Titel: Re: direkt zugriff auf datenträger
user profile iconmister_x hat folgendes geschrieben:
ich möchte gerne .. direkt auf ein Laufwerk zugreifen(read/write) also auch wenn kein dateiensystem vorhanden ist


user profile iconmister_x hat folgendes geschrieben:
so hab was gefunden
ging mit createfile


und was hat das damit zu tun ... :nixweiss: :nixweiss:


mister_x - Fr 26.09.08 23:44

^^ meine antwort war vlt en bisschen kurz
mit diesem code kann man auf die einzelnen sectoren zugreife(read/write)



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
.....
  hDeviceHandle :=  CreateFile(Drive,GENERIC_ALL,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);
  Drive         :=  pChar('\\.\J:');
  BytesPerSector:=512;
....

function ReadSector(Sector:Integer):pChar;

begin

  if hdevicehandle<>INVALID_HANDLE_VALUE then

    begin

      result  :=  allocmem(BytesPerSector);

      FileSeek(hdevicehandle,Sector*BytesPerSector,0);

      if FileRead(hdevicehandle,result[0],BytesPerSector)<>BytesPerSector then

        raise exception.Create('Read');

    end;

end;

procedure TMainForm.WriteSector(Buffer: PAnsiChar; Sector: Integer);

begin

  if hdevicehandle<>INVALID_HANDLE_VALUE then

    begin

      FileSeek(hdevicehandle,Sector*BytesPerSector,0);

      if FileWrite(hdevicehandle,Buffer[0],BytesPerSector)<>BytesPerSector then

        raise exception.Create('Write');

    end;

end;


funktioniert bei mir ohne probleme
noch ma danke für die antworten

Gruß
MISTER_X

ps ich hoffe Grenzgaenger sieht jz was das damit zu tun hat^^