reactos操作系统实现(115)

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

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

@H_301_3@#001 NTSTATUS NTAPI

@H_301_3@#002 PciIdeXFdoPnpDispatch(

@H_301_3@#003 IN PDEVICE_OBJECT DeviceObject,

@H_301_3@#004 IN PIRP Irp)

@H_301_3@#005 {

@H_301_3@#006 ULONG MinorFunction;

@H_301_3@#007 PIO_STACK_LOCATION Stack;

@H_301_3@#008 ULONG_PTR Information = 0;

@H_301_3@#009 NTSTATUS Status;

@H_301_3@#010

@H_301_3@

获取当前栈位置。@H_301_3@

@H_301_3@#011 Stack = IoGetCurrentIrpStackLocation(Irp);

@H_301_3@

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

@H_301_3@#012 MinorFunction = Stack->MinorFunction;

@H_301_3@#013

@H_301_3@#014 switch (MinorFunction)

@H_301_3@#015 {

@H_301_3@

启动设备。@H_301_3@

@H_301_3@#016 case IRP_MN_START_DEVICE: /* 0x00 */

@H_301_3@#017 {

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

@H_301_3@#019 /* Call lower driver */

@H_301_3@#020 Status = ForwardIrpAndWait(DeviceObject,Irp);

@H_301_3@#021 if (NT_SUCCESS(Status))

@H_301_3@#022 Status = PciIdeXFdoStartDevice(DeviceObject,Irp);

@H_301_3@#023 break;

@H_301_3@#024 }

@H_301_3@

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

@H_301_3@#025 case IRP_MN_QUERY_DEVICE_RELATIONS: /* 0x07 */

@H_301_3@#026 {

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

@H_301_3@#028 {

@H_301_3@#029 case BusRelations:

@H_301_3@#030 {

@H_301_3@#031 PDEVICE_RELATIONS DeviceRelations = NULL;

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

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

@H_301_3@#034 Information = (ULONG_PTR)DeviceRelations;

@H_301_3@#035 break;

@H_301_3@#036 }

@H_301_3@#037 default:

@H_301_3@#038 {

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

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

@H_301_3@#041 Status = STATUS_NOT_IMPLEMENTED;

@H_301_3@#042 break;

@H_301_3@#043 }

@H_301_3@#044 }

@H_301_3@#045 break;

@H_301_3@#046 }

@H_301_3@

过滤分配的资源请求。@H_301_3@

@H_301_3@#047 case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* 0x0d */

@H_301_3@#048 {

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

@H_301_3@#050 return ForwardIrpAndForget(DeviceObject,Irp);

@H_301_3@#051 }

@H_301_3@#052 default:

@H_301_3@#053 {

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

@H_301_3@#055 return ForwardIrpAndForget(DeviceObject,Irp);

@H_301_3@#056 }

@H_301_3@#057 }

@H_301_3@#058

@H_301_3@

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

@H_301_3@#059 Irp->IoStatus.Information = Information;

@H_301_3@#060 Irp->IoStatus.Status = Status;

@H_301_3@#061 IoCompleteRequest(Irp,IO_NO_INCREMENT);

@H_301_3@#062 return Status;

@H_301_3@#063}

猜你在找的React相关文章