次の方法で共有


WdfWaitLockAcquire 関数 (wdfsync.h)

[KMDF と UMDF に適用]

WdfWaitLockAcquire メソッドは、指定された待機ロックを取得します。

構文

NTSTATUS WdfWaitLockAcquire(
  [in]           WDFWAITLOCK Lock,
  [in, optional] PLONGLONG   Timeout
);

パラメーター

[in] Lock

WdfWaitLockCreateへの以前の呼び出しによって取得されたフレームワーク待機ロック オブジェクトへのハンドル。

[in, optional] Timeout

タイムアウト値への省略可能なポインター。 タイムアウト値は、システム時間単位 (100 ナノ秒間隔) で指定されます。

ポインターが null以外の場合、フレームワークは、指定されたタイムアウト期間内に完了していない場合、ロックの取得の試行を取り消します。 タイムアウト値には、次のように負、正、またはゼロを指定できます。

  • タイムアウト値が負の場合、有効期限は現在のシステム時刻を基準とします。
  • タイムアウト値が正の場合、有効期限は絶対時間として指定されます (実際には 1601 年 1 月 1 日を基準とします)。
  • タイムアウト値が 0 の場合、WdfWaitLockAcquire はロックの取得を試み、ロックを取得したかどうかに関係なく、直ちに戻ります。
相対有効期限は、指定されたタイムアウト期間内に発生する可能性があるシステム時刻の変更の影響を受けません。 絶対有効期限は、システム時刻の変更を反映します。

フレームワークには、時間値をシステム時間単位に変換する 時間変換関数が用意されています。

呼び出し元が NULL ポインターを指定した場合、メソッドはロックを取得するまで無期限に待機します。

戻り値

WdfWaitLockAcquire は、次の NTSTATUS 値返すことができます。

リターン コード 形容
STATUS_SUCCESS
呼び出し元が待機ロックを取得しました。
STATUS_TIMEOUT
指定した タイムアウト 間隔は、ロックが取得される前に期限切れになりました。
 

NT_SUCCESS(状態) は、これらすべての状態値 TRUE に等しいことに注意してください。

Timeout ポインターが NULL 場合、呼び出し元は戻り値を確認する必要はありません。この場合、WdfWaitLockAcquire はロックを取得した後にのみ戻るためです。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

備考

WdfWaitLockAcquire メソッドは、待機ロックを取得するまで、またはタイムアウト期間が経過するまで戻りません。

WdfWaitLockAcquire 、待機ロックを取得する前 KeEnterCriticalRegion を呼び出します。 その結果、メソッドから制御が戻ると、通常 カーネル APCs は無効になります。 WdfWaitLockAcquire 呼び出し元の IRQL は変更されません。

Timeout ポインターが NULL 場合、またはタイムアウト値が 0 でない場合は、WdfWaitLockAcquire を IRQL = PASSIVE_LEVEL で呼び出す必要があります。

タイムアウト値が 0 の場合は、< を呼び出す必要があります。 これは、このメソッドがDISPATCH_LEVELで呼び出すことができることを示すヘッダー ファイル (wdfsync.h) と不一致であることに注意してください。

待機ロックの詳細については、「Framework-Based ドライバー の同期手法参照してください。

次のコード例では、待機ロックを取得し、デバイス オブジェクトをオブジェクト コレクションに追加して、待機ロックを解放します。

WdfWaitLockAcquire(
                   FilterDeviceCollectionLock,
                   NULL
                   );
status = WdfCollectionAdd(
                          FilterDeviceCollection,
                          deviceHandle
                          );
if (!NT_SUCCESS(status)) {
    addFailed = TRUE;
}
WdfWaitLockRelease(FilterDeviceCollectionLock);

必要条件

要件 価値
ターゲット プラットフォーム 万国
最小 KMDF バージョン 1.0
UMDF の最小バージョン する 2.0
ヘッダー wdfsync.h (Wdf.h を含む)
ライブラリ Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL 「解説」セクションを参照してください。
DDI コンプライアンス規則 する DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), WdfWaitlock(kmdf), WdfWaitlockRelease(km)

関連項目

KeEnterCriticalRegion

WdfWaitLockCreate

WdfWaitLockRelease