MINIPORT_SHUTDOWN回调函数 (ndis.h)

当系统关闭时,NDIS 调用微型端口驱动程序的 MiniportShutdownEx 函数。 此函数将微型端口置于“关闭”状态, (包括 MiniportHaltEx) ,不会发生任何其他回调。 有关微型端口驱动程序状态的详细信息,请参阅 微型端口适配器状态和操作

注意 必须使用 MINIPORT_SHUTDOWN 类型声明函数。 有关详细信息,请参阅以下示例部分。
 

语法

MINIPORT_SHUTDOWN MiniportShutdown;

void MiniportShutdown(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}

参数

[in] MiniportAdapterContext

微型端口驱动程序在其 MiniportInitializeEx 函数中分配的上下文区域的句柄。 驱动程序使用此上下文区域来维护微型端口适配器的状态信息。

[in] ShutdownAction

NDIS 调用关闭函数的原因。 以下为有效值:

NdisShutdownPowerOff

指示 NDIS 名为 MiniportShutdownEx ,因为系统正在关闭。

NdisShutdownBugCheck

指示由于系统错误,NDIS 名为 MiniportShutdownEx

返回值

备注

驱动程序在调用 时指定 MiniportShutdownEx 入口点 NdisMRegisterMiniportDriver 函数。

MiniportShutdownEx 在 NDIS 为微型端口适配器调用微型端口驱动程序的 MiniportInitializeEx 函数之前, (状态将微型端口适配器还原到已知的初始状态) 。 这可确保微型端口适配器处于已知状态,并且可在计算机因任何原因(包括不可恢复的系统错误)发生系统关闭后重启计算机时重新初始化。

MiniportShutdownEx 可以读取或写入 I/O 端口、内存映射设备 I/O 空间或特定于总线的配置空间,方法是调用 NdisMGetBusDataNdisMSetBusData 函数来禁用 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,则微型端口驱动程序不得释放其资源。

重要 如果 MiniportHaltEx 导致系统错误,微型端口驱动程序将看到对 MiniportShutdownEx 的嵌套调用,其中包含 ShutdownActionNdisShutdownBugCheck。 在这种情况下, MiniportShutdownEx 应立即返回而不执行任何工作。

 

示例

若要定义 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 及更高版本中受支持。
目标平台 Windows
标头 ndis.h (包括 Ndis.h)
IRQL 请参阅“备注”部分

另请参阅

微型端口驱动程序的适配器状态

微型端口适配器关闭

微型端口适配器状态和操作

MiniportInitializeEx

NdisMGetBusData

NdisMRegisterMiniportDriver

NdisMSetBusData