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

指示调用 MiniportShutdownEx 的 NDIS,因为系统正在关闭。

NdisShutdownBugCheck

指示由于系统错误,NDIS 调用 MiniportShutdownEx

返回值

没有

言论

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

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

MiniportShutdownEx 可以通过调用 NdisMGetBusDataNdisMSetBusData 函数来读取或写入 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,则微型端口驱动程序不得释放其资源。

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

另请参阅

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

微型端口适配器关闭

微型端口适配器状态和作

MiniportInitializeEx

NdisMGetBusData

NdisMRegisterMiniportDriver

NdisMSetBusData