次の方法で共有


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
ヘッダー wdfdevice.h (Wdf.h を含む)
ライブラリ Wdf01000.sys (フレームワーク ライブラリのバージョン管理を参照)。
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する DriverCreate(kmdf)

関連項目

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT