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

reactos操作系统实现(115)

发布时间:2020-12-15 05:00:01 所属栏目:百科 来源:网络整理
导读:PciIdeXFdoPnpDispatch 函数主要处理 PCIIDE 即插即用的消息处理。具体实现代码如下: #001 NTSTATUS NTAPI #002 PciIdeXFdoPnpDispatch( #003 IN PDEVICE_OBJECT DeviceObject, #004 IN PIRP Irp) #005 { #006 ULONG MinorFunction; #007 PIO_STACK_LOCATIO

PciIdeXFdoPnpDispatch函数主要处理PCIIDE即插即用的消息处理。具体实现代码如下:

#001 NTSTATUS NTAPI

#002 PciIdeXFdoPnpDispatch(

#003 IN PDEVICE_OBJECT DeviceObject,

#004 IN PIRP Irp)

#005 {

#006 ULONG MinorFunction;

#007 PIO_STACK_LOCATION Stack;

#008 ULONG_PTR Information = 0;

#009 NTSTATUS Status;

#010

获取当前栈位置。

#011 Stack = IoGetCurrentIrpStackLocation(Irp);

次功能码,用来选择那一种功能处理代码。

#012 MinorFunction = Stack->MinorFunction;

#013

#014 switch (MinorFunction)

#015 {

启动设备。

#016 case IRP_MN_START_DEVICE: /* 0x00 */

#017 {

#018 DPRINT("IRP_MJ_PNP / IRP_MN_START_DEVICE/n");

#019 /* Call lower driver */

#020 Status = ForwardIrpAndWait(DeviceObject,Irp);

#021 if (NT_SUCCESS(Status))

#022 Status = PciIdeXFdoStartDevice(DeviceObject,Irp);

#023 break;

#024 }

查询总线有多少个物理设备。

#025 case IRP_MN_QUERY_DEVICE_RELATIONS: /* 0x07 */

#026 {

#027 switch (Stack->Parameters.QueryDeviceRelations.Type)

#028 {

#029 case BusRelations:

#030 {

#031 PDEVICE_RELATIONS DeviceRelations = NULL;

#032 DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations/n");

#033 Status = PciIdeXFdoQueryBusRelations(DeviceObject,&DeviceRelations);

#034 Information = (ULONG_PTR)DeviceRelations;

#035 break;

#036 }

#037 default:

#038 {

#039 DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx/n",

#040 Stack->Parameters.QueryDeviceRelations.Type);

#041 Status = STATUS_NOT_IMPLEMENTED;

#042 break;

#043 }

#044 }

#045 break;

#046 }

过滤分配的资源请求。

#047 case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* 0x0d */

#048 {

#049 DPRINT("IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS/n");

#050 return ForwardIrpAndForget(DeviceObject,Irp);

#051 }

#052 default:

#053 {

#054 DPRINT1("IRP_MJ_PNP / Unknown minor function 0x%lx/n",MinorFunction);

#055 return ForwardIrpAndForget(DeviceObject,Irp);

#056 }

#057 }

#058

返回这个IRP的状态,并标记这个IRP完成。

#059 Irp->IoStatus.Information = Information;

#060 Irp->IoStatus.Status = Status;

#061 IoCompleteRequest(Irp,IO_NO_INCREMENT);

#062 return Status;

#063}

(编辑:李大同)

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

    推荐文章
      热点阅读