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 管理器不会调用 Unload 例程,该例程是传递给其 DriverEntry 例程的驱动程序的驱动程序。 关闭所有句柄后,ProtocolUninstall 可以调用 NdisDeregisterDeviceEx 以删除协议驱动程序创建的任何设备对象。
中间驱动程序的协议下边缘可能需要 ProtocolUninstall 函数。 中间驱动程序可以在 ProtocolUninstall 中释放其协议边缘资源,然后 NDIS 调用其 MiniportDriverUnload 函数。
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 及更高版本中受支持。 |
目标平台 | 窗户 |
标头 | ndis.h (包括 Ndis.h) |
IRQL | PASSIVE_LEVEL |