写MBR 的55aa 标志,写不进去,不知道什么原因

来源:百度知道 编辑:UC知道 时间:2024/05/17 23:52:50
.data
Diskname db '\\.\PHYSICALDRIVE0',0
Readbuffer db 512 dup (0)
Readsize dd ?
_handle dd ?
.code
start:
pusha
lea eax,Diskname
invoke CreateFile,eax,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or GENERIC_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
mov _handle,eax
cmp _handle,INVALID_HANDLE_VALUE
jz _end
invoke ReadFile,_handle,addr Readbuffer,510,addr Readsize,NULL
invoke WriteFile,_handle,addr Readbuffer,512,addr Readsize,NULL ; 完成对55aa 改写为 0000
invoke CloseHandle,_handle
pusha
_end:
invoke ExitProcess,NULL
end start
测试后,发现可以读取mbr ,但writefile 写不进去, 请指出原因,给出能写入的代码.
Ps: 有资料说2000/xp下写不了, 不过 HEX 这个软件却可以直接对硬盘读写, 他是怎么做到的?

另外,使用 small模式,利用int13 中断,对80 硬盘驱动器(driver0) 的读取操作出现错误,提示: " 应用程序已试着直接访问硬盘,但仍无法支持,其可能导致应用程序的功能出错。选择关闭终止应用程序." 是什么原因?

data segment

要绝对操作硬盘,最好在纯DOS下进行(用DOS启动机器),在WINDOWS下系统对底层是控制的,不容易操作,如MBR可读,但不一定让你写,这是系统为了安全而设置的.只有在DOS下,底层才是放开的.HEX这个软件能绝对写磁盘,是因为它进行了系统访问级的切换,使程序绕过高层操作系统的控制而直接操作底层,也就是系统的0级访问(I/O访问)了.关于切换到系统0级访问的API介绍很少,本人只知道其道理,但没有实施过.所以为了安全考虑,你还是使用纯DOS比较合适.

这种操作\\.\XXXX的方式写硬盘会有很多限制的。另外,那种所谓的small方式的,是旧式的dos调用,在WIN窗口下只是一个模拟的DOS虚拟机,对直接写盘等中断与IO操作是禁止的。
可以用驱动写盘。或参考winio也行。但不要干坏事哦。