加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(117)

发布时间:2020-12-15 04:59:59 所属栏目:百科 来源:网络整理
导读:在 Reactos 里,磁盘类的驱动程序是由 disk.sys 实现的。从文件系统上输出和读取的调用,就是需要通过这个驱动程序来实现,在这个驱动程序下面就是 PCIIDE 和 ATAPI 的驱动程序了,后面这些驱动程序,在前面已经分析过,现在来学习 disk 类驱动程序。 10.4.1

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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读