磁盘驱动的简单分析

在atapi.sys的DriverEntry里会调用ScsiPortInitialize。 PCI中有8个条PCI bus。在ScsiPortInitialize中对每条PCI Bus调用一次AtapiFindCompatiblePciController或AtapiFindIsaBusController,用来寻找ATAPI的Controller。如果发现HBA,则调用ScsiPortCreatePortDevice函数创建scsi对象。

系统会分别调用两次AtapiFindCompatiblePciController
分别找到Prime和Second Channel,分别对应着中断14和15,然后分别调用AtapiFindDevices,会分别找到每个Channel的IDE设备。

 

其中AtapiFindCompatiblePciController会调用ScsiPortGetBusData去枚举每一个pci的function。如果发现BaseClass==1且SubClass==1,即被认定为IDE Controller.

image

(摘在pci2_2.pdf中的Figure D-1: Programming Interface Byte Layout for IDE Controller Class Code)

 

如果AtapiFindCompatiblePciController找到IDE设备后,就调用ScsiPortCreatePortDevice,为其创建一个scsi设备。

因为ATAPI设备室支持scsi command的,所以通过向这个scsi设备发送scsi command可以传送到ATAPI设备,然后被解释执行。

ScsiPortCreatePortDevice会用IoCreateDevice创建一个对象,然后用IoConnectInterrupt为将Prime或者Secondary Channel的的中断与这个设备对象连接,并设置好中断回调函数ScsiPortIsr。

ScsiPortIsr会调用DPC例程,然后在DPC例程中会申请SRB块,并将请求传送进SCSI设备对象。

在disk.sys中的DriverEntry会调用ScsiClassInitialize,它会枚举所创建的scsi设备对象。
ScsiClassInitialize会调用DiskClassFindDevices,
而DiskClassFindDevices还会调用ScsiClassGetCapabilities、ScsiClassGetInquiryData、ScsiClassFindUnclaimedDevices

然后对所有Unclaimed的设备进行DiskClassCreateDeviceObject

 

在DiskClassCreateDeviceObject中,首先创建这个硬盘对象的一个根目录,即\Device\Harddisk0。
然后紧接着调用ScsiClassClaimDevice
然后用ScsiClassCreateDeviceObject创建分区0,即\Device\Harddisk0\Partition0
然后调用ScsiClassReadDriveCapacity询问分区0设备
然后调用IoReadPartitionTable,读取分区表信息,他是调用xHalIoReadPartitionTable来实现的

DiskClassCreateDeviceObject通过读取\Device\Harddisk0\Partition0读取MBR信息,分析出一共有多少个分区。
然后依次对每个分区创建一个设备对象,例如\Device\Harddisk0\Partition1


vfatfs.sys的DriverEntry会调用IoRegisterFileSystem函数。

转载于:https://www.cnblogs.com/fanzi2009/archive/2009/06/03/1495769.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值