windchen
驱动牛犊
驱动牛犊
  • 注册日期2004-08-11
  • 最后登录2010-01-14
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1654回复:4

在WINXP下,硬盘的扇区怎样读写?

楼主#
更多 发布于:2004-12-09 19:55
请问在WINXP下,硬盘的扇区怎样读写?谁有例子提供给我吗?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-12-09 20:35
进入RING0,IO或修改IOPL来IO当然如果你是听话的孩子,还可以用标准的函数来读写硬盘驱动.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
windchen
驱动牛犊
驱动牛犊
  • 注册日期2004-08-11
  • 最后登录2010-01-14
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-10 13:07
我就是没有在MSDN中找到读写硬盘驱动的API函数。您知道是那些吗
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-12-10 17:06
;*****************************
;AbsDiskNT.asm             *
;功能:Windows NT中绝对      *
;      磁盘读写     *
;*****************************
.386p
.model flat,stdcall ;平坦内存模式
;外部过程声明
extrn MessageBoxA:proc
extrn ExitProcess:proc
extrn CreateFileA:proc
extrn ReadFile:proc
extrn CloseHandle:proc

;常量定义
NULL  = 0
MB_OK = 0
INVALID_HANDLE_VALUE = -1
GENERIC_READ  = 80000000H
GENERIC_WRITE = 40000000H
FILE_SHARE_READ   = 1
FILE_SHARE_WRITE  = 2
FILE_SHARE_DELETE = 4
OPEN_EXISTING = 3


.data
FileName db '\\.\C:',0
align 4 ;双字对齐
readed dd 0
Buffer  db 4096 dup (0)
hFile dd 0

Caption db 'NT中绝对磁盘读写',0
ErrCreate db '建文件错!',0
ErrRead db '读盘错误!',0

ShowText db 4096*3 dup (0)
Digit db '0123456789ABCDEF'

.code
main:
;建立文件
call CreateFileA,offset FileName,GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,NULL,OPEN_EXISTING,NULL,NULL
mov  [hFile],eax
cmp  eax,INVALID_HANDLE_VALUE
jnz  read
;显示错误信息
call ShowError,offset ErrCreate
read: ;读数据
call ReadFile,eax,offset Buffer,512,offset readed,NULL
cmp  eax,0
jnz  show
;显示错误信息
call ShowError,offset ErrRead
show: ;显示读出的内容
call ShowBuffer
;关闭文件句柄
call CloseHandle ,[hFile]
;退出
call ExitProcess,0

ShowError proc ,MESSAGE:DWORD ;显示出错信息并退出
call MessageBoxA,NULL,MESSAGE,offset Caption,MB_OK
cmp  [hFile],0
jz   endShowErr
call CloseHandle ,[hFile] ;关闭句柄
endShowErr:
call ExitProcess,0 ;退出
ShowError endp

ShowBuffer proc ;显示所读出的信息
;把数据转换成16进制的形式
mov  esi,offset Buffer ;数据
mov  edi,offset ShowText ;转换后的数据
mov  ebx,offset Digit
mov  ecx,0
xor  eax,eax
computeAgain:
cmp  [readed],0
jz   endCompute
dec  [readed]
mov  al,[esi]
push eax
shr  eax,4 ;高4位
mov  al,[ebx+eax]
mov  byte ptr[edi],al
inc  edi
pop  eax
and  eax,0fH ;低4位
mov  al,[ebx+eax]
mov  byte ptr[edi],al
inc  edi
mov  byte ptr[edi],' ' ;空格
inc  edi
inc  esi
inc  ecx
cmp  ecx,16
jnz  computeAgain
xor  ecx,ecx
mov  byte ptr[edi-1],13 ;回车
jmp  computeAgain

endCompute:
;显示
call MessageBoxA,NULL,offset ShowText,offset Caption,MB_OK
ret
ShowBuffer endp
end main
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
unix2004unix
驱动牛犊
驱动牛犊
  • 注册日期2004-12-16
  • 最后登录2004-12-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-16 14:51
CreateFile("//.//C:",...)
Read
游客

返回顶部