您的位置:首页 > Web前端 > React

reactos操作系统实现(113)

2009-10-23 21:53 429 查看
下面来分析PCIIDE和PCIIDEX驱动程序,这两个都是PCI的IDE总线驱动程序。

先从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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: