reactos操作系统实现(117)

Reactos里,磁盘类的驱动程序是由disk.sys实现的。从文件系统上输出和读取的调用,就是需要通过这个驱动程序来实现,在这个驱动程序下面就是PCIIDEATAPI的驱动程序了,后面这些驱动程序,在前面已经分析过,现在来学习disk类驱动程序。

 

10.4.1 DriverEntry入口函数

分析这个程序还是从这个驱动程序的入口函数开始,这个函数是初始化SCSI的硬盘类驱动程序,具体实现代码如下:

#001  NTSTATUS

#002  NTAPI

#003  DriverEntry(

#004      IN PDRIVER_OBJECT DriverObject,

#005      IN PUNICODE_STRING RegistryPath

#006      )

#007 

#008  /*++

#009 

#010  Routine Description:

#011 

#012      This routine initializes the SCSI hard disk class driver.

#013 

#014  Arguments:

#015 

#016      DriverObject - Pointer to driver object created by system.

#017 

#018      RegistryPath - Pointer to the name of the services node for this driver.

#019 

#020  Return Value:

#021 

#022      The function value is the final status from the initialization operation.

#023 

#024  --*/

#025 

#026  {

#027      CLASS_INIT_DATA InitializationData;

#028 

#029      //

#030      // Zero InitData

#031      //

#032 

 

清空初始化结构。

#033      RtlZeroMemory (&InitializationData, sizeof(CLASS_INIT_DATA));

#034 

#035      //

#036      // Set sizes

#037      //

#038 

 

设置结构的大小。

#039      InitializationData.InitializationDataSize = sizeof(CLASS_INIT_DATA);

 

设置驱动程序使用空间的大小。

#040      InitializationData.DeviceExtensionSize = DEVICE_EXTENSION_SIZE;

#041 

 

指明这个驱动程序对象是磁盘驱动程序。

#042      InitializationData.DeviceType = FILE_DEVICE_DISK;

#043      InitializationData.DeviceCharacteristics = 0;

#044 

#045      //

#046      // Set entry points

#047      //

#048 

 

设置类调用的回调函数。

#049      InitializationData.ClassError = ScsiDiskProcessError;

#050      InitializationData.ClassReadWriteVerification = ScsiDiskReadWriteVerification;

#051      InitializationData.ClassFindDevices = FindScsiDisks;

#052      InitializationData.ClassFindDeviceCallBack = ScsiDiskDeviceVerification;

#053      InitializationData.ClassDeviceControl = ScsiDiskDeviceControl;

#054      InitializationData.ClassShutdownFlush = ScsiDiskShutdownFlush;

#055      InitializationData.ClassCreateClose = NULL;

#056 

#057      //

#058      // Call the class init routine

#059      //

#060 

 

调用ScsiClassInitialize函数初始化驱动程序对象。

#061      return ScsiClassInitialize( DriverObject, RegistryPath, &InitializationData);

#062 

#063  } // end DriverEntry()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值