AssignProcessToJobObject 函式 (jobapi2.h)

將進程指派給現有的工作物件。

語法

BOOL AssignProcessToJobObject(
  [in] HANDLE hJob,
  [in] HANDLE hProcess
);

參數

[in] hJob

將關聯進程之工作物件的控制碼。 CreateJobObjectOpenJobObject函式會傳回這個控制碼。 控制碼必須具有JOB_OBJECT_ASSIGN_PROCESS存取權限。 如需詳細資訊,請參閱 工作物件安全性和存取權限

[in] hProcess

要與工作物件產生關聯之進程的控制碼。 控制碼必須具有PROCESS_SET_QUOTA和PROCESS_TERMINATE存取權限。 如需詳細資訊,請參閱 處理安全性和存取權限

如果進程已經與作業相關聯,hJob所指定的作業必須是空的,或者它必須位於進程所屬的巢狀作業階層中,而且它不能有使用JobObjectBasicUIRestrictions) 設定的 UI 限制 (SetInformationJobObject。 如需詳細資訊,請參閱<備註>。

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 開始變更。

終端機服務: 作業內的所有進程都必須在與作業相同的會話內執行。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

使用 AssignProcessToJobObject將進程與工作物件產生關聯之後,此程式會受限於為作業設定的限制。 若要設定作業的限制,請使用 SetInformationJobObject 函式。

如果作業有使用者模式的時間限制,而且時間限制已耗盡, AssignProcessToJobObject 就會失敗,並終止指定的進程。 如果建立進程關聯而超過時間限制, AssignProcessToJobObject 仍會成功。 不過,將會報告時間限制違規。 如果作業有作用中的進程限制,而且限制會透過建立此進程關聯而超過, AssignProcessToJobObject 就會失敗,並終止指定的進程。

與具有記憶體限制之作業相關聯的進程所執行的記憶體作業受限於記憶體限制。 AssignProcessToJobObject不會檢查進程在與作業相關聯的之前所執行的記憶體作業。

如果進程已經執行,且作業具有安全性限制, AssignProcessToJobObject 可能會失敗。 例如,如果進程的主要權杖包含本機系統管理員群組,但工作物件具有安全性限制JOB_OBJECT_SECURITY_NO_ADMIN,則函式會失敗。 如果作業具有安全性限制JOB_OBJECT_SECURITY_ONLY_TOKEN,則必須暫停程式。 若要建立暫停的進程,請使用 CREATE_SUSPENDED 旗標呼叫 CreateProcess 函式。

進程可以與巢狀作業階層中的多個作業相關聯。 對於優先順序類別、親和性、認可費用、每個進程執行時間限制、排程類別限制,以及工作集最小值和最大值,進程會繼承有效限制,這是其父作業鏈結中所有作業最嚴格的限制。 針對其他資源限制,進程會從階層中的立即作業繼承限制。 會計資訊會新增至立即作業,並在作業鏈結中的每個父作業中匯總。 根據預設,所有子進程都會與立即作業和父作業鏈結中的每個作業相關聯。 若要建立不屬於相同作業鏈結一部分的子進程,請使用 CREATE_BREAKAWAY_FROM_JOB 旗標呼叫 CreateProcess 函式。 除非鏈結中的作業不允許中斷,否則子進程會中斷作業鏈結中的每個作業。 在此情況下,子進程不會中斷該作業或作業鏈結中其上方的任何作業。 如需詳細資訊,請參閱 巢狀作業

Windows 7、Windows Server 2008 R2、Windows XP SP3、Windows Server 2008、Windows Vista 和 Windows Server 2003: 進程只能與單一作業相關聯。 進程會從與其相關聯的作業繼承限制,並將其會計資訊新增至作業。 如果進程與作業相關聯,則它建立的所有子進程預設都會與該作業相關聯。 若要建立不屬於相同作業一部分的子進程,請使用 CREATE_BREAKAWAY_FROM_JOB 旗標呼叫 CreateProcess 函式。 進程可以與從 Windows 8 和 Windows Server 2012 開始的多個作業相關聯。

Windows 7、Windows Server 2008 R2、Windows Server 2008 和 Windows Vista: 如果程式相容性小幫手 (PCA) 監視程式,則會將其置於相容性工作中。 因此,必須先使用CREATE_BREAKAWAY_FROM_JOB建立程式,才能將其放在另一個作業中。 或者,您也可以在應用程式中內嵌應用程式資訊清單,以指定使用者帳戶控制 (UAC) 層級,而 PCA 將不會將程式新增至相容性作業。 如需詳細資訊,請參閱 使用者帳戶控制相容性的應用程式開發需求

如果在呼叫 AssignProcessToJob 時,作業或其任何父作業在作業鏈結中終止,則函式會失敗。

若要編譯使用此函式的應用程式,請將_WIN32_WINNT定義為0x0500或更新版本。 如需詳細資訊,請參閱 使用 Windows 標頭

需求

   
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 jobapi2.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CreateJobObject

CreateProcess

工作物件

OpenJobObject

處理序和執行緒函式

SetInformationJobObject