GPIO_CLX_AcquireInterruptLock 方法获取常规用途 I/O(GPIO) 控制器中引脚的一个中断锁。
语法
VOID GPIO_CLX_AcquireInterruptLock(
[in] PVOID Context,
[in] BANK_ID BankId
);
参数
[in] Context
指向 GPIO 控制器驱动程序 设备上下文的指针。 GPIO 框架扩展 (GpioClx) 将此指针值作为参数传递给 GPIO 控制器驱动程序实现的回调函数。
[in] BankId
此 GPIO 引脚库的标识符。 如果 N 是 GPIO 控制器中的银行数,BankId 是 0 到 N–1 范围内的整数。
返回值
没有
言论
GPIO 控制器驱动程序线程调用此方法以同步到 GpioClx 中的中断服务例程(ISR)。 当调用方持有中断锁时,ISR 无法调用驱动程序实现的回调函数来访问指定银行中的 GPIO 寄存器。 GPIO 控制器驱动程序应在尝试访问 GpioClx ISR 可能访问的 GPIO 寄存器之前调用此方法。
GpioClx ISR 调用驱动程序实现的回调函数以访问中断状态并在 GPIO 控制器中启用寄存器。 根据 GPIO 控制器的功能,ISR 在 DIRQL 或 PASSIVE_LEVEL 调用。 有关详细信息,请参阅 Interrupt-Related 回调。
如果 GpioClx ISR 访问 DIRQL 上的这些中断寄存器,GPIO_CLX_AcquireInterruptLock 将调用线程的 IRQL 提升到运行 ISR 的 DIRQL。 如果 ISR 在PASSIVE_LEVEL运行,此方法不会更改调用线程的 IRQL。
GPIO_CLX_ReleaseInterruptLock 方法释放在上一次调用 GPIO_CLX_AcquireInterruptLock中获取的中断锁。 BankId 参数指定受锁影响的银行。 若要释放银行上的锁,GPIO_CLX_ReleaseInterruptLock 调用的 BankId 参数必须与获取锁的 GPIO_CLX_AcquireInterruptLock 调用的 BankId 参数匹配。 如果 GPIO_CLX_AcquireInterruptLock 调用引发了调用线程的 IRQL,GPIO_CLX_ReleaseInterruptLock 还原此线程的原始 IRQL。
GPIO 控制器驱动程序可以独立获取和释放 GPIO 控制器中各银行的中断锁。 但是,如果驱动程序已在此银行上持有锁,则驱动程序尝试获取特定银行上的锁是一个致命错误。
如果 上下文 参数为 NULL 或指向无效的 GPIO 设备上下文,此方法会导致在 GpioClx 的调试版本中进行 bug 检查。
要求
| 要求 | 价值 |
|---|---|
| 最低支持的客户端 | 从 Windows 8 开始可用。 |
| 目标平台 | 普遍 |
| 标头 | gpioclx.h |
| 库 | Msgpioclxstub.lib |
| IRQL | DIRQL 或PASSIVE_LEVEL。 请参阅“备注”。 |