MINIPORT_SHUTDOWN回调函数 (ndis.h)
当系统关闭时,NDIS 调用微型端口驱动程序的 MiniportShutdownEx 函数。 此函数将微型端口置于关闭状态,其中无法发生其他回调(包括 MiniportHaltEx)。 有关微型端口驱动程序状态的详细信息,请参阅 微型端口适配器状态和作。
语法
MINIPORT_SHUTDOWN MiniportShutdown;
void MiniportShutdown(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}
参数
[in] MiniportAdapterContext
微型端口驱动程序在其 MiniportInitializeEx 函数中分配的上下文区域的句柄。 驱动程序使用此上下文区域来维护微型端口适配器的状态信息。
[in] ShutdownAction
NDIS 调用关闭函数的原因。 以下值有效:
NdisShutdownPowerOff
指示调用 MiniportShutdownEx 的 NDIS,因为系统正在关闭。
NdisShutdownBugCheck
指示由于系统错误,NDIS 调用 MiniportShutdownEx。
返回值
没有
言论
驱动程序在调用 时指定 MiniportShutdownEx 入口点 NdisMRegisterMiniportDriver 函数。
MiniportShutdownEx 将微型端口适配器还原到已知的初始状态(NDIS 之前的状态称为微型端口驱动程序的 MiniportInitializeEx 函数的微型端口适配器)。 这可确保微型端口适配器处于已知状态,并准备好在发生系统关闭后重启计算机时重新初始化,原因包括无法恢复的系统错误。
MiniportShutdownEx 可以通过调用 NdisMGetBusData 或 NdisMSetBusData 函数来读取或写入 I/O 端口、内存映射设备 I/O 空间或总线特定的配置空间,以禁用 DMA 引擎、禁用中断或将硬件重置为已知状态,以便安全重启硬件。
如果 NDIS 由于不可恢复错误而调用 MiniportShutdownEx,则 ShutdownAction 参数设置为 NdisShutdownBugCheck,并且 MiniportShutdownEx 在高 IRQL 上运行。 在这种情况下,微型端口驱动程序不得调用任何 NdisXxx 函数,但可以在任何 IRQL 中调用的函数除外。
如果 NDIS 由于用户启动的关闭而 MiniportShutdownEx 调用,MiniportShutdownEx 在 IRQL = PASSIVE_LEVEL 运行,微型端口驱动程序可以调用其他 NdisXxx 函数。
如果 NDIS 由于不可恢复错误而调用 MiniportShutdownEx,则 ShutdownAction 参数设置为 NdisShutdownBugCheck,并且 MiniportShutdownEx 在高 IRQL 上运行。 在这种情况下,微型端口驱动程序不得调用任何 NdisXxx 函数,但可以在任何 IRQL 中调用的函数除外。 从 NDIS 6.30 微型端口开始,NDIS 不会在 BugCheck 期间调用 MiniportShutdownEx,除非微型端口在其适配器注册属性中提供 NDIS_MINIPORT_ATTRIBUTES_REGISTER_BUGCHECK_CALLBACK 标志。
如果 ShutdownAction 的值 NdisShutdownPowerOff,则微型端口驱动程序可以选择释放其资源。 但是,这既不需要也不鼓励,因为系统关闭使它变得不必要的。
如果 ShutdownAction 的值 NdisShutdownBugCheck,则微型端口驱动程序不得释放其资源。
示例
若要定义 MiniportShutdownEx 函数,必须首先提供一个函数声明来标识要定义的函数的类型。 Windows 为驱动程序提供了一组函数类型。 使用函数类型声明函数有助于 驱动程序代码分析、静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。例如,若要定义名为“MyShutdownEx”的 MiniportShutdownEx 函数,请使用 MINIPORT_SHUTDOWN 类型,如以下代码示例所示:
MINIPORT_SHUTDOWN MyShutdownEx;
然后,按如下所示实现函数:
_Use_decl_annotations_
VOID
MyShutdownEx(
NDIS_HANDLE MiniportAdapterContext,
NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}
MINIPORT_SHUTDOWN 函数类型在 Ndis.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations 批注可确保使用应用于头文件中 MINIPORT_SHUTDOWN 函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 NDIS 驱动程序的函数角色类型声明函数。
有关 Use_decl_annotations的信息,请参阅 批注函数行为。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | NDIS 6.0 及更高版本中受支持。 |
目标平台 | 窗户 |
标头 | ndis.h (包括 Ndis.h) |
IRQL | 请参阅“备注”部分 |
另请参阅
微型端口驱动程序 的 适配器状态