Autor Beitrag
AndrewPoison
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17


Turbo Delphi 2006, Delphi 2009
BeitragVerfasst: Mo 19.05.08 10:51 
Hallo,
ich bin an der Entwicklung eines kleinen Tools, mit Hilfe dessen man die Zugriffszeit (speziell für SSDs) besser messen können soll.

Im Grunde ist dies ein total einfaches Unterfangen, dient am Ende auch eigentlich nur der eigenen Wissenserweiterung (falls interesse an dem Programm besteht, kann ich es natürlich auch zugänglich machen). Trotzdem bin ich dafür nun auf der Suche nach der optimalsten Funktion, mit Hilfe derer ich einen Zugriff auf eine beliebige Stelle der Festplatte/SSD durchführen kann?

Ich vermute mal das es sich um Windows-API-Funktionen handelt, deswegen hier der Thread.

Wäre für Vorschläge dankbar ;)
hazard999
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 162

Win XP SP2
VS 2010 Ultimate, CC.Net, Unity, Pex, Moles, DevExpress eXpress App
BeitragVerfasst: Mo 19.05.08 14:51 
Am besten wäre es die Platte als physical Device zu öffnen.

Normales FileOpen verfälscht mit Cachen und Latenzen das Messergebnis

_________________
MOV EAX, Result;MOV BYTE PTR [EAX], $B9;MOV ECX, M.Data;MOV DWORD PTR [EAX+$1], ECX;MOV BYTE PTR [EAX+$5], $5A;MOV BYTE PTR [EAX+$6], $51;MOV BYTE PTR [EAX+$7], $52;MOV BYTE PTR [EAX+$8], $B9;MOV ECX, M.Code;MOV DWORD PTR [EAX+$9], ECX
AndrewPoison Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17


Turbo Delphi 2006, Delphi 2009
BeitragVerfasst: Mo 19.05.08 15:06 
Mit PhysicalDevices hab ich bisher noch garnicht gearbeitet. Ich guck mal was die W32 SDK dazu ausspuckt. Aber wie ich den "Head" dann positionieren kann weiss ich immernoch nicht ;D

/edit:

so...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function GetReadings(Device: PChar; var Return: extended): boolean;
var
 hDevice: THandle;
 bResult: boolean;
 dJunk: dword;
begin
  hDevice := CreateFile(Device,
              0,FILE_SHARE_READ OR FILE_SHARE_WRITE,
              nil,OPEN_EXISTING,0,0);

  if hDevice = Invalid_Handle_Value then bResult := false
  else
  begin
    bResult := DeviceIoControl(hDevice,
              <IOCTL-BEFEHL HIER>, nil, 0,
              nil, 0, dJunk, nil);
    Return := dJunk;
  end;
  CloseHandle(hDevice);
  result := bResult;
end;


hab mir erstmal ne Funktion gebastelt mit der ich denke, dass ich erstmal zurechtkommen sollte.

Zum testen der (Lese-)Zugriffszeit sollte sich der Befehl IOCTL_DISK_READ eigenen, oder? Also damit könnt ich dann an bestimmte Stellen "springen" und die dafür benötigte Zeit messen? Der Referenzparameter "Return" dient mir nur um evtl. bissel was auszulesen was die Funktion zurückgegeben hat, in der finalen Version wird das nicht mehr gebraucht.