请问Delphi读写硬盘、移动硬盘分区表的方法?
解决方案 »
- idHttp.get(URL, MyStream)遇到302转向,能不能避免转向
- 开发这个系统多少钱
- 在北京能正常开发的delphi程序员能挣多少钱?
- fastreport的预览打印
- 怎样才能得到DNS服务器的地址!
- listview中出现EStringListError with message 'List index out of bounds(-1)'错
- delphi 如何进行语音对讲
- 我用三层midas,出现out of memory 错误
- 有谁知道,IE、Webbrowser浏览过程中网页保存在什么目录中?
- 哪里有多级分布式(Multi-Tier)数据库的例子?
- 求SQL92标准规范
- 三层事务问题
很危险!-------------------------------------
读、写Win2K的分区表
给你个读的例子,写的没敢试验,因为我只有一个HD.[:D]procedure TForm1.Button1Click(Sender: TObject);
var hFile:THandle ;
bytesread:DWORD;
buf: array[0..511] of char ;
Security: TSecurityAttributes;begin hFile:=CreateFile('\\.\PhysicalDrive0',GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil ,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
if hFile=INVALID_HANDLE_VALUE then
begin
ShowMessage('No file exists yet.' );
Exit;
end;
if not ReadFile(hFile, buf, sizeof(buf), bytesread, nil) then showmessage('Error');end;
-----------------------------------------
四、WIN2000中的磁盘扇区读写
在WINNT和WIN2000中磁盘被看做一种标准设备,可以使用CreateFile象打开文件一样打开并存取。CreateFile支持两种方式的磁盘设备--逻辑磁盘(格式为"\\.\C:")和物理磁盘(格式为"\\.\PHYSICALDRIVEx",其中x为数字),例如打开A:盘进行读取操作,只要这样:
HANDLE hDev=CreateFile("\\\\.\\A:",GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
如果得到的句柄有效,就可以使用ReadFile来读取了,
ReadFile(hDev,Buffer,512,&dwRet,0);
读取结束要关闭该句柄,
CloseHandle(hDev);
这比WIN95/98下的磁盘扇区读取方便多了。
另外,上面的例子是操作逻辑磁盘的,它包括软驱、硬盘分区等;物理磁盘指的是实际的硬盘,它不关心该硬盘被分成几个区,硬盘的编号是从0开始的,"\\.\PHYSICALDRIVE0"表示第一块硬盘,其它依此类推。大家可能马上会想起,利用这种机制可以对硬盘的分区表进行存取了。确实如此,此时便可以对硬盘的主引导扇区(独立存在的一个扇区,包含分区表信息,不同于磁盘分区的BOOT区)进行操作了。
unsigned char Buffer[512]={0};
HANDLE hDev=CreateFile("\\\\.\\PHYSICALDRIVE0",GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
WriteFile(hDev,Buffer,512,&dwRet,0);
CloseHandle(hDev);危险!!!千万别这么做!!!
http://lysoft.7u7.net
具体怎么用偶也不知道,
去MSDN上学习一下吧取得硬盘数我想到一个笨办法:
还是利用CreateFile的返回值for i:=0 to 7 do
begin
hDevice =CreateFile('\\.\PhysicalDrive'+IntToStr(i),.......
if hDevic=INVALID_HANDLE_VALUE then
begin
ShowMessage('Physical Drive count is'+Inttostr(i+1));
break;
end;
end;