news 2026/4/7 22:50:57

PipProcessDevNodeTree之状态DeviceNodeUninitialized下调用PiProcessNewDeviceNode建立DeviceNode->InstancePath

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PipProcessDevNodeTree之状态DeviceNodeUninitialized下调用PiProcessNewDeviceNode建立DeviceNode->InstancePath

nt!PipProcessDevNodeTree函数分析之状态DeviceNodeUninitialized下调用PiProcessNewDeviceNode建立DeviceNode->InstancePath

然后进入状态DeviceNodeInitialized


PipSetDevNodeState(DeviceNode, DeviceNodeInitialized, NULL);


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
)
{


switch (currentNode->State) {

case DeviceNodeUninitialized:

if (!ProcessOnlyIntermediateStates) {

if (currentNode->Parent == enumeratedBus && startRoot == NULL) {

startRoot = currentNode;
}
if((!ReallocateResources && EnumType == EnumTypeNone) || startRoot) {

status = PiProcessNewDeviceNode(currentNode);
if (NT_SUCCESS(status)) {

nextNode = SameNode;
}
}
}
break;


NTSTATUS
PiProcessNewDeviceNode(
IN PDEVICE_NODE DeviceNode
)
{

}
}
//
// Build the device instance path and create the instance key.
//
status = PiBuildDeviceNodeInstancePath(DeviceNode, busID, deviceID, instanceID);


。。。。。。


//
// ISSUE: Should not mark the state if the IDs were invalid.
//
PipSetDevNodeState(DeviceNode, DeviceNodeInitialized, NULL);

NTSTATUS
PiBuildDeviceNodeInstancePath(
IN PDEVICE_NODE DeviceNode,
IN PWCHAR BusID,
IN PWCHAR DeviceID,
IN PWCHAR InstanceID
)

/*++

Routine Description:

This function builds the instance path (BusID\DeviceID\InstanceID). If
successful, it will free the storage for any existing instance path and
replace with the new one.

Arguments:

DeviceNode - DeviceNode for which the instance path will be built.

BusID - Bus ID.

DeviceID - Device ID.

InstanceID - Instance ID.

Return Value:

NTSTATUS.

--*/

{
ULONG length;
PWCHAR instancePath;

PAGED_CODE();

if (BusID == NULL || DeviceID == NULL || InstanceID == NULL) {

ASSERT( PipIsDevNodeProblem(DeviceNode, CM_PROB_INVALID_DATA) ||
PipIsDevNodeProblem(DeviceNode, CM_PROB_OUT_OF_MEMORY) ||
PipIsDevNodeProblem(DeviceNode, CM_PROB_REGISTRY));

return STATUS_UNSUCCESSFUL;
}

length = (ULONG)((wcslen(BusID) + wcslen(DeviceID) + wcslen(InstanceID) + 2) * sizeof(WCHAR) + sizeof(UNICODE_NULL));
instancePath = (PWCHAR)ExAllocatePool(PagedPool | POOL_COLD_ALLOCATION, length);
if (!instancePath) {

return STATUS_INSUFFICIENT_RESOURCES;
}
//
// Construct the instance path as <BUS>\<DEVICE>\<INSTANCE>. This should always be NULL terminated
// since we have precomputed the length that we pass into this counted routine.
//
StringCbPrintfW(instancePath, length, L"%s\\%s\\%s", BusID, DeviceID, InstanceID);
//
// Free old instance path.
//
if (DeviceNode->InstancePath.Buffer != NULL) {

IopCleanupDeviceRegistryValues(&DeviceNode->InstancePath);
ExFreePool(DeviceNode->InstancePath.Buffer);
}

RtlInitUnicodeString(&DeviceNode->InstancePath, instancePath);

return STATUS_SUCCESS;

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

YOLOv8如何实现多类别目标同时检测?

YOLOv8如何实现多类别目标同时检测&#xff1f; 在智能安防摄像头自动识别闯入者的同时还能分辨出车辆、宠物甚至无人机&#xff1b;在工业质检线上&#xff0c;一个模型竟能同步检测螺丝松动、焊点虚接和外壳划痕——这些看似复杂的多任务场景&#xff0c;背后往往由同一个高效…

作者头像 李华
网站建设 2026/4/4 14:33:57

从零开始开发PHP插件:3个真实项目案例教你快速上手低代码生态

第一章&#xff1a;PHP低代码平台插件开发概述在现代Web应用开发中&#xff0c;PHP低代码平台通过可视化配置与模块化扩展显著提升了开发效率。插件机制作为其核心扩展方式&#xff0c;允许开发者在不修改主程序的前提下&#xff0c;动态增强平台功能。插件通常封装特定业务逻辑…

作者头像 李华
网站建设 2026/4/4 12:21:38

TechCrunch创业战场大赛消费和教育科技领域26强公司榜单

每年&#xff0c;TechCrunch创业战场创业大赛都会吸引数千名申请者。我们从这些申请中筛选出前200名竞争者&#xff0c;其中前20名将在大舞台上角逐冠军&#xff0c;获胜者将获得创业战场杯和10万美元的现金奖励。但其余180家初创公司同样在各自领域表现出色&#xff0c;在各自…

作者头像 李华
网站建设 2026/3/28 11:36:49

YOLOv8镜像内置Python 3.9环境配置说明

YOLOv8镜像内置Python 3.9环境配置说明 在智能监控、工业质检和自动驾驶等实际场景中&#xff0c;目标检测模型的快速部署能力直接决定了项目落地的效率。然而&#xff0c;许多开发者都曾经历过这样的困境&#xff1a;换一台机器就要重装一遍环境&#xff0c;pip install动不动…

作者头像 李华
网站建设 2026/3/26 22:58:21

YOLOv8在交通标志识别中的准确率测试

YOLOv8在交通标志识别中的准确率测试 在城市道路日益复杂、自动驾驶技术加速落地的今天&#xff0c;如何让车辆“看懂”交通标志&#xff0c;已成为智能驾驶系统必须跨越的一道门槛。限速、禁停、让行……这些看似简单的图形符号&#xff0c;背后却承载着关键的安全指令。然而&…

作者头像 李华
网站建设 2026/4/7 21:06:37

日志分析效率提升80%,PHP异常检测必备的3种高级模式识别技巧

第一章&#xff1a;PHP日志异常检测的核心价值与挑战在现代Web应用架构中&#xff0c;PHP作为长期占据主流地位的服务器端脚本语言&#xff0c;其运行时产生的日志数据是系统可观测性的关键组成部分。通过对PHP错误日志、访问日志以及自定义业务日志进行异常检测&#xff0c;开…

作者头像 李华