AssignProcessToJobObject

既存のジョブオブジェクトにプロセスを割り当てる。

AssignProcessToJobObject hJob, hProcess

hJob : [intptr] プロセスを関連付けるジョブオブジェクトへのハンドル。CreateJobObject または OpenJobObject 関数がこのハンドルを返す。ハンドルは JOB_OBJECT_ASSIGN_PROCESS アクセス権を持っている必要がある。詳細は Job Object Security and Access Rights を参照。
hProcess : [intptr] ジョブオブジェクトに関連付けるプロセスへのハンドル。ハンドルは PROCESS_SET_QUOTA および PROCESS_TERMINATE アクセス権を持っている必要がある。詳細は Process Security and Access Rights を参照。プロセスがすでにジョブに関連付けられている場合、hJob で指定されたジョブは空であるか、プロセスが既に属しているネスト済みジョブ階層に含まれている必要があり、UI 制限 (SetInformationJobObject と JobObjectBasicUIRestrictions) が設定されていてはならない。詳細は備考を参照。Windows 7、Windows Server 2008 R2、Windows XP SP3、Windows Server 2008、Windows Vista、Windows Server 2003: プロセスは既にジョブに割り当てられていてはならず、もし割り当てられていれば関数は ERROR_ACCESS_DENIED で失敗する。この動作は Windows 8 および Windows Server 2012 から変更された。ターミナルサービス: ジョブ内のすべてのプロセスは、ジョブと同じセッション内で実行されなければならない。

(プラグイン / モジュール : kernel32.dll)

解説

既存のジョブオブジェクトにプロセスを割り当てる。

[戻り値]
関数が成功した場合、戻り値はゼロ以外。関数が失敗した場合、戻り値はゼロ。拡張エラー情報を取得するには GetLastError を呼ぶ。

[備考]
AssignProcessToJobObject
を使ってプロセスをジョブオブジェクトに関連付けた後、プロセスはジョブに設定された制限の対象となる。ジョブの制限を設定するには
SetInformationJobObject
関数を使う。ジョブにユーザーモード時間制限があり、その時間制限が使い切られていた場合、AssignProcessToJobObject
は失敗し、指定されたプロセスは終了する。プロセスの関連付けにより時間制限を超過する場合でも
AssignProcessToJobObject
は成功するが、時間制限違反が報告される。ジョブにアクティブプロセス制限があり、このプロセスを関連付けることで制限を超える場合、AssignProcessToJobObject
は失敗し、指定されたプロセスは終了する。メモリ制限があるジョブに関連付けられたプロセスが行うメモリ操作は、そのメモリ制限の対象となる。プロセスがジョブに関連付けられる前に行ったメモリ操作は
AssignProcessToJobObject
によって検査されない。プロセスがすでに実行中で、ジョブにセキュリティ制限がある場合、AssignProcessToJobObject
は失敗する可能性がある。例えば、プロセスのプライマリトークンにローカル管理者グループが含まれているが、ジョブオブジェクトに
JOB_OBJECT_SECURITY_NO_ADMIN というセキュリティ制限がある場合、関数は失敗する。ジョブに
JOB_OBJECT_SECURITY_ONLY_TOKEN
というセキュリティ制限がある場合、プロセスはサスペンド状態で作成する必要がある。サスペンド状態でプロセスを作成するには、CreateProcess
関数を CREATE_SUSPENDED
フラグ付きで呼ぶ。プロセスはネストしたジョブ階層内で複数のジョブに関連付けることができる。優先度クラス、アフィニティ、コミットチャージ、プロセス単位の実行時間制限、スケジューリングクラス制限、ワーキングセットの最小値と最大値については、プロセスは親ジョブチェーン内のすべてのジョブのうち最も厳しい制限を実効制限として継承する。その他のリソース制限については、プロセスは階層内の直接のジョブから制限を継承する。アカウンティング情報は直接のジョブに追加され、親ジョブチェーン内の各親ジョブに集計される。既定では、すべての子プロセスは直接のジョブと親ジョブチェーン内のすべてのジョブに関連付けられる。同じジョブチェーンに属さない子プロセスを作成するには、CreateProcess
関数を CREATE_BREAKAWAY_FROM_JOB
フラグ付きで呼ぶ。子プロセスはジョブチェーン内のすべてのジョブから切り離されるが、ジョブがブレイクアウェイを許可していない場合は、そのジョブおよびそれより上位のジョブから切り離されない。詳細は
Nested Jobs を参照。Windows 7、Windows Server 2008 R2、Windows XP
SP3、Windows Server 2008、Windows Vista、Windows Server 2003: プロセスは 1
つのジョブにしか関連付けられない。プロセスは関連付けられたジョブから制限を継承し、アカウンティング情報をジョブに追加する。プロセスがジョブに関連付けられている場合、そのプロセスが作成するすべての子プロセスは既定でそのジョブに関連付けられる。同じジョブに属さない子プロセスを作成するには、CreateProcess
を CREATE_BREAKAWAY_FROM_JOB フラグ付きで呼ぶ。Windows 8 および Windows Server
2012 以降、プロセスは複数のジョブに関連付けられる。Windows 7、Windows Server 2008 R2、Windows
Server 2008、Windows Vista: プロセスが Program Compatibility Assistant
(PCA) によって監視されている場合、互換性ジョブに入れられる。したがって、プロセスを別のジョブに入れる前に
CREATE_BREAKAWAY_FROM_JOB を使って作成する必要がある。あるいは、ユーザーアカウント制御 (UAC)
レベルを指定するアプリケーションマニフェストを埋め込むことで、PCA がプロセスを互換性ジョブに追加しないようにできる。詳細は
Application Development Requirements for User Account Control
Compatibility を参照。AssignProcessToJob
が呼ばれた時点でジョブまたはジョブチェーン内の親ジョブのいずれかが終了中の場合、関数は失敗する。この関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNT
を 0x0500 以降として定義する。詳細は Using the Windows Headers を参照。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs