sy10302
驱动牛犊
驱动牛犊
  • 注册日期2003-03-21
  • 最后登录2009-04-07
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1740回复:3

如何在驱动程序中读MBR?

楼主#
更多 发布于:2004-03-24 19:15
如何在驱动程序中读MBR?  我找到一个IoReadPartitionTableEx,但不知道怎么用? 为什么编译不了?

最新喜欢:

xxcat1220xxcat1...
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-25 09:30
[quote]如何在驱动程序中读MBR?  我找到一个IoReadPartitionTableEx,但不知道怎么用? 为什么编译不了?


IoReadPartitionTableEx 只能读取分区表信息,不能读MBR。读MBR可以直接读物理扇区0。
首先取得你要读的硬盘的DeivceObject指针。
再用IoBuildSynchronousFsdRequest构造一个IRP_MJ_READ IRP包。
调用 IoCallDriver。

 [/quote]
偶认为这种方法比较好。
不限容量的免费邮箱 www.k65.net
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2004-03-24 23:43
IO读取,自己能做的就不要靠HAL....
mov dx,1f6h  ;Drive and head port
        mov al,0a0h  ;Drive 0,Head 0
        out dx,al

        mov dx,1f2h  ;Sector count port
        mov al,1     ;Read One Sector
        out dx,al

        mov dx,1f3h  ;Sector number port
        mov al,1     ;Read One Sector
        out dx,al

        mov dx,1f4h  ;Cylinder low port
        xor al,al    ;Cylinder 0
        out dx,al

        mov dx,1f5h  ;Cylinder high port
        xor al,al    ;The rest of Cylinder 0
        out dx,al
 
        mov dx,1f7h  ;Command port
        mov al,20h   ;Read with Entry
        out dx,al
Still_going:
        in al,dx
        test al,8   ;This means the sector buffer requires servcing
        jz Still_going;do not continue until the sector buffer is ready
        xor ecx,ecx
mov cx,512/2  ;one sector/2
        mov edi,offset buffer
        mov dx,1f0h   ;data port - data comes in and out here
        cli
        cld
        rep insw
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地板#
发布于:2004-03-24 20:57
如何在驱动程序中读MBR?  我找到一个IoReadPartitionTableEx,但不知道怎么用? 为什么编译不了?


IoReadPartitionTableEx 只能读取分区表信息,不能读MBR。读MBR可以直接读物理扇区0。
首先取得你要读的硬盘的DeivceObject指针。
再用IoBuildSynchronousFsdRequest构造一个IRP_MJ_READ IRP包。
调用 IoCallDriver。

八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
游客

返回顶部