news 2026/3/26 18:31:23

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/3/25 17:18:40

YOLOv8推理时如何实现动态批处理?

YOLOv8推理时如何实现动态批处理&#xff1f; 在智能监控系统中&#xff0c;成百上千路摄像头同时上传视频帧&#xff0c;服务器该如何应对&#xff1f;如果每来一个请求就立即执行一次推理&#xff0c;GPU可能只用了20%的算力就在等待下一个任务——这种“小马拉大车”的窘境&…

作者头像 李华
网站建设 2026/3/25 8:39:49

分库分表适配难?资深架构师亲授PHP环境下10年沉淀的落地经验

第一章&#xff1a;分库分表的核心挑战与PHP环境适配困境在高并发、大数据量的现代Web应用中&#xff0c;单一数据库已难以承载业务增长的压力。分库分表作为提升数据库横向扩展能力的重要手段&#xff0c;被广泛应用于大型系统架构中。然而&#xff0c;在PHP这一广泛用于Web开…

作者头像 李华
网站建设 2026/3/26 7:42:13

手把手教你用PHP打造工业级视频流处理引擎,99%的人都不知道的底层逻辑

第一章&#xff1a;工业级视频流处理引擎的核心认知在现代多媒体应用中&#xff0c;工业级视频流处理引擎是支撑实时通信、智能监控、直播平台等高并发场景的底层基石。这类系统不仅要求极低的延迟和高吞吐能力&#xff0c;还需具备弹性扩展、容错恢复和协议兼容性等关键特性。…

作者头像 李华
网站建设 2026/3/24 8:48:35

PHP日志解析自动化实践(基于ELK+机器学习的异常检测架构)

第一章&#xff1a;PHP日志解析自动化实践概述在现代Web应用运维中&#xff0c;PHP日志是诊断系统异常、追踪用户行为和优化性能的重要数据源。随着系统规模扩大&#xff0c;手动查看和分析日志已无法满足实时性和效率需求&#xff0c;因此实现日志解析的自动化成为关键实践。自…

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

YOLOv8模型加密保护方案探讨

YOLOv8模型加密保护方案探讨 在智能安防、工业质检和自动驾驶等场景中&#xff0c;YOLOv8已成为部署实时目标检测任务的首选工具。其开箱即用的Docker镜像极大提升了团队协作与交付效率——几分钟内就能拉起一个预装PyTorch、Ultralytics库和示例模型的完整环境。但这种便利性…

作者头像 李华