news 2026/4/16 6:26:55

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/3/27 16:24:26

YOLOv8模型推理速度测试:FPS达到多少?

YOLOv8模型推理速度测试&#xff1a;FPS达到多少&#xff1f; 在智能监控、自动驾驶和工业质检等实时视觉系统中&#xff0c;目标检测的响应速度往往直接决定整个系统的可用性。一个高精度但延迟过高的模型&#xff0c;在实际部署中可能寸步难行&#xff1b;而一个飞快却频频漏…

作者头像 李华
网站建设 2026/4/15 10:37:58

缓解电动汽车里程焦虑:简单AI模型如何预测充电桩可用性

我们开发了一个独特的模型&#xff0c;用于预测在特定时间内电动汽车充电桩在某个充电站可用的概率&#xff0c;这有助于电动汽车驾驶员高效规划行程&#xff0c;同时最大限度地减少在充电站的等待时间。全球电动汽车&#xff08;EV&#xff09;的普及速度正在加快&#xff0c;…

作者头像 李华
网站建设 2026/4/14 7:51:32

如何在 WhatsApp上个性化定制 2026 年新年贴纸:分步指南

如何在 WhatsApp 上个性化定制 2026 年新年贴纸&#xff1a;分步指南 让你的 WhatsApp 祝福与众不同 还在发送千篇一律的“新年快乐”贴纸吗&#xff1f;2025年&#xff0c;通过添加姓名、照片、专属玩笑甚至定制祝福语的个性化贴纸&#xff0c;让你的祝福脱颖而出变得前所未有…

作者头像 李华
网站建设 2026/4/10 22:32:08

YOLOv8 pip install ultralytics 安装慢?国内源替换教程

YOLOv8 安装卡顿&#xff1f;一招解决 pip 下载慢的实战指南 在调试一个边缘设备上的目标检测项目时&#xff0c;我打开终端敲下熟悉的命令&#xff1a; pip install ultralytics然后……盯着“Collecting ultralytics”这一行等了整整七分钟。 这不是第一次了。每次新环境搭…

作者头像 李华
网站建设 2026/4/13 9:27:58

为什么你的PHP接口总失败?解析区块链数据交互中的6大坑点

第一章&#xff1a;PHP接口与区块链数据交互的现状与挑战随着区块链技术在金融、供应链和数字身份等领域的广泛应用&#xff0c;传统后端系统与链上数据的对接需求日益增长。PHP作为广泛使用的服务端脚本语言&#xff0c;常被用于构建Web API接口&#xff0c;但在与区块链交互时…

作者头像 李华
网站建设 2026/4/15 18:32:59

YOLOv8商业授权问题解答:能否用于盈利项目?

YOLOv8商业授权问题解答&#xff1a;能否用于盈利项目&#xff1f; 在计算机视觉技术加速落地的今天&#xff0c;越来越多企业将目标检测模型集成到安防、制造、零售等业务系统中。YOLOv8 因其出色的性能和易用性&#xff0c;已成为不少团队的首选方案。但一个关键问题始终萦绕…

作者头像 李华