reactos操作系统实现(113)
下面来分析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} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |