QueueUserAPC2 関数 (processthreadsapi.h)
指定したスレッドの APC キューにユーザー モード の非同期プロシージャ 呼び出し (APC) オブジェクトを追加します。
構文
BOOL QueueUserAPC2(
PAPCFUNC ApcRoutine,
HANDLE Thread,
ULONG_PTR Data,
QUEUE_USER_APC_FLAGS Flags
);
パラメーター
ApcRoutine
指定したスレッドが警告可能な待機操作を実行するときに呼び出されるアプリケーション提供の APC 関数へのポインター。 詳細については、「 APCProc」を参照してください。
特殊なユーザー モードの APC の場合、アラート可能な待機は必要ありません。 特殊なユーザー モード APC の詳細については、「 解説 」を参照してください。
Thread
スレッドへのハンドル。 ハンドルには THREAD_SET_CONTEXT アクセス許可が必要です。 詳細については、「 同期オブジェクトのセキュリティとアクセス権」を参照してください。
Data
ApcRoutine パラメーターによって指される APC 関数に渡される 1 つの値。
Flags
ユーザー モード APC の動作QUEUE_USER_APC_FLAGS変更する列挙からの 値。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
通常のユーザー モードの APC は、ターゲット スレッドがアラート可能な状態にある場合にのみ実行されます。 通常のユーザー モード APC に関するその他の解説については、「 QueueUserAPC 関数 」を参照してください。
ターゲット スレッドがアラート可能な状態ではない場合でも、特別なユーザー モードの APCs は常に実行されます。 たとえば、ターゲット スレッドが現在ユーザー モード コードを実行している場合、またはターゲット スレッドが現在警告可能な待機を実行している場合、ターゲット スレッドは APC の実行のために直ちに中断されます。 ターゲット スレッドがシステム呼び出しを実行している場合、または警告不可能な待機を実行している場合、APC はシステム呼び出しまたはアラート不可の待機が完了した後に実行されます (待機は中断されません)。
特殊なユーザー モード APC の実行はターゲット スレッドと同期されないため、(マルチスレッドと同期の通常の要件を超えて) 特に注意する必要があります。 たとえば、ロックを取得する場合、中断されたターゲット スレッドは既にロックを所有しているか、ロックの取得または解放の処理中である可能性があります。 さらに、スレッドが特別なユーザー モード APC を受信するのをブロックする機能がないため、特別なユーザー モード APC を既に実行しているターゲット スレッドで特別なユーザー モード APC を実行できます。
現時点では、特別なユーザー モード API はネイティブ アーキテクチャでのみサポートされており、WoW で実行する場合はサポートされていません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 11 (ビルド 22000) |
サポートされている最小のサーバー | Windows Server 2022 (ビルド 20348) |
対象プラットフォーム | Windows |
ヘッダー | processthreadsapi.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |