当前位置:主页>销售管理软件> 列表

如何读取硬盘引导扇区的内容? 找免费财务软件

进销存软件版1楼: 如题,不要说用汇编啊,不会。
如果D不行vc可以不?该怎么做,谁能给个tips?

2楼: 使用函数CreateFile()可以直接访问设备的啊!
例如:
var hF:THandle;
hF:=
CreateFile(''\\.\PhysicalDrive0'',GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,0,
OPEN_EXISTING,0,NULL);
ReadFile(hF,...) 如免费财务软件

3楼: 我说那我怎么老读不出来,我用的是\\\\.\E:
改成\\.\E:,好了。。。
hoho,明白了。

4楼: var hF:THandle;
hF:=
CreateFile(''[red]\\.\PhysicalDrive0[/red]'',GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,0,
OPEN_EXISTING,0,NULL);
ReadFile(hF,...)
[red]\\.\PhysicalDrive0[/red]是指第一个物理硬盘,不能用逻辑硬盘代替,没有C:、D:、E:...的概念。

5楼: 楼上的那请问怎么读写分区的引导扇区?

6楼: procedure TForm1.Button1Click(Sender: TObject);
var
Buf: array [0..511] of Byte; //数据缓冲区
ShowText, TmpStr: string;
FileHandle: THandle;
ReadCount, i: Cardinal;
begin
//打开磁盘
//''\\.\PhysicalDrive0''是指第一个物理硬盘
//''\\.\C:''是指第一个逻辑盘...
FileHandle := CreateFile(''\\.\C:'', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0);
if FileHandle = INVALID_HANDLE_VALUE then
begin
MessageBox(GetDesktopWindow, ''打开磁盘失败'', ''ERROR'', MB_OK);
ExitProcess(0);
end;
//读出引导扇区数据
if ReadFile(FileHandle, Buf, 512, ReadCount, nil) then
begin
SetLength(ShowText, Length(Buf) * 3);
//将数据转为字串
for i := Low(Buf) to High(Buf) do
begin
TmpStr := Format(''%2.2x '', [Buf[i]]);
CopyMemory(@ShowText[i*3+1], @TmpStr[1], 3);
end;
end;
MessageBox(GetDesktopWindow, PChar(ShowText), ''引导扇区'', MB_OK);
CloseHandle(FileHandle);
ExitProcess(0);
end;

进销存软件版7楼: uses
SysUtils,
windows;

var
Buf: array [0..512] of Byte; //数据缓冲区


ShowText, TmpStr: string;
FileHandle: THandle;
ReadCount, i: Cardinal;

begin
{ TODO -oUser -cConsole Main : Insert code here }
//打开磁盘
FileHandle := CreateFile(''\\.\C:'', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0);
if FileHandle = INVALID_HANDLE_VALUE then
begin
MessageBox(GetDesktopWindow, ''打开磁盘失败'', ''ERROR'', MB_OK);
ExitProcess(0);
end;

end.

各位老大看看上面的代码有问题么

8楼: 明白了,是1024那里出的问题。
那么
1 现在读出来的数据是\\.\C盘的O扇区吗,
2 如果是的话我要对fat32分区表操作,可以用writefile实现吗,
我不敢试验,先问问,有点底气
请kaida和知道的大虾讲讲。
讲完就揭帖。

9楼: 1 现在读出来的数据是\\.\C盘的O扇区吗-----是
2 如果是的话我要对fat32分区表操作,可以用writefile实现吗-----可以,但是很危险,如果你对分区结构不甚了解,最好别动。如果要试,请做好备份。

10楼: to风宇:
buf需要是扇区的整数倍。
谢谢各位的参与和kaida的解答,
相信大家多少都有点收获。

11楼: 多人接受答案了。