哪里可以得到免费的NT4下使用的磁盘直接读写工具,或能提供方法,谢谢(200分)

  • 主题发起人 主题发起人 colinyan
  • 开始时间 开始时间
用CreateFile()! //haha

用 //./C: 格式打开逻辑盘, 用 //./PHYSICALDRIVE1 格式打开物理盘!
然后用DeviceIOControl()可以读写分区信息/格式化等.(还没有看到如何
访问全盘的说明.ReadFile()?).
 
我来将lhz的答案细化一下:
这里有一段关于在保护模式下进行INT 13H调用的例子,请你参考,可能
适合你的情况,我在NT下没有试验过,但应该有效:
.
.
type
DIOC_REGISTERS=record
REG_EBX,REG_EDX,REG_ECX,REG_EAX,REG_EDI,REG_ESI,REG_FLAGS:DWORD;
end;
.
.
var
REG:DIOC_REGISTERS;
HDEVICE:HWND;
FRESULT:BOOLEAN;
CB:DWORD;
BUFF:ARRAY [1..512] OF BYTE;
t0: PSECURITYATTRIBUTES;
t1: POVERLAPPED;
t2: integer;
begin
t0:=nil;
t1:=nil;
HDEVICE:=CreateFile('//./VWIN32',0,0,t0,0,0,0);
if HDEVICE=INVALID_HANDLE_VALUE then
exit;
REG.REG_EAX:=2*256+1; //读1个扇区
REG.REG_ECX:=21*256+10; //第21道第10扇区
REG.REG_EDX:=0; //0面
REG.REG_EBX:=DWORD(@BUFF); //缓冲区地址
REG.REG_FLAGS:=1;
FRESULT:=DeviceIoConrol(HDEVICE,4,@REG,SIZEOF(DIOC_REGISTERS),
@REG,SIZEOF(DIOC_REGISTERS),t2,t1);

CloseHandle(HDEVICE);

IF (REG.REG_EAX AND $8000)=$8000 THEN
MessagesBox(0,'驱动器中无磁盘!','严重错误',16);
end;
.
.
我曾用此法编写过一个磁盘加密程序,效果比较好。
 
估计您的方法在NT下行不通,因为我在NT的系统目录下找不到VWIN32.sys
(VWIN32*.*都没有).没有这个设备,怎么打得开?

刚才读Windows的头文件,看到一个定义:
IOCTL_DISK_REQUEST_DATA
这是一个未公开的IO控制码,怀疑就是用于读取数据的.
 
我来将lhz的答案细化一下:
这里有一段关于在保护模式下进行INT 13H调用的例子,请你参考,可能
适合你的情况,我在NT下没有试验过,但应该有效:
.
.
type
DIOC_REGISTERS=record
REG_EBX,REG_EDX,REG_ECX,REG_EAX,REG_EDI,REG_ESI,REG_FLAGS:DWORD;
end;
.
.
var
REG:DIOC_REGISTERS;
HDEVICE:HWND;
FRESULT:BOOLEAN;
CB:DWORD;
BUFF:ARRAY [1..512] OF BYTE;
t0: PSECURITYATTRIBUTES;
t1: POVERLAPPED;
t2: integer;
begin
t0:=nil;
t1:=nil;
HDEVICE:=CreateFile('//./VWIN32',0,0,t0,0,0,0);
if HDEVICE=INVALID_HANDLE_VALUE then
exit;
REG.REG_EAX:=2*256+1; //读1个扇区
REG.REG_ECX:=21*256+10; //第21道第10扇区
REG.REG_EDX:=0; //0面
REG.REG_EBX:=DWORD(@BUFF); //缓冲区地址
REG.REG_FLAGS:=1;
FRESULT:=DeviceIoConrol(HDEVICE,4,@REG,SIZEOF(DIOC_REGISTERS),
@REG,SIZEOF(DIOC_REGISTERS),t2,t1);

CloseHandle(HDEVICE);

IF (REG.REG_EAX AND $8000)=$8000 THEN
MessagesBox(0,'驱动器中无磁盘!','严重错误',16);
end;
.
.
我曾用此法编写过一个磁盘加密程序,效果比较好。
 
我来将lhz的答案细化一下:
这里有一段关于在保护模式下进行INT 13H调用的例子,请你参考,可能
适合你的情况,我在NT下没有试验过,但应该有效:
.
.
type
DIOC_REGISTERS=record
REG_EBX,REG_EDX,REG_ECX,REG_EAX,REG_EDI,REG_ESI,REG_FLAGS:DWORD;
end;
.
.
var
REG:DIOC_REGISTERS;
HDEVICE:HWND;
FRESULT:BOOLEAN;
CB:DWORD;
BUFF:ARRAY [1..512] OF BYTE;
t0: PSECURITYATTRIBUTES;
t1: POVERLAPPED;
t2: integer;
begin
t0:=nil;
t1:=nil;
HDEVICE:=CreateFile('//./VWIN32',0,0,t0,0,0,0);
if HDEVICE=INVALID_HANDLE_VALUE then
exit;
REG.REG_EAX:=2*256+1; //读1个扇区
REG.REG_ECX:=21*256+10; //第21道第10扇区
REG.REG_EDX:=0; //0面
REG.REG_EBX:=DWORD(@BUFF); //缓冲区地址
REG.REG_FLAGS:=1;
FRESULT:=DeviceIoConrol(HDEVICE,4,@REG,SIZEOF(DIOC_REGISTERS),
@REG,SIZEOF(DIOC_REGISTERS),t2,t1);

CloseHandle(HDEVICE);

IF (REG.REG_EAX AND $8000)=$8000 THEN
MessagesBox(0,'驱动器中无磁盘!','严重错误',16);
end;
.
.
我曾用此法编写过一个磁盘加密程序,效果比较好。
 
colinyan,如果您觉得已经得到了问题的答案,请结束该问题,
如果您觉得问题尚未解决,请添加注释。

还有那位大虾有高见?
 
colinyan:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
去torry.ru搞个Dio.zip一切搞定
 
多人接受答案了。
 

Similar threads

回复
0
查看
873
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部