次の方法で共有


WdfDeviceInitSetRemoveLockOptions 関数 (wdfdevice.h)

[KMDF にのみ適用]

WdfDeviceInitSetRemoveLockOptions メソッドを使用すると、任意の種類の IRP をドライバーに配信する前に、フレームワークが削除ロックを取得します。

構文

void WdfDeviceInitSetRemoveLockOptions(
  [in] PWDFDEVICE_INIT          DeviceInit,
  [in] PWDF_REMOVE_LOCK_OPTIONS Options
);

パラメーター

[in] DeviceInit

WDFDEVICE_INIT構造体への呼び出し元が指定したポインター。

[in] Options

WDF_REMOVE_LOCK_OPTIONS構造体へのポインター。

戻り値

なし

解説

既定では、フレームワークは、次の主要な種類の IRP をドライバーに配信する前に、削除ロックを取得します。

IRP_MJ_PNP
IRP_MJ_POWER
IRP_MJ_SYSTEM_CONTROL

IRP が完了すると、フレームワークは削除ロックを解放します。

KMDF 1.11 以降では、ドライバーは必要に応じて WdfDeviceInitSetRemoveLockOptions を呼び出して、上記の IRP の種類だけでなく、すべての IRP の種類を配信する前に、フレームワークが削除ロックを取得できます。

ドライバーに、デバイスの PnP 状態と同期されていない I/O を送信するカーネル モード クライアントがある場合は、フレームワーク デバイス オブジェクトが削除された後に I/O IRP が到着したためにクラッシュが発生する可能性があります。 この場合は、 WdfDeviceInitSetRemoveLockOptions を呼び出すことができます。 次に、クライアントがデバイスに I/O 要求を送信すると、次のようになります。

  • デバイスがまだ削除されていない場合は、削除ロックが正常に取得され、要求が配信されます。 削除が後で行われると、フレームワークは IoReleaseRemoveLockAndWait を呼び出し、ロックの取得が成功するまでブロックします (I/O 要求が完了します)。
  • デバイスが既にIRP_MN_REMOVE_DEVICE処理されているが、デバイスが解放されないように WDM デバイス オブジェクトへの未処理の参照がある場合、削除ロックは取得されず、フレームワークは要求を直ちに完了します。
メモWdfDeviceInitSetRemoveLockOptions は、コントロール オブジェクトではサポートされていません。
 
通常、ドライバーは WdfDeviceCreate を呼び出す直前に、EvtDriverDeviceAdd コールバック関数内から WdfDeviceInitSetRemoveLockOptions を呼び出します。

ドライバーが WdfDeviceInitSetRemoveLockOptions を呼び出した後、フレームワーク デバイス オブジェクトの有効期間中、設定は有効なままです。

ロックの削除の詳細については、「ロックの 削除の使用」を参照してください。

このコード例では、 WDF_REMOVE_LOCK_OPTIONS 構造体を初期化し、 WdfDeviceInitSetRemoveLockOptions を呼び出します。


WDF_REMOVE_LOCK_OPTIONS RemoveLockOptions;

WDF_REMOVE_LOCK_OPTIONS_INIT(
                             &RemoveLockOptions,
                             WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO
                             );
WdfDeviceInitSetRemoveLockOptions(
                                  DeviceInit,
                                  &RemoveLockOptions
                                  );

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.11
Header wdfdevice.h (Wdf.h を含む)
Library Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 DriverCreate(kmdf)

こちらもご覧ください

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT