reactos操作系统实现(113)

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

下面来分析PCIIDEPCIIDEX驱动程序,这两个都是PCIIDE总线驱动程序。

先从PCIIDE的入口函数开始,具体实现代码如下:

#001 NTSTATUS NTAPI

#002 DriverEntry(

#003 IN PDRIVER_OBJECT DriverObject,

#004 IN PUNICODE_STRING RegistryPath)

#005 {

#006 NTSTATUS Status;

#007

在这个驱动程序入口函数,主要调用PCIIDEX函数PciIdeXInitialize来初始化。其函数PciIdeGetControllerProperties获取IDE控制器的属性

#008 Status = PciIdeXInitialize(

#009 DriverObject,

#010 RegistryPath,

#011 PciIdeGetControllerProperties,

#012 0);

#013

#014 return Status;

#015 }

#016

10.3.2 PciIdeXInitialize函数

PciIdeXInitialize函数主要用来创建PCIIDEX驱动程序对象,并且设置相应添加设备函数和即插即用函数

#001 NTSTATUS NTAPI

#002 PciIdeXInitialize(

#003 IN PDRIVER_OBJECT DriverObject,

#004 IN PUNICODE_STRING RegistryPath,

#005 IN PCONTROLLER_PROPERTIES HwGetControllerProperties,

#006 IN ULONG ExtensionSize)

#007 {

#008 ULONG i;

#009 PPCIIDEX_DRIVER_EXTENSION DriverExtension;

#010 NTSTATUS Status;

#011

#012 DPRINT("PciIdeXInitialize(%p '%wZ' %p 0x%lx)/n",

#013 DriverObject,RegistryPath,HwGetControllerProperties,ExtensionSize);

#014

创建PCIIDE扩展的驱动程序对象。

#015 Status = IoAllocateDriverObjectExtension(

#016 DriverObject,

#017 DriverObject,

#018 sizeof(PCIIDEX_DRIVER_EXTENSION),

#019 (PVOID*)&DriverExtension);

如果创建不成功返回出错。

#020 if (!NT_SUCCESS(Status))

#021 return Status;

清空驱动程序扩展对象。

#022 RtlZeroMemory(DriverExtension,sizeof(PCIIDEX_DRIVER_EXTENSION));

保存控制器的扩展大小。

#023 DriverExtension->MiniControllerExtensionSize = ExtensionSize;

保存获取控制器属性函数

#024 DriverExtension->HwGetControllerProperties = HwGetControllerProperties;

#025

设置添加PCIIDEX设备的函数

#026 DriverObject->DriverExtension->AddDevice = PciIdeXAddDevice;

#027

清空所有消息处理函数

#028 for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)

#029 DriverObject->MajorFunction[i] = PciIdeXForwardOrIgnore;

设置即插即用处理函数

#030 DriverObject->MajorFunction[IRP_MJ_PNP] = PciIdeXPnpDispatch;

#031

#032 return STATUS_SUCCESS;

#033}

猜你在找的React相关文章