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

reactos操作系统实现(113)

发布时间:2020-12-15 05:00:03 所属栏目:百科 来源:网络整理
导读:下面来分析 PCIIDE 和 PCIIDEX 驱动程序,这两个都是 PCI 的 IDE 总线驱动程序。 先从 PCIIDE 的入口函数开始,具体实现代码如下: #001 NTSTATUS NTAPI #002 DriverEntry( #003 IN PDRIVER_OBJECT DriverObject, #004 IN PUNICODE_STRING RegistryPath) #00

下面来分析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}

(编辑:李大同)

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

    推荐文章
      热点阅读