Freigeben über


AssignProcessToJobObject-Funktion (jobapi2.h)

Weist einem vorhandenen Auftragsobjekt einen Prozess zu.

Syntax

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

Parameter

[in] hJob

Ein Handle für das Auftragsobjekt, dem der Prozess zugeordnet wird. Die CreateJobObject- oder OpenJobObject-Funktion gibt dieses Handle zurück. Das Handle muss über das zugriffsrecht JOB_OBJECT_ASSIGN_PROCESS verfügen. Weitere Informationen finden Sie unter Auftragsobjektsicherheit und Zugriffsrechte.

[in] hProcess

Ein Handle für den Prozess, der dem Auftragsobjekt zugeordnet werden soll. Das Handle muss über die zugriffsrechte PROCESS_SET_QUOTA und PROCESS_TERMINATE verfügen. Weitere Informationen finden Sie unter Prozesssicherheit und Zugriffsrechte.

Wenn der Prozess bereits einem Auftrag zugeordnet ist, muss der von hJob angegebene Auftrag leer sein, oder er muss sich in der Hierarchie der geschachtelten Aufträge befinden, zu der der Prozess bereits gehört, und es können keine Benutzeroberflächengrenzwerte festgelegt sein (SetInformationJobObject mit JobObjectBasicUIRestrictions). Weitere Informationen finden Sie in den Hinweisen.

Windows 7, Windows Server 2008 R2, Windows XP mit SP3, Windows Server 2008, Windows Vista und Windows Server 2003: Der Prozess darf nicht bereits einem Auftrag zugewiesen sein; wenn dies der Grund ist, schlägt die Funktion mit ERROR_ACCESS_DENIED fehl. Dieses Verhalten hat sich ab Windows 8 und Windows Server 2012 geändert.

Terminaldienste: Alle Prozesse innerhalb eines Auftrags müssen innerhalb derselben Sitzung wie der Auftrag ausgeführt werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Nachdem Sie einen Prozess einem Auftragsobjekt mithilfe von AssignProcessToJobObject zugeordnet haben, unterliegt der Prozess den für den Auftrag festgelegten Grenzwerten. Verwenden Sie die SetInformationJobObject-Funktion , um Grenzwerte für einen Auftrag festzulegen.

Wenn der Auftrag über ein Zeitlimit im Benutzermodus verfügt und das Zeitlimit ausgeschöpft wurde, schlägt AssignProcessToJobObject fehl, und der angegebene Prozess wird beendet. Wenn das Zeitlimit durch Zuordnen des Prozesses überschritten würde, ist AssignProcessToJobObject weiterhin erfolgreich. Die Fristverletzung wird jedoch gemeldet. Wenn der Auftrag über einen Aktiven Prozessgrenzwert verfügt und der Grenzwert durch Zuordnen dieses Prozesses überschritten würde, schlägt AssignProcessToJobObject fehl, und der angegebene Prozess wird beendet.

Speichervorgänge, die von einem Prozess ausgeführt werden, der einem Auftrag zugeordnet ist, der über ein Arbeitsspeicherlimit verfügt, unterliegen dem Arbeitsspeicherlimit. Speichervorgänge, die vom Prozess ausgeführt wurden, bevor er dem Auftrag zugeordnet wurde, werden von AssignProcessToJobObject nicht untersucht.

Wenn der Prozess bereits ausgeführt wird und der Auftrag Sicherheitseinschränkungen aufweist, schlägt AssignProcessToJobObject möglicherweise fehl. Wenn z. B. das primäre Token des Prozesses die lokale Administratorgruppe enthält, das Auftragsobjekt jedoch über die Sicherheitseinschränkung JOB_OBJECT_SECURITY_NO_ADMIN verfügt, schlägt die Funktion fehl. Wenn der Auftrag über die Sicherheitsbeschränkung JOB_OBJECT_SECURITY_ONLY_TOKEN verfügt, muss der Prozess angehalten erstellt werden. Um einen angehaltenen Prozess zu erstellen, rufen Sie die CreateProcess-Funktion mit dem flag CREATE_SUSPENDED auf.

