Condividi tramite


Funzione AssignProcessToJobObject (jobapi2.h)

Assegna un processo a un oggetto processo esistente.

Sintassi

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

Parametri

[in] hJob

Handle per l'oggetto processo a cui verrà associato il processo. La funzione CreateJobObject o OpenJobObject restituisce questo handle. L'handle deve avere il diritto di accesso JOB_OBJECT_ASSIGN_PROCESS. Per altre informazioni, vedere Job Object Security and Access Rights.For more information, see Job Object Security and Access Rights.

[in] hProcess

Handle per il processo da associare all'oggetto processo. L'handle deve avere i diritti di accesso PROCESS_SET_QUOTA e PROCESS_TERMINATE. Per altre informazioni, vedere Sicurezza dei processi e diritti di accesso.

Se il processo è già associato a un processo, il processo specificato da hJob deve essere vuoto oppure deve trovarsi nella gerarchia dei processi annidati a cui appartiene già il processo e non può avere limiti dell'interfaccia utente impostati (SetInformationJobObject con JobObjectBasicUIRestrictions). Per altre informazioni, vedere la sezione Osservazioni.

Windows 7, Windows Server 2008 R2, Windows XP con SP3, Windows Server 2008, Windows Vista e Windows Server 2003: Il processo non deve essere già assegnato a un processo; in caso affermativo, la funzione ha esito negativo con ERROR_ACCESS_DENIED. Questo comportamento è cambiato a partire da Windows 8 e Windows Server 2012.

Servizi terminal: Tutti i processi all'interno di un processo devono essere eseguiti nella stessa sessione del processo.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Dopo aver associato un processo a un oggetto processo usando AssignProcessToJobObject, il processo è soggetto ai limiti impostati per il processo. Per impostare i limiti per un processo, usare la funzione SetInformationJobObject .

Se il processo ha un limite di tempo in modalità utente e il limite di tempo è stato esaurito, AssignProcessToJobObject ha esito negativo e il processo specificato viene terminato. Se il limite di tempo viene superato associando il processo, AssignProcessToJobObject ha comunque esito positivo. Tuttavia, verrà segnalata la violazione del limite di tempo. Se il processo ha un limite di processo attivo e il limite viene superato associando questo processo, AssignProcessToJobObject ha esito negativo e il processo specificato viene terminato.

Le operazioni di memoria eseguite da un processo associato a un processo con un limite di memoria sono soggette al limite di memoria. Le operazioni di memoria eseguite dal processo prima di essere associate al processo non vengono esaminate da AssignProcessToJobObject.

Se il processo è già in esecuzione e il processo presenta limitazioni di sicurezza, AssignProcessToJobObject potrebbe non riuscire. Ad esempio, se il token primario del processo contiene il gruppo administrators locale, ma l'oggetto processo presenta la limitazione di sicurezza JOB_OBJECT_SECURITY_NO_ADMIN, la funzione ha esito negativo. Se il processo presenta la limitazione di sicurezza JOB_OBJECT_SECURITY_ONLY_TOKEN, è necessario creare il processo sospeso. Per creare un processo sospeso, chiamare la funzione CreateProcess con il flag CREATE_SUSPENDED.

Un processo può essere associato a più processi in una gerarchia di processi annidati. Per la classe di priorità, l'affinità, l'addebito di commit, il limite di tempo di esecuzione per processo, il limite di classi di pianificazione e il working set minimo e massimo, il processo eredita un limite effettivo che rappresenta il limite più restrittivo di tutti i processi nella relativa catena di processi padre. Per altri limiti delle risorse, il processo eredita i limiti dal processo immediato nella gerarchia. Le informazioni contabili vengono aggiunte al processo immediato e aggregate in ogni processo padre nella catena di processi. Per impostazione predefinita, tutti i processi figlio sono associati al processo immediato e a ogni processo nella catena di processi padre. Per creare un processo figlio che non fa parte della stessa catena di processi, chiamare la funzione CreateProcess con il flag CREATE_BREAKAWAY_FROM_JOB. Il processo figlio si interrompe da ogni processo nella catena di processi, a meno che un processo nella catena non consenta l'interruzione. In questo caso, il processo figlio non si interrompe da tale processo o da qualsiasi processo sopra di esso nella catena di processi. Per altre informazioni, vedere Processi annidati.

Windows 7, Windows Server 2008 R2, Windows XP con SP3, Windows Server 2008, Windows Vista e Windows Server 2003: Un processo può essere associato solo a un singolo processo. Un processo eredita i limiti dal processo a cui è associato e aggiunge le informazioni contabili al processo. Se un processo è associato a un processo, tutti i processi figlio creati vengono associati al processo per impostazione predefinita. Per creare un processo figlio che non fa parte dello stesso processo, chiamare la funzione CreateProcess con il flag CREATE_BREAKAWAY_FROM_JOB. Un processo può essere associato a più processi a partire da Windows 8 e Windows Server 2012.

Windows 7, Windows Server 2008 R2, Windows Server 2008 e Windows Vista: Se il processo viene monitorato da Program Compatibility Assistant (PCA), viene inserito in un processo di compatibilità. Pertanto, il processo deve essere creato usando CREATE_BREAKAWAY_FROM_JOB prima di poter essere inserito in un altro processo. In alternativa, è possibile incorporare un manifesto dell'applicazione che specifica un livello di controllo dell'account utente nell'applicazione e PCA non aggiungerà il processo al processo di compatibilità. Per altre informazioni, vedere Requisiti di sviluppo delle applicazioni per la compatibilità del controllo dell'account utente.

Se il processo o uno dei processi padre nella catena di processi termina quando viene chiamato AssignProcessToJob , la funzione ha esito negativo.

Per compilare un'applicazione che usa questa funzione, definire _WIN32_WINNT come 0x0500 o versione successiva. Per altre informazioni, vedere Uso delle intestazioni di Windows.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione jobapi2.h (include Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CreateJobObject

CreateProcess

Oggetti processo

OpenJobObject

Funzioni di processi e thread

SetInformationJobObject