其他规则集 (NDIS)
使用这些规则验证驱动程序是否正确遵循一组常规要求,以便正确处理计时器、暂停操作、键、字符串和绑定。
在本节中
主题 | 说明 |
---|---|
CancelTimerObject 规则指定按备用顺序调用 NdisSetTimerObject 和 NdisCancelTimerObject。 最终目标是确保在 MiniportHaltEx 结束时取消所有计时器。 |
|
MiniportPause_Return规则指定在暂停操作完成时,MiniportPause 回调函数应仅返回NDIS_STATUS_SUCCESS;如果微型端口驱动程序处于暂停状态,则NDIS_STATUS_PENDING。 任何其他返回的状态均无效。 |
|
此规则检查是否按备用顺序调用 NdisOpenConfigurationEx 和 NdisCloseConfiguration 。 最终目标是确保在 MiniportHaltEx 退出时关闭配置句柄 |
|
NdisQueryBindInstanceName 为指定友好名称的字符串分配内存。 调用方完成使用此内存后,调用方必须调用 NdisFreeMemory 函数来释放内存。 |
|
协议驱动程序无法从 ProtocolBindAdapterEx 或 ProtocolUnbindAdapterEx 函数的上下文中调用 NdisReEnumerateProtocolBindings。 此外,如果 ProtocolNetPnPEvent 的 ProtocolBindingContext 参数不为 NULL,协议驱动程序无法从 ProtocolNetPnPEvent 函数的上下文中调用 NdisReEnumerateProtocolBindings。 但是,如果 ProtocolBindingContext 为 NULL,协议驱动程序可以从 ProtocolNetPnPEvent 上下文中调用 NdisReEnumerateProtocolBindings。 NULL ProtocolBindingContext 值指示事件应用于所有绑定。 |
|
PeriodicTimer 规则指定,如果在 NdisSetTimerObject 函数的 MillisecondsPeriod 参数中指定了非零值,则 NdisCancelTimerObject 的调用方必须在 IRQL = PASSIVE_LEVEL 运行。 如果 NdisSetTimerObject 函数的 MillisecondsPeriod 参数为零,则 NdisCancelTimerObject 的调用方可以在 IRQL <= DISPATCH_LEVEL 运行。 |
|
WriteErrorLog 规则指定,如果在 MiniportInitializeEx 函数中调用 NdisMAllocateSharedMemory 函数,则在分配失败时,驱动程序还应调用 NdisWriteErrorLogEntry。 |
选择“杂项”规则集
在 Microsoft Visual Studio 中选择驱动程序项目 (.vcxProj) 。 在“ 驱动程序 ”菜单中,单击“ 启动静态驱动程序验证程序...”。
单击“ 规则 ”选项卡。在 “规则集”下,选择“ 杂项”。
若要从 Visual Studio 开发人员命令提示符窗口中选择默认规则集,请使用 /检查 选项指定 Miscellaneous.sdv。 例如:
msbuild /t:sdv /p:Inputs="/check:Miscellaneous.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
有关详细信息,请参阅 使用静态驱动程序验证程序查找驱动程序中的缺陷 和 静态驱动程序验证程序命令 (MSBuild) 。