news 2026/7/15 22:47:14

PipSetDevNodeState函数的重要作用值从状态DeviceNodeStarted到状态DeviceNodeEnumerateCompletion到状态DeviceNodeStarted重要

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PipSetDevNodeState函数的重要作用值从状态DeviceNodeStarted到状态DeviceNodeEnumerateCompletion到状态DeviceNodeStarted重要

nt!PipSetDevNodeState函数的重要作用值从状态DeviceNodeStarted到状态DeviceNodeEnumerateCompletion到状态DeviceNodeStarted重要

第一部分:

NTSTATUS
PipProcessDevNodeTree(
IN PDEVICE_NODE SubtreeRootDeviceNode,
IN BOOLEAN LoadDriver,
IN BOOLEAN ReallocateResources,
IN ENUM_TYPE EnumType,
IN BOOLEAN Synchronous,
IN BOOLEAN ProcessOnlyIntermediateStates,
IN PADD_CONTEXT AddContext,
IN PPI_DEVICE_REQUEST Request
)
{

case DeviceNodeStarted:

nextNode = ChildNode;
if (!ProcessOnlyIntermediateStates) {

if ((currentNode->Flags & DNF_REENUMERATE)) {

status = PipEnumerateDevice(currentNode, Synchronous);
if (NT_SUCCESS(status)) {

//
// Remember the bus we just enumerated.
//

enumeratedBus = currentNode;
nextNode = SameNode;

} else if (status == STATUS_PENDING) {

nextNode = SiblingNode;
}
}
}
break;

NTSTATUS
PipEnumerateDevice(
IN PDEVICE_NODE DeviceNode,
IN BOOLEAN Synchronous
)
{
NTSTATUS status;

PAGED_CODE();

//
// Clear the flag before the query so we dont lose an enum request.
//
DeviceNode->Flags &= ~DNF_REENUMERATE;
status = IopQueryDeviceRelations(BusRelations,
DeviceNode->PhysicalDeviceObject,
Synchronous,
&DeviceNode->OverUsed1.PendingDeviceRelations
);

return status;
}

NTSTATUS
IopQueryDeviceRelations(
IN DEVICE_RELATION_TYPE Relations,
IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN Synchronous,
OUT PDEVICE_RELATIONS *DeviceRelations
)
{
IO_STACK_LOCATION irpSp;
NTSTATUS status;
PDEVICE_NODE deviceNode = (PDEVICE_NODE)DeviceObject->DeviceObjectExtension->DeviceNode;

UNREFERENCED_PARAMETER (Synchronous);

//
// Initialize the stack location to pass to IopSynchronousCall()
//

RtlZeroMemory(&irpSp, sizeof(IO_STACK_LOCATION));

//
// Set the function codes.
//

irpSp.MajorFunction = IRP_MJ_PNP;
irpSp.MinorFunction = IRP_MN_QUERY_DEVICE_RELATIONS;

//
// Set the pointer to the resource list
//

irpSp.Parameters.QueryDeviceRelations.Type = Relations;

//
// Make the call and return.
//
status = IopSynchronousCall(DeviceObject, &irpSp, (PULONG_PTR)DeviceRelations);

if (Relations == BusRelations) {

deviceNode->CompletionStatus = status;

PipSetDevNodeState( deviceNode, DeviceNodeEnumerateCompletion, NULL );

status = STATUS_SUCCESS;
}

return status;
}

第二部分:

NTSTATUS
PipProcessDevNodeTree(
IN PDEVICE_NODE SubtreeRootDeviceNode,
IN BOOLEAN LoadDriver,
IN BOOLEAN ReallocateResources,
IN ENUM_TYPE EnumType,
IN BOOLEAN Synchronous,
IN BOOLEAN ProcessOnlyIntermediateStates,
IN PADD_CONTEXT AddContext,
IN PPI_DEVICE_REQUEST Request
)
{

case DeviceNodeEnumerateCompletion:

status = PipEnumerateCompleted(currentNode);
nextNode = ChildNode;
break;

NTSTATUS
PipEnumerateCompleted(
IN PDEVICE_NODE DeviceNode
)
{
PDEVICE_NODE childDeviceNode, nextChildDeviceNode;
PDEVICE_OBJECT childDeviceObject;
BOOLEAN childRemoved;
NTSTATUS status, allocationStatus;
ULONG i;

PAGED_CODE();

if (DeviceNode->OverUsed1.PendingDeviceRelations == NULL) {

PipSetDevNodeState(DeviceNode, DeviceNodeStarted, NULL);

return STATUS_SUCCESS;
}

//
// Walk all the child device nodes and mark them as not present
//

childDeviceNode = DeviceNode->Child;
while (childDeviceNode) {
childDeviceNode->Flags &= ~DNF_ENUMERATED;
childDeviceNode = childDeviceNode->Sibling;
}

//
// Check all the PDOs returned see if any new one or any one disappeared.
//

for (i = 0; i < DeviceNode->OverUsed1.PendingDeviceRelations->Count; i++) {

childDeviceObject = DeviceNode->OverUsed1.PendingDeviceRelations->Objects[i];

ASSERT(DeviceNode->State == DeviceNodeEnumerateCompletion);
PipSetDevNodeState(DeviceNode, DeviceNodeStarted, NULL);

return status;
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 20:18:23

YOLOv8可信AI三要素:公平、透明、可解释

YOLOv8可信AI三要素&#xff1a;公平、透明、可解释 在自动驾驶车辆识别行人时误判&#xff0c;或安防系统对特定人群漏检的新闻频频出现之际&#xff0c;人们开始意识到&#xff1a;一个“聪明”的AI模型&#xff0c;未必是一个“可信”的AI系统。尤其是在目标检测这类直接影响…

作者头像 李华
网站建设 2026/7/14 20:18:19

YOLOv8推理示例解析:加载yolov8n.pt模型识别bus.jpg图像

YOLOv8推理实战&#xff1a;从加载模型到识别bus.jpg的完整解析 在智能交通监控、自动驾驶感知和工业视觉检测日益普及的今天&#xff0c;如何快速部署一个高效准确的目标检测系统&#xff0c;已经成为开发者面临的核心挑战。传统流程中&#xff0c;环境配置复杂、依赖冲突频发…

作者头像 李华
网站建设 2026/7/2 9:56:24

YOLOv8直播教学计划:每周一次实战演示

YOLOv8直播教学计划&#xff1a;每周一次实战演示 在人工智能教育日益普及的今天&#xff0c;一个常见的痛点始终困扰着讲师和学员&#xff1a;为什么“在我电脑上能跑”的代码&#xff0c;在别人机器上却频频报错&#xff1f;环境依赖冲突、版本不匹配、CUDA 安装失败……这些…

作者头像 李华
网站建设 2026/6/28 22:39:48

边缘计算时代PHP数据预处理的未来方向:仅1%工程师看懂的趋势

第一章&#xff1a;边缘计算时代PHP数据预处理的未来方向随着物联网设备和5G网络的普及&#xff0c;边缘计算正逐步成为数据处理的核心架构。在这一背景下&#xff0c;PHP作为广泛使用的服务端脚本语言&#xff0c;其传统集中式数据预处理模式面临延迟高、带宽消耗大等挑战。未…

作者头像 李华
网站建设 2026/7/4 5:39:07

YOLOv8常见报错汇总:ModuleNotFoundError解决方案

YOLOv8常见报错汇总&#xff1a;ModuleNotFoundError解决方案 在深度学习项目中&#xff0c;环境配置问题往往是开发者最头疼的“拦路虎”。尤其是在使用像 YOLOv8 这样高度集成的工具链时&#xff0c;明明镜像号称“开箱即用”&#xff0c;却还是频频遇到 ModuleNotFoundError…

作者头像 李华