错误检查 0xC9:DRIVER_VERIFIER_IOMANAGER_VIOLATION

DRIVER_VERIFIER_IOMANAGER_VIOLATION 错误检查的值为 0x000000C9。 这是所有驱动程序验证程序 I/O 验证违规的错误检查代码。

重要

这篇文章适合程序员阅读。 如果你是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答

DRIVER_VERIFIER_IOMANAGER_VIOLATION 参数

当驱动程序验证程序处于活动状态并且选择了 I/O 验证时,各种 I/O 冲突将导致发出此错误检查。 参数 1 可确定违规类型。

参数 1 参数 2 参数 3 参数 4 错误消息的原因

0x01

正在释放的 IRP 地址

0

0

驱动程序试图释放类型不是 IO_TYPE_IRP 的对象。

0x02

正在释放的 IRP 地址

0

0

驱动程序试图释放仍与线程关联的 IRP。

0x03

要发送的 IRP 地址

0

0

驱动程序传递给 IoCallDriver 的 IRP 类型不等于 IRP_TYPE。

0x04

设备对象的地址

0

0

驱动程序向 IoCallDriver 传递了一个无效的设备对象。

0x05

与有问题的驱动程序关联的设备对象的地址

IoCallDriver 之前的 IRQL

IoCallDriver 之后的 IRQL

在调用驱动程序调度例程的过程中,IRQL 发生了变化。

0x06

IRP 状态

IRP 的地址正在填写中

0

驱动程序调用 IoCompleteRequest,状态标记为挂起(或等于 -1)。

0x07

取消例程的地址

IRP 的地址正在填写中

0

驱动程序调用 IoCompleteRequest,而其取消例程仍在设置中。

0x08

设备对象的地址

IRP 主要函数代码

异常状态代码

驱动程序向 IoBuildAsynchronousFsdRequest 传递了一个无效的缓冲区。

0x09

设备对象的地址

I/O 控制代码

异常状态代码

驱动程序向 IoBuildDeviceIoControlRequest 传递了一个无效的缓冲区。

0x10

当前 IRQL

Reserved

保留

在 DISPATCH_LEVEL 之上调用了 IoCallDriver。

0x11

驱动程序快速 I/O 调度例程地址

调用驱动程序调度例程之前的 IRQL

当前 IRQL

在 DISPATCH_LEVEL 之上调用了 IoCallDriver。

0x12

驱动程序调度例程地址

调用驱动程序调度例程之前的 IRQL

当前 IRQL

在 DISPATCH_LEVEL 之上调用了 IoCallDriver。

0x0A

设备对象的地址

0

0

驱动程序向 IoInitializeTimer 传递了一个具有已初始化计时器的设备对象。

0x0C

I/O 状态块的地址

0

0

驱动程序将 I/O 状态块传递给 IRP,但该块是在已经展开超过该点的堆栈上分配的。

0x0D

用户事件对象的地址

0

0

驱动程序向 IRP 传递了一个用户事件,但该事件是在已经展开超过该点的堆栈上分配的。

0x0E

当前 IRQL

IRP 的地址

0

驱动程序使用 IRQL > DISPATCH_LEVEL 调用 IoCompleteRequest

0x0F

IRP 发送到的设备对象的地址

指向 IRP 的指针

指向文件对象的指针

驱动程序发送了一个创建请求,其中包含一个已关闭或已取消打开的文件对象。

除了上表中提到的错误外,还有许多 I/O 验证错误会导致驱动程序验证程序停止系统,但这些错误实际上不是错误检查。

这些错误导致消息显示在蓝屏、崩溃转储文件中和内核调试器中。 这些消息在每个位置的显示方式都不同。 当出现这些错误时,十六进制错误检查代码 0xC9 和错误检查字符串 DRIVER_VERIFIER_IOMANAGER_VIOLATION 不会出现在蓝屏或调试器中,尽管它们会出现在崩溃转储文件中。

在蓝屏上,将显示以下数据:

  • 消息 IO 系统验证错误

  • 消息 WDM DRIVER ERROR XXX,其中 XXX 是表示特定错误的十六进制代码。 (有关 I/O 错误代码及其含义的列表,请参阅下表。)

  • 导致错误的驱动程序的名称。

  • 通常,驱动程序代码中检测到错误的地址(参数 2)。

如果已启用内核模式崩溃转储,则崩溃转储文件中将显示以下信息:

  • 消息错误检查 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION)

  • 十六进制 I/O 错误代码。 (有关 I/O 错误代码及其含义的列表,请参阅下表。)

  • 通常,驱动程序代码中检测到错误的地址(参数 2)。

如果内核调试器附加到导致此冲突的系统,则会将以下信息发送到调试器:

  • 消息 WDM DRIVER ERROR 以及对错误严重性的评估。

  • 导致错误的驱动程序的名称。

  • 说明此错误的原因的描述性字符串。 通常传递其他信息,例如指向 IRP 的指针或指向设备对象或 IRQL 信息的指针。 (有关这些描述性字符串的列表以及指定了哪些附加信息,请参阅下表。)

  • 要求进一步操作的查询。 可能的响应为 b(中断)、i(忽略)、z(清除)、r(移除)或 d(禁用)。 指示操作系统继续,可以让你看到如果没有发生此错误,“接下来”会发生什么。 当然,这通常会导致其他错误检查。 “zap”选项实际上会删除导致发现此错误的断点。

注意 不能以这种方式忽略任何其他错误检查。 只有此类 I/O 验证 错误可以忽略,但是这些错误也只能在附加了内核调试器的情况下被忽略。

下表列出了可能出现的 I/O 验证错误。

I/O 错误代码 严重性 错误消息的原因

0x200

未知

此代码涵盖所有未知 I/O 验证错误。

0x201

严重错误

一个设备正在删除它自己,而驱动程序堆栈中它下面还有另一个设备。 这可能是因为调用方忘记先调用 IoDetachDevice,或者较低的驱动程序可能错误地删除了自己。

参数2 - 检测到错误的驱动程序代码中的地址。

0x202

严重错误

驱动程序试图从未附加到任何内容的设备对象分离。 如果在同一设备对象上调用了两次分离,则可能会发生这种情况。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - 设备对象地址。

0x203

严重错误

驱动程序调用了 IoCallDriver,但没有将 IRP 中的取消例程设置为 NULL

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x204

严重错误

调用方已将 NULL 作为设备对象传入。 这是严重错误。

参数 2 - 保留

参数 3 - 保留

0x205

严重错误

调用方正在转发当前在其下面排队的 IRP。 此驱动程序中返回 STATUS_PENDING 的代码处理 IRP 似乎已损坏。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x206

严重错误

调用方错误地转发了 IRP(控制字段未归零)。 驱动程序应使用 IoCopyCurrentIrpStackLocationToNextIoSkipCurrentIrpStackLocation

参数 2 - 保留

参数 3 - 保留

0x207

严重错误

调用方手动复制了堆栈,并无意中复制了上层的完成例程。 驱动程序应使用 IoCopyCurrentIrpStackLocationToNext

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x208

严重错误

此 IRP 即将用完堆栈位置。 可能有人从另一个堆栈转发了此 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x209

严重错误

调用方正在完成当前在其下面排队的 IRP。 此驱动程序中返回 STATUS_PENDING 的代码处理 IRP 似乎已损坏。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x20A

严重错误

IoFreeIrp 的调用方正在释放仍在使用的 IRP。

参数 2 - 保留

参数 3 - 保留

0x20B

严重错误

IoFreeIrp 的调用方正在释放仍在使用的 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x20C

严重错误

IoFreeIrp 的调用方正在释放仍在针对线程排队的 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x20D

严重错误

IoInitializeIrp 的调用方传递了一个由 IoAllocateIrp 分配的 IRP。 这既是非法行为,也是不必要的行为,并已导致配额泄漏。 如果回收了此 IRP,请查看 IoReuseIrp 的文档。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x20E

非严重错误

PNP IRP 的状态无效。 (任何 PNP IRP 都必须将其状态初始化为 STATUS_NOT_SUPPORTED。)

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x20F

非严重错误

Power IRP 的状态无效。 (任何 Power IRP 都必须将其状态初始化为 STATUS_NOT_SUPPORTED。)

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x210

非严重错误

WMI IRP 的状态无效。 (任何 WMI IRP 都必须将其状态初始化为 STATUS_NOT_SUPPORTED。)

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x211

非严重错误

调用方在跳过堆栈中的设备对象时转发了一个 IRP。 调用方可能会将 IRP 发送到 PDO,而不是发送到 IoAttachDeviceToDeviceStack返回的设备。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x212

非严重错误

调用方已经销毁了 IRP 的堆栈,或者没有正确地复制 IRP 的堆栈。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x213

非严重错误

调用方更改了它不理解的 IRP 的状态字段。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x214

非严重错误

调用方更改了它不理解的 IRP 的信息字段。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x215

非严重错误

IRP_MJ_PNP 的非成功非 STATUS_NOT_SUPPORTED IRP 状态正在向下传递堆栈。 必须完成失败的 PNP IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x216

非严重错误

以前设置的 IRP_MJ_PNP 状态已转换为 STATUS_NOT_SUPPORTE。 此故障状态保留供操作系统使用。 驱动程序不能使具有此值的 PnP IRP 失败。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x217

非严重错误

驱动程序未处理所需的 IRP。 驱动程序必须更新 IRP 的状态,以指示是否已对其进行了处理。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x218

非严重错误

驱动程序已响应为堆栈中其他位置的其他设备对象保留的 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x219

非严重错误

IRP_MJ_POWER 的非成功非 STATUS_NOT_SUPPORTED IRP 状态正在向下传递堆栈。 必须完成失败的 POWER IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x21A

非严重错误

以前设置 IRP_MJ_POWER 状态已转换为 STATUS_NOT_SUPPORTED。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x21B

非严重错误

驱动程序已返回可疑状态。 这可能是由于驱动程序中存在未初始化的变量错误。

参数 3 - IRP 地址。

0x21C

警告

调用方已复制 IRP 堆栈,但未设置完成例程。 效率低下 -- 请改用 IoSkipCurrentIrpStackLocation

参数 2 - 保留

参数 3 - 保留

0x21D

严重错误

IRP 调度处理程序在接收到删除 IRP 后,没有正确地从其下面的堆栈分离。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x21E

严重错误

IRP 调度处理程序在接收到删除 IRP 时未正确删除其设备对象。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x21F

非严重错误

驱动程序尚未为所需的 IRP 主函数填写调度例程。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x220

非严重错误

IRP_MJ_SYSTEM_CONTROL 已由 ProviderId 以外的其他人完成。 该 IRP 应提前完成,或者应予以传递。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - ProviderId。

0x221

严重错误

PDO 的 IRP 调度处理程序已删除其设备对象,但在总线关系查询中未报告硬件丢失。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x222

严重错误

当 PDO 仍然处于活动状态时,总线筛选器的 IRP 调度处理程序在收到删除 IRP 时已分离。 总线筛选器必须在 FastIoDetach 回调中清理。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x223

严重错误

总线筛选器的 IRP 调度处理程序已删除其设备对象,但 PDO 仍然存在。 总线筛选器必须在 FastIoDetach 回调中清理。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x224

严重错误

IRP 调度处理程序返回的状态与 IRP 的 IoStatus.Status 不一致。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 预期状态代码。

0x225

非严重错误

IRP 调度处理程序返回了非法状态 (0xFFFFFFFF)。 这可能是由于未初始化的堆栈变量造成的。 若要调试此错误,请使用具有指定地址的 ln(列出最近符)命令。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 状态代码。

0x226

严重错误

IRP 调度处理程序返回时没有传递或完成此 IRP,或者有人忘记返回 STATUS_PENDING。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x227

严重错误

IRP 完成例程是可分页代码。 (绝对不允许。)

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x228

非严重错误

如果传递给驱动程序的 IRP 中设置了 PendingReturned 字段,则驱动程序的完成例程没有将 IRP 标记为挂起。 这可能会导致 Windows 挂起,尤其是当堆栈返回错误时。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x229

严重错误

已经为 IRP 设置了一个取消例程,该 IRP 当前正由堆栈中较低的驱动程序处理,可能会破坏取消例程。

参数 2 - 保留。

参数 3 - 保留。

0x22A

非严重错误

物理设备对象 (PDO) 尚未响应所需的 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x22B

非严重错误

物理设备对象 (PDO) 忘记使用 TargetDeviceRelation 查询的 PDO 填写设备关系列表。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x22C

严重错误

实现 TargetDeviceRelation 查询的代码未在 PDO 上调用 ObReferenceObject

参数 2 - 保留。

参数 3 - 保留。

0x22D

非严重错误

调用方完成了一个它不理解的 IRP_MJ_PNP,而不是向下传递。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x22E

非严重错误

调用方已成功完成 IRP_MJ_PNP,而不是将其向下传递。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x22F

非严重错误

调用方已完成未更改的 IRP_MJ_PNP(而不是向下传递 IRP),或者非 PDO 使用 STATUS_NOT_SUPPORTED 的非法值使 IRP 失败。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x230

非严重错误

调用方完成了一个它不理解的 IRP_MJ_POWER,而不是将其传递下去。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x231

严重错误

调用方已成功完成 IRP_MJ_POWER,而不是将其向下传递。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x232

非严重错误

调用方已完成未更改的 IRP_MJ_POWER(而不是向下传递 IRP),或者非 PDO 使用 STATUS_NOT_SUPPORTED 的非法值使 IRP 失败。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x233

非严重错误

查询功能 IRP 中查询功能结构的版本字段未正确初始化。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x234

非严重错误

查询功能 IRP 中查询功能结构的大小字段未正确初始化。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x235

非严重错误

查询功能 IRP 中查询功能结构的地址字段未正确初始化为 -1。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x236

非严重错误

查询功能 IRP 中查询功能结构的 UI 编号字段未正确初始化为 -1。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x237

严重错误

一个驱动程序发送了一个 IRP,该 IRP 仅限于系统使用。

参数 2 - 保留。

参数 3 - 保留。

0x238

警告

IoInitializeIrp 的调用方传递了一个由 IoAllocateIrp 分配的 IRP。 这既是非法行为,也是不必要的行为,并且会对正常使用中的性能产生负面影响。 如果回收了此 IRP,请参阅 Windows 驱动程序工具包中的 IoReuseIrp

参数 2 - 保留。

参数 3 - 保留。

0x239

警告

IoCompleteRequest 的调用方正在完成一个 IRP,该 IRP 从未通过调用转发到 IoCallDriverPoCallDriver。 这可能是一个错误。

参数 2 - 保留。

参数 3 - 保留。

0x23A

严重错误

一个驱动程序在一个 IRQL 转发了一个 IRP,这对于这个主要代码来说是非法的。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x23B

非严重错误

调用方更改了它不理解的 IRP 的状态字段。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

下表列出了可能出现的其他 I/O 验证错误。 当增强型 I/O 验证被激活时,会出现这些错误。 有关详细信息,请参阅增强型 I/O 验证

I/O 错误代码 严重性 错误消息的原因

0x23C

严重错误

驱动程序已完成 IRP,但未将 IRP 中的取消例程设置为 NULL

参数 2 - 保留。

参数 3 - 保留。

0x23D

非严重错误

驱动程序已返回 STATUS_PENDING,但未通过调用 IoMarkIrpPending 将 IRP 标记为挂起。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 状态代码。

0x23E

非严重错误

驱动程序已将 IRP 标记为挂起,但未返回 STATUS_PENDING。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 状态代码。

0x23F

严重错误

驱动程序没有从其附加的堆栈中继承 DO_POWER_PAGABLE 位。

参数 2 - 保留。

参数 3 - 保留。

0x240

严重错误

驱动程序正试图删除一个设备对象,该对象已通过之前对 IoDeleteDevice 的调用删除。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 2 - 保留。

参数 3 - 保留。

0x241

严重错误

驱动程序在意外删除 IRP 期间分离了其设备对象。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x242

严重错误

驱动程序在意外删除 IRP 期间删除了其设备对象。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x243

严重错误

驱动程序无法清除 AddDevice 末尾的 DO_DEVICE_INITIALIZING 标志。

参数 2 - 保留。

参数 3 - 保留。

参数 4 -

0x244

严重错误

驱动程序未从其所连接的设备对象复制 DO_BUFFERED_IO 或 DO_DIRECT_IO 标志。

参数 2 - 保留。

参数 3 - 保留。

0x245

严重错误

驱动程序已设置 DO_BUFFERED_IO 和 DO_DIRECT_IO 标志。 这些标记互相排斥。

参数 2 - 保留。

参数 3 - 保留。

0x246

严重错误

驱动程序无法从附加到的设备对象复制 DeviceType 字段。

参数 2 - 保留。

参数 3 - 保留。

0x247

严重错误

参数 2 - 保留。

参数 3 - 保留。

某个驱动程序未通过 IRP,而该 IRP 不合法。

0x248

严重错误

驱动程序已将非 PDO 的设备对象添加到设备关系查询中。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x249

非严重错误

驱动程序已枚举两个子 PDO,它们返回相同的设备 ID。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - 第一个设备对象地址。

参数 4 - 第二个设备对象地址。

0x24A

严重错误

驱动程序错误地调用了 IRQL 不等于 PASSIVE_LEVEL 的文件 I/O 函数。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - 保留。

参数 4 - 保留。

0x24B

严重错误

驱动程序已完成 TargetDeviceRelation 类型的 IRP_MN_QUERY_DEVICE_RELATIONS 请求,但未正确填写请求或将 IRP 转发到基础硬件堆栈。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - 设备对象地址。

0x24C

非严重错误

驱动程序已返回 STATUS_PENDING,但未通过调用 IoMarkIrpPending 将 IRP 标记为挂起。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 状态代码。

0x24D

严重错误

驱动程序已将无效的设备对象传递给需要 PDO 的函数。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 设备对象地址。

0x300

非严重错误

驱动程序已返回可疑状态。 这可能是由于驱动程序中存在未初始化的变量错误。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - 可疑状态代码。

0x301

非严重错误

驱动程序已在 IRQL > DISPATCH_LEVEL 转发了 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - IRQL 值不正确

0x302

非严重错误

驱动程序已在 IRQL > = APC_LEVEL 转发 IRP。

I/O 管理器将需要对 APC 进行排队以完成此请求。 APC 将无法运行,因为调用方已在 APC 级别,因此调用方可能会死锁。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

参数 4 - IRQL 值不正确。

0x306

非严重错误

驱动程序正在完成 IRP_MJ_PNP(主要)和 IRP_MN_REMOVE_DEVICE(次要)请求,请求中包含故障状态代码。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x307

非严重错误

驱动程序发出了一个 I/O 请求,其中包含一个已经发出信号的事件,并接收到 STATUS_PENDING 响应。 这可能会导致在 I/O 完成之前展开。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x310

非严重错误

驱动程序正在重新初始化仍在使用的 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x311

非严重错误

驱动程序正在重新初始化使用 IoMakeAssociatedIrp、IoBuildAsynchronousFsdRequest、IoBuildSynchronousFsdRequest、IoBuildDeviceIoControlRequest 创建的 IRP。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

0x312

非严重错误

调用方为 IRP 状态信息字段提供的值大于系统缓冲区的输出部分。

参数2 - 检测到错误的驱动程序代码中的地址。

参数 3 - IRP 地址。

原因

有关原因的说明,请参阅“参数”章节中每个代码的说明。

解决方法

只有当驱动程序验证程序被指示监视一个或多个驱动程序时,才能进行此错误检查。 如果不打算使用驱动程序验证程序,则应将其停用。 有关详细信息,请参阅驱动程序验证程序中的“如何控制驱动程序验证程序”。 还可以考虑更新或删除导致此问题的驱动程序。

如果你是驱动程序开发人员,请使用通过此错误检查获得的信息来修复代码中的错误。

有关驱动程序验证程序的完整详细信息,请参阅驱动程序验证程序