次の方法で共有


IoDriverProxyCreateHotSwappableWorkerThread 関数 (wdm.h)

IoDriverProxyCreateHotSwappableWorkerThread 関数は、Driver Hot-Swap と互換性のある "スピン待機中" ワーカー スレッドを提供するホットスワップ可能なワーカー スレッドを作成します。 この関数は、ホット スワップ可能な状態を維持する必要があるドライバーで無限ループや実行時間の長い操作を処理する場合に特に便利です。

構文

NTSTATUS IoDriverProxyCreateHotSwappableWorkerThread(
  PDRIVER_PROXY_EXTENSION                            DriverProxyExtension,
  PHANDLE                                            ThreadHandle,
  ULONG                                              DesiredAccess,
  POBJECT_ATTRIBUTES                                 ObjectAttributes,
  HANDLE                                             ProcessHandle,
  PCLIENT_ID                                         ClientId,
  PDRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT WorkerStartContext
);

パラメーター

DriverProxyExtension

[in]エンドポイントが登録されている DriverProxy 拡張機能へのポインター。 WorkerStartContext で指定されるワーカー ルーチンは、登録済みのエンドポイント ラッパーである必要があります。

ThreadHandle

[out]作成されたスレッドへのハンドルを受け取る変数へのポインター。

DesiredAccess

[in]スレッド ハンドル に必要なアクセス権

ObjectAttributes

[入力、省略可能]スレッド オブジェクトの属性を指定する OBJECT_ATTRIBUTES* 構造体へのポインター。 このパラメーターには NULL を指定できます。

ProcessHandle

[入力、省略可能]スレッドが作成されるプロセスのハンドル。 NULL の場合、スレッドは現在のプロセスで作成されます。

ClientId

[出力、省略可能]作成されたスレッドの CLIENT_ID 構造体へのポインター。 このパラメーターには NULL を指定できます。

WorkerStartContext

[in]ワーカー ルーチンや待機するイベント オブジェクトなど、ワーカー スレッドの構成を含む DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT構造体への ポインター。

戻り値

IoDriverProxyCreateHotSwappableWorkerThread は、次のいずれかの NTSTATUS 値を返します。

リターン コード Description
STATUS_SUCCESS ホット スワップ可能なワーカー スレッドが正常に作成されました。
STATUS_NOT_SUPPORTED DriverProxy 機能は、現在のシステムでは使用できません。
STATUS_INVALID_PARAMETER NULL ワーカー ルーチンや無効なイベントカウントなど、1 つ以上のパラメーターが無効です。
STATUS_INSUFFICIENT_RESOURCES スレッド コンテキストまたはサポート構造体を作成するために使用できるメモリが不足していました。

注釈

この関数は、DriverProxy システムと統合する特殊なワーカー スレッドを作成し、スレッドの実行中にワーカー ルーチンをホット スワップできるようにします。 これは、ドライバーの更新プログラム間で保持する必要がある継続的なバックグラウンド操作を実行する必要があるドライバーに特に役立ちます。

WorkerStartContext で指定されるワーカー ルーチンは、DriverProxy 登録プロセスを通じて取得された登録済みのエンドポイント ラッパーである必要があります。 この要件により、ホット スワップ可能な機能が有効になり、ドライバーは実行時間の長いバックグラウンド操作を停止せずにワーカー ロジックを更新できます。

ワーカー スレッドはループ内で動作し、指定されたイベントを待機し、イベントが通知されたときにワーカー ルーチンを呼び出します。 ワーカー ルーチンは、スレッドの実行を継続するか終了するかを示すことができます。

この関数は WorkerStartContext 構造体のコピーを作成するため、呼び出し元は関数が戻った後に元の構造体を安全に破棄できます。 メモリ割り当てとスレッドの作成を実行するPASSIVE_LEVELで関数を呼び出す必要があります。

Requirements

Requirement 価値
ターゲット プラットフォーム 万国
Header wdm.h
Library NtosKrnl.lib
IRQL PASSIVE_LEVEL

こちらも参照ください

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

IoRegisterDriverProxyEndpointsPsCreateSystemThread