IO_CSQ_RELEASE_LOCK回呼函式 (wdm.h)

CsqReleaseLock 例程由系統用來釋放使用 CsqAcquireLock 取得的鎖定。

語法

IO_CSQ_RELEASE_LOCK IoCsqReleaseLock;

void IoCsqReleaseLock(
  [in] PIO_CSQ Csq,
  [in] KIRQL Irql
)
{...}

參數

[in] Csq

取消安全 IRP 佇列 IO_CSQ 結構的指標。

[in] Irql

指定 IRQL。 這是取得鎖定時 ,CsqAcquireLock 所儲存的值。

傳回值

備註

驅動程式會在初始化佇列的IO_CSQ結構時,指定取消安全 IRP 佇列的 CsqReleaseLock 例程。 驅動程式會在初始化 IO_CSQ 時,將例程指定為IoCsqInitialize或IoCsqInitializeExCsqReleaseLock 參數。 如需詳細資訊,請參閱 取消安全 IRP 佇列

系統會呼叫此函式,以釋放使用 CsqAcquireLock 取得的鎖定。

如果驅動程式使用微調鎖定來實作佇列的鎖定,則必須在取得鎖定時儲存目前的 IRQL,並在釋放鎖定時提供預存 IRQL。 CsqAcquireLock 例程會儲存目前的 IRQL,而系統會將預存的值當做 Irql 參數傳遞至 CsqReleaseLock。 否則,驅動程式可以忽略 Irql 參數。 如需微調鎖定的相關信息,請參閱 微調鎖定

驅動程式可以使用任何鎖定機制來鎖定佇列,例如 mutex。 如需 Mutex 的詳細資訊,請參閱 Mutex 物件

範例

若要定義 CsqReleaseLock 回呼例程,您必須先提供函式宣告,以識別您要定義的回呼例程類型。 Windows 提供一組驅動程式的回呼函式類型。 使用回呼函式類型宣告函式有助於 驅動程式的程式代碼分析靜態驅動程式驗證器 (SDV) ,以及其他驗證工具會尋找錯誤,而且這是撰寫 Windows 操作系統驅動程式的需求。

例如,若要定義名為 MyCsqReleaseLockCsqReleaseLock 回呼例程,請使用 IO_CSQ_RELEASE_LOCK 類型,如下列程式代碼範例所示:

IO_CSQ_RELEASE_LOCK MyCsqReleaseLock;

然後,實作回呼例程,如下所示:

_Use_decl_annotations_
VOID 
 MyCsqReleaseLock(
    PIO_CSQ  Csq,
    KIRQL  Irql
    )
  {
      // Function body
  }

IO_CSQ_RELEASE_LOCK函式類型定義於 Wdm.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 _Use_decl_annotations_ 註釋新增至函式定義。 批 _Use_decl_annotations_ 注可確保使用頭檔中套用至IO_CSQ_RELEASE_LOCK函式類型的批註。 如需函式宣告需求的詳細資訊,請參閱 使用WDM驅動程式的函式角色類型來宣告函式。 如需 的相關信息 _Use_decl_annotations_,請參閱 標註函式行為

規格需求

需求
目標平台 桌面
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)

另請參閱

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp