[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 値返すことができます。
リターン コード | 形容 |
---|---|
|
呼び出し元が待機ロックを取得しました。 |
|
指定した タイムアウト 間隔は、ロックが取得される前に期限切れになりました。 |
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) |