reactos操作系统实现(117)

前端之家收集整理的这篇文章主要介绍了reactos操作系统实现(117)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

10.4.1 DriverEntry@H_502_3@入口函数

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

#001@H_502_3@ NTSTATUS

#002@H_502_3@ NTAPI

#003@H_502_3@ DriverEntry(

#004@H_502_3@ IN PDRIVER_OBJECT DriverObject,

#005@H_502_3@ IN PUNICODE_STRING RegistryPath

#006@H_502_3@ )

#007@H_502_3@

#008@H_502_3@ /*++

#009@H_502_3@

#010@H_502_3@ Routine Description:

#011@H_502_3@

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

#013@H_502_3@

#014@H_502_3@ Arguments:

#015@H_502_3@

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

#017@H_502_3@

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

#019@H_502_3@

#020@H_502_3@ Return Value:

#021@H_502_3@

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

#023@H_502_3@

#024@H_502_3@ --*/

#025@H_502_3@

#026@H_502_3@ {

#027@H_502_3@ CLASS_INIT_DATA InitializationData;

#028@H_502_3@

#029@H_502_3@ //

#030@H_502_3@ // Zero InitData

#031@H_502_3@ //

#032@H_502_3@

@H_502_3@清空初始化结构。

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

#034@H_502_3@

#035@H_502_3@ //

#036@H_502_3@ // Set sizes

#037@H_502_3@ //

#038@H_502_3@

@H_502_3@设置结构的大小。

#039@H_502_3@ InitializationData.InitializationDataSize = sizeof(CLASS_INIT_DATA);

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

#040@H_502_3@ InitializationData.DeviceExtensionSize = DEVICE_EXTENSION_SIZE;

#041@H_502_3@

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

#042@H_502_3@ InitializationData.DeviceType = FILE_DEVICE_DISK;

#043@H_502_3@ InitializationData.DeviceCharacteristics = 0;

#044@H_502_3@

#045@H_502_3@ //

#046@H_502_3@ // Set entry points

#047@H_502_3@ //

#048@H_502_3@

@H_502_3@设置类调用的回调函数

#049@H_502_3@ InitializationData.ClassError = ScsiDiskProcessError;

#050@H_502_3@ InitializationData.ClassReadWriteVerification = ScsiDiskReadWriteVerification;

#051@H_502_3@ InitializationData.ClassFindDevices = FindScsiDisks;

#052@H_502_3@ InitializationData.ClassFindDeviceCallBack = ScsiDiskDeviceVerification;

#053@H_502_3@ InitializationData.ClassDeviceControl = ScsiDiskDeviceControl;

#054@H_502_3@ InitializationData.ClassShutdownFlush = ScsiDiskShutdownFlush;

#055@H_502_3@ @H_502_3@InitializationData.ClassCreateClose = NULL;

#056@H_502_3@

#057@H_502_3@ //

#058@H_502_3@ // Call the class init routine

#059@H_502_3@ //

#060@H_502_3@

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

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

#062@H_502_3@

#063} // end DriverEntry()

猜你在找的React相关文章