|
|
windows NT/2000读写物理,逻辑磁盘扇区 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
procedure TForm1.Button1Click(Sender: TObject); var hDriveHandle: THandle; procedure TForm1.Button1Click(Sender: TObject); const BytesPerSector = 512; SectorCount = 1; //读写扇区数 SectorStart = 0; //起始扇区数 drive = '\\.\C:'; //驱动盘 var str: String; p: PChar; i: Cardinal; begin hDriveHandle := CreateFile(drive, GENERIC_ALL, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if (hDriveHandle <> INVALID_HANDLE_VALUE) then begin p := allocmem(SectorCount * ByteSPerSector);//p 必须是新申请的内存或全局变量,不能是局部变量 //定义为局部变量是不能读写磁盘的 FileSeek(hDriveHandle, SectorStart * BytesPerSector, 0); //起始扇区 if FileRead(hDriveHandle, p[0], SectorCount * BytesperSector)<> //读扇区 SectorCount * BytesperSector then raise Exception.Create('Read Error!'); str :=''; for i := 0 to 512 - 1 do begin str := str + Format('%.2x', [integer(p[i])]); if i mod 16 = 15 then str := str + #13; end; ShowMessage(str); FileSeek(hDriveHandle, SectorStart * BytesPerSector, 0); //起始扇区 if FileWrite(hDriveHandle, p[0], SectorCount * BytesperSector)<> //写扇区 SectorCount * BytesperSector then raise Exception.Create('Write Error!'); FreeMem(p, SectorCount * BytesperSector); Closehandle(hDriveHandle); end; end; procedure TForm1.Button2Click(Sender: TObject); const BytesPerSector = 512; SectorCount = 1; //读写扇区数 SectorStart = 0; //起始扇区数 drive = '\\.\PHYSICALDRIVE0'; //物理磁盘 var str: String; p: PChar; i: Cardinal; begin hDriveHandle := CreateFile(drive, GENERIC_ALL, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if (hDriveHandle <> INVALID_HANDLE_VALUE) then begin p := allocmem(SectorCount * ByteSPerSector);//p 必须是新申请的内存或全局变量,不能是局部变量 //定义为局部变量是不能读写磁盘的 FileSeek(hDriveHandle, SectorStart * BytesPerSector, 0); //起始扇区 if FileRead(hDriveHandle, p[0], SectorCount * BytesperSector)<> //读扇区 SectorCount * BytesperSector then raise Exception.Create('Read Error!'); str :=''; for i := 0 to 512 - 1 do begin str := str + Format('%.2x', [integer(p[i])]); if i mod 16 = 15 then str := str + #13; end; ShowMessage(str); FileSeek(hDriveHandle, SectorStart * BytesPerSector, 0); //起始扇区 if FileWrite(hDriveHandle, p[0], SectorCount * BytesperSector)<> //写扇区 SectorCount * BytesperSector then raise Exception.Create('Write Error!'); FreeMem(p, SectorCount * BytesperSector); Closehandle(hDriveHandle); end; end;

|
|
相关文章:相关软件: |
|