Ein Prozess kann mehreren Aufträgen in einer Hierarchie von geschachtelten Aufträgen zugeordnet werden. Für Prioritätsklasse, Affinität, Commit-Gebühr, Ausführungszeitlimit pro Prozess, Zeitlimit für Planungsklassen und Minimum und Maximum des Arbeitssatzes erbt der Prozess eine effektive Grenze, die die restriktivste Grenze aller Aufträge in seiner übergeordneten Auftragskette darstellt. Bei anderen Ressourcengrenzwerten erbt der Prozess Grenzwerte von seinem unmittelbaren Auftrag in der Hierarchie. Buchhaltungsinformationen werden dem unmittelbaren Auftrag hinzugefügt und in jedem übergeordneten Auftrag in der Auftragskette aggregiert. Standardmäßig sind alle untergeordneten Prozesse dem unmittelbaren Auftrag und jedem Auftrag in der übergeordneten Auftragskette zugeordnet. Um einen untergeordneten Prozess zu erstellen, der nicht Teil derselben Auftragskette ist, rufen Sie die CreateProcess-Funktion mit dem flag CREATE_BREAKAWAY_FROM_JOB auf. Der untergeordnete Prozess löst sich von jedem Auftrag in der Auftragskette ab, es sei denn, ein Auftrag in der Kette lässt keine Unterbrechung zu. In diesem Fall wird der untergeordnete Prozess nicht von diesem Auftrag oder einem auftrag darüber stehenden Auftrag in der Auftragskette getrennt. Weitere Informationen finden Sie unter Geschachtelte Aufträge.

Windows 7, Windows Server 2008 R2, Windows XP mit SP3, Windows Server 2008, Windows Vista und Windows Server 2003: Ein Prozess kann nur einem einzelnen Auftrag zugeordnet werden. Ein Prozess erbt Grenzwerte vom Auftrag, dem er zugeordnet ist, und fügt dem Auftrag seine Buchhaltungsinformationen hinzu. Wenn ein Prozess einem Auftrag zugeordnet ist, werden standardmäßig alle untergeordneten Prozesse, die er erstellt, diesem Auftrag zugeordnet. Um einen untergeordneten Prozess zu erstellen, der nicht Teil desselben Auftrags ist, rufen Sie die CreateProcess-Funktion mit dem flag CREATE_BREAKAWAY_FROM_JOB auf. Ein Prozess kann ab Windows 8 und Windows Server 2012 mehreren Aufträgen zugeordnet werden.

Windows 7, Windows Server 2008 R2, Windows Server 2008 und Windows Vista: Wenn der Prozess vom Programmkompatibilitäts-Assistenten (PcA) überwacht wird, wird er in einen Kompatibilitätsauftrag eingefügt. Daher muss der Prozess mit CREATE_BREAKAWAY_FROM_JOB erstellt werden, bevor er in einem anderen Auftrag platziert werden kann. Alternativ können Sie ein Anwendungsmanifest einbetten, das eine Benutzerkontensteuerungsstufe (UAC) in Ihrer Anwendung angibt. PcA fügt den Prozess dem Kompatibilitätsauftrag nicht hinzu. Weitere Informationen finden Sie unter Anwendungsentwicklungsanforderungen für die Kompatibilität der Benutzerkontensteuerung.

Wenn der Auftrag oder einer seiner übergeordneten Aufträge in der Auftragskette beendet wird, wenn AssignProcessToJob aufgerufen wird, schlägt die Funktion fehl.

Um eine Anwendung zu kompilieren, die diese Funktion verwendet, definieren Sie _WIN32_WINNT als 0x0500 oder höher. Weitere Informationen finden Sie unter Verwenden der Windows-Header.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile jobapi2.h (windows.h einschließen)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CreateJobObject

CreateProcess

Auftragsobjekte

OpenJobObject

Prozess- und Threadfunktionen

SetInformationJobObject