|
|
|
windows NT/2000读写物理,逻辑磁盘扇区 |
热 ★★★★ |
|
windows NT/2000读写物理,逻辑磁盘扇区 |
|
作者:闵涛 文章来源:闵涛的学习笔记 点击数:740 更新时间:2009/4/23 18:27:25 |
|
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;
[系统软件]windows下Apache+php+mysql的安装与配置图解 [操作系统]在Windows中玩转Linux操作系统 [操作系统]死马还当活马医:6种方法挽救Windows系统 [聊天工具]四大更新 Windows Live Msn 8.1评测 [聊天工具]Windows Live Messenger最新0683版亮相_联络工具_… [聊天工具]Windows Live Mail招人爱的N个理由_联络工具_Wind… [聊天工具]Windows Live Mail Desktop多图欣赏_联络工具_Win… [聊天工具]OE老了 微软开发新邮件客户端取而代之_联络工具 [聊天工具]Windows Live Messenger中文版试用报告(一)__天极… [聊天工具]Windows Live Messenger 8 Beta1高清图赏__天极Ye…
|
|
教程录入:mintao 责任编辑:mintao |
|
|
上一篇教程: 防止全局hook入侵Delphi版,2000以上系统适用(part3) 下一篇教程: Delphi和Office程序开发 |
|
|
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网] |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
|
|
|
|
|
|
|
同类栏目 |
|
|
赞助链接 |
|
|
500 - 内部服务器错误。
|
|
|
|
|
|