news 2026/4/1 14:23:35

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/20 1:13:05

YOLOv8训练时如何使用EMA指数移动平均?

YOLOv8训练时如何使用EMA指数移动平均&#xff1f; 在深度学习模型的训练过程中&#xff0c;一个常见的挑战是&#xff1a;即使最终损失函数趋于收敛&#xff0c;验证指标&#xff08;如mAP&#xff09;仍可能出现剧烈波动。这种不稳定性不仅影响对模型真实性能的判断&#xf…

作者头像 李华
网站建设 2026/3/30 21:18:49

电子产品为什么要做FCC认证?

电子产品出口美国需要做FCC 认证&#xff0c;核心是满足美国联邦通信委员会&#xff08;FCC&#xff09;的法规要求&#xff0c;实现合法市场准入、管控电磁干扰、规避合规风险&#xff0c;具体原因如下&#xff1a;美国市场准入的强制性要求FCC 认证是电子产品进入美国市场的法…

作者头像 李华
网站建设 2026/3/27 20:32:23

蓝牙音箱CCC认证的申请流程是怎样的?

蓝牙音箱&#xff08;属 CCC 目录 0801 音视频设备类&#xff09;的 CCC 认证流程&#xff0c;按 “准入确认→申请受理→型式试验→工厂检查→合格评定→发证与维护” 闭环执行&#xff0c;通常可先发证后审厂&#xff08;获证后 3 个月内完成首次工厂检查&#xff09;&#x…

作者头像 李华
网站建设 2026/3/25 9:30:58

发现隐藏的Bug源头,PHP开发者必须掌握的7条日志分析法则

第一章&#xff1a;PHP日志分析的核心价值与挑战 在现代Web应用运维中&#xff0c;PHP日志是系统可观测性的重要组成部分。通过对访问日志、错误日志和调试信息的深入分析&#xff0c;开发与运维团队能够快速定位性能瓶颈、识别安全威胁并优化用户体验。 提升故障排查效率 PHP…

作者头像 李华
网站建设 2026/3/29 10:03:37

YOLOv8推理时如何过滤低质量检测结果?

YOLOv8推理时如何过滤低质量检测结果&#xff1f; 在实际部署目标检测模型的过程中&#xff0c;我们常常会遇到这样一个问题&#xff1a;明明模型在测试集上表现不错&#xff0c;但在真实场景中却频繁出现重复框、误检和模糊识别。尤其是在使用像YOLOv8这样高速且密集预测的模型…

作者头像 李华
网站建设 2026/3/29 2:36:05

YOLOv8训练时如何应对类别不平衡问题?

YOLOv8训练时如何应对类别不平衡问题&#xff1f; 在工业质检线上&#xff0c;一台AI模型每天要检查数万件产品——绝大多数是合格品&#xff0c;而真正需要报警的“裂纹”或“气泡”缺陷可能一年也只出现几次。这种极端的数据分布让许多看似高精度的检测系统在关键时刻“视而不…

作者头像 李华