PROTOCOL_UNINSTALL回调函数 (ndis.h)
NDIS 调用协议驱动程序的 ProtocolUninstall 函数,以在卸载协议驱动程序之前执行清理操作。
语法
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 |