IO_CSQ_ACQUIRE_LOCK回呼函式 (wdm.h)
CsqAcquireLock 例程是由系統用來取得驅動程序實作、取消安全 IRP 佇列的鎖定。
IO_CSQ_ACQUIRE_LOCK IoCsqAcquireLock;
void IoCsqAcquireLock(
[in] PIO_CSQ Csq,
[out] PKIRQL Irql
)
{...}
[in] Csq
適用於取消安全 IRP 佇列之 IO_CSQ 結構的指標。
[out] Irql
CsqAcquireLock 例程可用來儲存目前 IRQL 的變數指標。 當系統釋放鎖定時,系統會 CsqReleaseLock 傳遞預存值。
沒有
驅動程式會指定 CsqAcquireLock 例程,以在初始化佇列的 IO_CSQ 結構時,為安全的 IRP 佇列指定例程。 驅動程式會將例程指定為 IoCsqInitialize 的 CsqAcquireLock 參數,或在初始化 IO_CSQ時 IoCsqInitializeEx 。 如需詳細資訊,請參閱 Cancel-Safe IRP 佇列。
系統會呼叫此例程,以取得驅動程式 IRP 佇列的鎖定,然後再嘗試從佇列插入或移除 IRP。 系統會呼叫 CsqReleaseLock 例程來釋放鎖定。
如果驅動程式使用微調鎖定來實作佇列的鎖定,則必須在釋放微調鎖定時儲存目前的 IRQL。 系統會將指標傳遞給驅動程式可用來儲存目前 IRQL 的 IRQL 變數。 系統會在釋放鎖定時,將預存值當做 Irql 參數傳遞至 CsqReleaseLock。 否則,驅動程式可以忽略 Irql 參數。 如需微調鎖定的相關信息,請參閱 微調鎖定。
驅動程式可以使用任何鎖定機制來鎖定佇列,例如 Mutex。 如需 mutex 的詳細資訊,請參閱 Mutex Objects。
若要定義 CsqAcquireLock 回呼例程,您必須先提供函式宣告,以識別您要定義的回呼例程類型。 Windows 提供一組驅動程式的回呼函式類型。 使用回呼函式類型宣告函式有助於 驅動程式的程式代碼分析、靜態驅動程式驗證器 (SDV)和其他驗證工具尋找錯誤,而且是撰寫 Windows作系統驅動程式的需求。
例如,若要定義名為 MyCsqAcquireLock
的 CsqAcquireLock 回呼例程,請使用 IO_CSQ_ACQUIRE_LOCK 類型,如下列程式代碼範例所示:
IO_CSQ_ACQUIRE_LOCK MyCsqAcquireLock;
然後,實作回呼例程,如下所示:
_Use_decl_annotations_
VOID
MyCsqAcquireLock(
PIO_CSQ Csq,
PKIRQL Irql
)
{
// Function body
}
IO_CSQ_ACQUIRE_LOCK函式類型定義於 Wdm.h 頭檔中。 若要在執行程式代碼分析工具時更準確地識別錯誤,請務必將 _Use_decl_annotations_
批註新增至函式定義。
_Use_decl_annotations_
批注可確保會使用套用至頭檔中IO_CSQ_ACQUIRE_LOCK函式類型的批注。 如需函式宣告需求的詳細資訊,請參閱 使用 WDM 驅動程式的函式角色類型來宣告函式。 如需 _Use_decl_annotations_
的相關信息,請參閱 批注函式行為。
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | 請參閱一節。 |