MINIPORT_SYNCHRONIZE_INTERRUPT回调函数 (ndis.h)

如果以低于 DIRQL 的速度运行的任何驱动程序函数与 MiniportInterrupt 函数共享资源,微型端口驱动程序必须提供 MiniportSynchronizeInterrupt 处理程序。

对于消息信号中断,如果以低于 DIRQL 运行的任何驱动程序函数与 MiniportMessageInterrupt 函数共享消息信号中断的资源,微型端口驱动程序会提供 MiniportSynchronizeMessageInterrupt 处理程序。

注意 对于非消息信号中断,必须使用 MINIPORT_SYNCHRONIZE_INTERRUPT 类型,或者对消息信号中断使用 MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 类型来声明此函数。 有关详细信息,请参阅以下示例部分。
 

语法

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

参数

[in] SynchronizeContext

当微型端口驱动程序的 MiniportXxx 或内部函数调用 时提供的上下文区域的句柄 NdisMSynchronizeWithInterruptEx 函数。

返回值

MiniportSynchronizeInterrupt 返回具有驱动程序确定含义的布尔值。 当 NDIS 从 NdisMSynchronizeWithInterruptEx 返回时,NDIS 返回相同的值。

注解

注意 本部分中的信息还可以应用于消息信号中断,方法是将“MiniportInterrupt”替换为“MiniportMessageInterrupt”,将“MiniportSynchronizeInterrupt”替换为“MiniportSynchronizeMessageInterrupt”。
 
如果任何运行速度小于 DIRQL 的微型端口驱动程序函数与驱动程序的 MiniportInterrupt 函数共享资源(如 NIC),则驱动程序无法直接访问这些资源。 如果此类低优先级函数尝试直接访问共享资源,则 MiniportInterrupt 可能会抢占该函数,这可能会替代低优先级驱动程序函数的状态更改。

若要使用 MiniportInterrupt 同步对共享资源的访问,低优先级驱动程序函数必须调用 NdisMSynchronizeWithInterruptEx 函数。 驱动程序的 MiniportSynchronizeInterrupt 函数访问 DIRQL 上的共享资源。 调用 NdisMSynchronizeWithInterruptEx 可防止此类微型端口驱动程序中的争用条件和死锁。

任何在它们之间共享资源的较低优先级驱动程序函数 (但不与在 DIRQL) 上运行的任何函数共享资源,都应使用旋转锁来保护这些共享资源。

MiniportSynchronizeInterrupt 在驱动程序的 MiniportInitializeEx 函数调用 时分配的 DIRQL 上运行 NdisMRegisterInterruptEx 函数。 与在 DIRQL 中运行的任何驱动程序函数一样, MiniportSynchronizeInterrupt 应尽快将控制权返回给调用方,并且它只能调用可在任何 IRQL 中安全调用的 NdisXxx 函数。

示例

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

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

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

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

_Use_decl_annotations_
BOOLEAN
 MySynchronizeInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

若要为消息信号中断定义 MiniportSynchronizeMessageInterrupt 函数,请使用 MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 类型,如以下代码示例所示:

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

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

_Use_decl_annotations_
BOOLEAN
 MySynchronizeMessageInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

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

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

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 Windows
标头 ndis.h (包括 Ndis.h)
IRQL 请参阅“备注”部分

另请参阅

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx