コールバック同期モードの指定
警告
UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。
アーカイブされた UMDF 1 サンプルは、「Windows 11、バージョン 22H2 - 2022 年 5 月 ドライバーサンプルの更新」でご確認いただけます。
詳しくは、「UMDF の概要」をご覧ください。
ドライバーは、フレームワークによってコールバック関数を呼び出す方法を指定することができます。 ドライバーは、IWDFDriver::CreateDevice メソッドを呼び出してデバイスのデバイス オブジェクトを作成する前に、デバイスの同期 (またはロック) モードを指定します。 同期モードを指定するには、ドライバーは IWDFDeviceInitialize::SetLockingConstraint メソッドを呼び出す必要があります。 デバイスをシステムに追加するために IDriverEntry::OnDeviceAdd メソッドが呼び出されると、ドライバーは IWDFDeviceInitialize インターフェイスへのポインターを受け取ります。
ドライバーは、IWDFDeviceInitialize::SetLockingConstraint の LockType パラメーターで WDF_CALLBACK_CONSTRAINT 列挙型から次のいずれかの値を指定して、ロック モードを識別できます。 指定された制約 (またはロック) の種類は、ハードウェア デバイスが悪用できる並列処理の量と、ドライバーが処理できる量によって異なります。
Value | 意味 |
---|---|
なし (0) |
ドライバーへのコールバック関数が同期されていないことを示します。 |
WdfDeviceLevel (1) |
ドライバー内のすべてのキュー コールバック関数が同期されることを示します。 |
注: ドライバーが IWDFDeviceInitialize::SetLockingConstraint を呼び出して値を指定しない場合、フレームワークは、このプロパティの既定値を WdfDeviceLevel に設定します。
制約はキュー コールバック関数にのみ適用され、プラグ アンド プレイ (PnP) および電源管理コールバック関数には適用されません。 キュー コールバック関数には、次のものが含まれます。
IQueueCallbackRead::OnRead、IQueueCallbackWrite::OnWrite などの自動ディスパッチ コールバック関数。 詳細については、「I/O キュー イベント コールバック関数」を参照してください。
IQueueCallbackStateChange::OnStateChange などのキュー状態変更コールバック関数。
IRequestCallbackCancel::OnCancel などの要求キャンセル コールバック関数。
ファイルをクリーンアップし、IFileCallbackCleanup::OnCleanupFile や IFileCallbackClose::OnCloseFile などのコールバック関数を閉じます。
要求完了コールバック関数 (IRequestCallbackRequestCompletion::OnCompletion) はキュー コールバック関数ではありません。 そのため同期はされません。