其他规则集 (NDIS)

使用这些规则验证驱动程序是否正确遵循一组常规要求,以便正确处理计时器、暂停操作、键、字符串和绑定。

在本节中

主题 说明

CancelTimerObject

CancelTimerObject 规则指定按备用顺序调用 NdisSetTimerObjectNdisCancelTimerObject。 最终目标是确保在 MiniportHaltEx 结束时取消所有计时器。

MiniportPause_Return

MiniportPause_Return规则指定在暂停操作完成时,MiniportPause 回调函数应仅返回NDIS_STATUS_SUCCESS;如果微型端口驱动程序处于暂停状态,则NDIS_STATUS_PENDING。 任何其他返回的状态均无效。

NdisOpenConfigurationEx

此规则检查是否按备用顺序调用 NdisOpenConfigurationExNdisCloseConfiguration 。 最终目标是确保在 MiniportHaltEx 退出时关闭配置句柄

NdisQueryBindInstanceName

NdisQueryBindInstanceName 为指定友好名称的字符串分配内存。 调用方完成使用此内存后,调用方必须调用 NdisFreeMemory 函数来释放内存。

NdisReEnumerateProtocolBindings

协议驱动程序无法从 ProtocolBindAdapterEx 或 ProtocolUnbindAdapterEx 函数的上下文中调用 NdisReEnumerateProtocolBindings 此外,如果 ProtocolNetPnPEvent 的 ProtocolBindingContext 参数不为 NULL,协议驱动程序无法从 ProtocolNetPnPEvent 函数的上下文中调用 NdisReEnumerateProtocolBindings 但是,如果 ProtocolBindingContext 为 NULL,协议驱动程序可以从 ProtocolNetPnPEvent 上下文中调用 NdisReEnumerateProtocolBindings NULL ProtocolBindingContext 值指示事件应用于所有绑定。

PeriodicTimer

PeriodicTimer 规则指定,如果在 NdisSetTimerObject 函数的 MillisecondsPeriod 参数中指定了非零值,则 NdisCancelTimerObject 的调用方必须在 IRQL = PASSIVE_LEVEL 运行。 如果 NdisSetTimerObject 函数的 MillisecondsPeriod 参数为零,则 NdisCancelTimerObject 的调用方可以在 IRQL <= DISPATCH_LEVEL 运行。

WriteErrorLog

WriteErrorLog 规则指定,如果在 MiniportInitializeEx 函数中调用 NdisMAllocateSharedMemory 函数,则在分配失败时,驱动程序还应调用 NdisWriteErrorLogEntry

选择“杂项”规则集

  1. 在 Microsoft Visual Studio 中选择驱动程序项目 (.vcxProj) 。 在“ 驱动程序 ”菜单中,单击“ 启动静态驱动程序验证程序...”

  2. 单击“ 规则 ”选项卡。在 “规则集”下,选择“ 杂项”。

    若要从 Visual Studio 开发人员命令提示符窗口中选择默认规则集,请使用 /检查 选项指定 Miscellaneous.sdv。 例如:

    msbuild /t:sdv /p:Inputs="/check:Miscellaneous.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    有关详细信息,请参阅 使用静态驱动程序验证程序查找驱动程序中的缺陷静态驱动程序验证程序命令 (MSBuild)