PROTOCOL_UNINSTALL回调函数 (ndis.h)

NDIS 调用协议驱动程序的 ProtocolUninstall 函数,以在卸载协议驱动程序之前执行清理操作。

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

语法

PROTOCOL_UNINSTALL ProtocolUninstall;

void ProtocolUninstall()
{...}

返回值

备注

ProtocolUninstall 函数是可选的。 协议驱动程序在 中为此函数注册了入口点(如果有) NDIS_PROTOCOL_DRIVER_CHARACTERISTICS 它传递给 的结构 NdisRegisterProtocolDriver 函数。

为了响应用户卸载协议驱动程序的请求,NDIS 调用协议驱动程序的 ProtocolUninstall 函数。 NDIS 在调用协议驱动程序的 后调用 ProtocolUninstall ProtocolUnbindAdapterEx 函数为每个绑定的适配器一次。

ProtocolUninstall 执行驱动程序确定的清理操作。 例如, ProtocolUninstall 可以请求客户端关闭协议驱动程序导出的设备对象的打开句柄。 在关闭所有此类句柄之前,I/O 管理器不会调用协议驱动程序在传递给其 DriverEntry 例程的驱动程序对象中注册的 Unload 例程。 关闭所有句柄后, ProtocolUninstall 可以调用 NdisDeregisterDeviceEx ,以删除协议驱动程序创建的任何设备对象。

中间驱动程序的协议下边缘可能需要 ProtocolUninstall 函数。 在 NDIS 调用其 MiniportDriverUnload 函数之前,中间驱动程序可以在 ProtocolUninstall 中释放其协议边缘资源。

NDIS 在 IRQL = PASSIVE_LEVEL 调用 ProtocolUninstall

示例

若要定义 ProtocolUninstall 函数,必须首先提供一个函数声明,用于标识要定义的函数类型。 Windows 为驱动程序提供了一组函数类型。 使用函数类型声明函数可帮助 驱动程序的代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是为 Windows 操作系统编写驱动程序的要求。

例如,若要定义名为“ MyUninstall”的 ProtocolUninstall 函数,请使用 PROTOCOL_UNINSTALL 类型,如以下代码示例所示:

PROTOCOL_UNINSTALL MyUninstall;

然后,按如下所示实现函数:

_Use_decl_annotations_
VOID
 MyUninstall(void)
  {...}

PROTOCOL_UNINSTALL函数类型在 Ndis.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations批注可确保使用应用于头文件中PROTOCOL_UNINSTALL函数类型的注释。 有关函数声明要求的详细信息,请参阅 使用 NDIS 驱动程序的函数角色类型声明函数

有关 Use_decl_annotations的信息,请参阅 批注函数行为

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 Windows
标头 ndis.h (包括 Ndis.h)
IRQL PASSIVE_LEVEL

另请参阅

DriverEntry

MiniportDriverUnload

NDIS_PROTOCOL_DRIVER_CHARACTERISTICS

NdisDeregisterDeviceEx

NdisRegisterProtocolDriver

ProtocolUnbindAdapterEx

Unload