JOBOBJECT_ASSOCIATE_COMPLETION_PORT Struktur (winnt.h)
Enthält Informationen, die zum Zuordnen eines Abschlussports zu einem Auftrag verwendet werden. Sie können einen Abschlussport einem Auftrag zuordnen.
Syntax
typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
PVOID CompletionKey;
HANDLE CompletionPort;
} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
Angehörige
CompletionKey
Der wert, der im dwCompletionKey Parameter von PostQueuedCompletionStatus, wenn Nachrichten im Auftrag des Auftrags gesendet werden.
CompletionPort
Der Abschlussport, der im Parameter CompletionPort des PostQueuedCompletionStatus Funktion verwendet werden soll, wenn Nachrichten im Auftrag des Auftrags gesendet werden.
Windows 8 und neuer, Windows Server 2012 und höher: Geben Sie NULL- an, um die Zuordnung zwischen dem aktuellen Abschlussport und dem Auftrag zu entfernen.
Bemerkungen
Das System sendet Nachrichten an den E/A-Abschlussport, der einem Auftrag zugeordnet ist, wenn bestimmte Ereignisse auftreten. Wenn der Auftrag geschachtelt ist, wird die Nachricht an jeden E/A-Vervollständigungsport gesendet, der einem Auftrag in der übergeordneten Auftragskette des Auftrags zugeordnet ist, der die Nachricht ausgelöst hat. Alle Nachrichten werden direkt vom Auftrag gesendet, als ob der Auftrag die PostQueuedCompletionStatus- funktion aufgerufen hatte.
Beachten Sie, dass Nachrichten mit Ausnahme von Grenzwerten, die mit der JobObjectNotificationLimitInformation Informationsklasse festgelegt sind, nur als Benachrichtigungen vorgesehen sind und die Übermittlung an den Abschlussport nicht garantiert ist. Der Fehler einer Nachricht, die am Abschlussport eintrifft, bedeutet nicht unbedingt, dass das Ereignis nicht aufgetreten ist. Benachrichtigungen für Grenzwerte, die mit JobObjectNotificationLimitInformation festgelegt sind, werden garantiert am Abschlussport ankommen.
Ein Thread muss den Abschlussport mithilfe der GetQueuedCompletionStatus- Funktion überwachen, um die Nachrichten aufzunehmen. Der Thread empfängt Informationen in der GetQueuedCompletionStatus Parametern in der folgenden Tabelle.
Parameter | Empfangene Informationen |
---|---|
lpCompletionKey- | Der in CompletionKey angegebene Wert während der Vervollständigungsportzuordnung. Wenn ein Vervollständigungsport mehreren Aufträgen zugeordnet ist, sollte CompletionKey- dem Anrufer helfen, zu bestimmen, welcher Vervollständigungsport eine Nachricht sendet. |
lpOverlapped- | Nachrichtenspezifischer Wert. Weitere Informationen finden Sie in der folgenden Tabelle mit Nachrichtenbezeichnern. |
LpNumberOfBytes- | Der Nachrichtenbezeichner, der angibt, welches auftragsbezogene Ereignis aufgetreten ist. Weitere Informationen finden Sie in der folgenden Tabelle mit Nachrichtenbezeichnern. |
Die folgenden Nachrichten können an den Abschlussport gesendet werden. Beachten Sie, dass Sie für Nachrichten, die einen Prozessbezeichner zurückgeben, nicht garantieren können, dass dieser Prozess noch aktiv ist oder dass der Bezeichner nicht wiederverwendet wurde (nach beendigung einem neuen Prozess zugewiesen), es sei denn, Sie pflegen ein offenes Handle für den Prozess.
Nachrichtenbezeichner | Beschreibung |
---|---|
JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS |
Gibt an, dass ein Prozess, der dem Auftrag zugeordnet ist, mit einem Beendigungscode verbunden ist, der einen ungewöhnlichen Exit angibt (siehe die Liste, die dieser Tabelle folgt).
Der Wert lpOverlapped ist der Bezeichner des beendigungsvorgangs. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT |
Gibt an, dass der aktive Prozessgrenzwert überschritten wurde.
Der Wert lpOverlapped- ist NULL. |
JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO |
Gibt an, dass die Anzahl der aktiven Prozesse auf 0 erhöht wurde. Wenn der Auftrag derzeit über zwei aktive Prozesse verfügt, sendet das System diese Nachricht, nachdem beide beendet wurden.
Der Wert lpOverlapped- ist NULL. |
JOB_OBJECT_MSG_END_OF_JOB_TIME |
Gibt an, dass die Option JOB_OBJECT_POST_AT_END_OF_JOB wirksam ist und das End-of-Job-Zeitlimit erreicht wurde. Beim Veröffentlichen dieser Nachricht wird das Zeitlimit abgebrochen, und die Prozesse des Auftrags können weiterhin ausgeführt werden.
Der Wert lpOverlapped- ist NULL. |
JOB_OBJECT_MSG_END_OF_PROCESS_TIME |
Gibt an, dass ein Prozess ein Zeitlimit pro Prozess überschritten hat. Das System sendet diese Nachricht, nachdem die Beendigung des Prozesses angefordert wurde.
Der Wert lpOverlapped ist der Bezeichner des Prozesses, der seinen Grenzwert überschritten hat. |
JOB_OBJECT_MSG_EXIT_PROCESS |
Gibt an, dass ein prozess, der dem Auftrag zugeordnet ist, beendet wurde.
Der Wert lpOverlapped ist der Bezeichner des beendigungsvorgangs. |
JOB_OBJECT_MSG_JOB_MEMORY_LIMIT |
Gibt an, dass ein Prozess, der dem Auftrag zugeordnet ist, dazu führte, dass der Auftrag den auftragsweiten Speichergrenzwert überschreitet (wenn ein Vorgang wirksam ist).
Der Wert lpOverlapped gibt den Bezeichner des Prozesses an, der versucht hat, den Grenzwert zu überschreiten. Das System sendet diese Meldung nicht, wenn der Prozess noch nicht seinen Prozessbezeichner gemeldet hat. |
JOB_OBJECT_MSG_NEW_PROCESS |
Gibt an, dass dem Auftrag ein Prozess hinzugefügt wurde. Prozesse, die einem Auftrag hinzugefügt werden, wenn ein Abschlussport zugeordnet ist, werden ebenfalls gemeldet.
Der Wert lpOverlapped ist der Bezeichner des Prozesses, der dem Auftrag hinzugefügt wurde. |
JOB_OBJECT_MSG_NOTIFICATION_LIMIT |
Gibt an, dass ein Prozess, der einem Auftrag zugeordnet ist, der für Ressourcenlimitbenachrichtigungen registriert wurde, mindestens einen Grenzwert überschritten hat. Verwenden Sie die QueryInformationJobObject Funktion mit JobObjectLimitViolationInformation, um zu bestimmen, welcher Grenzwert überschritten wurde.
Der Wert lpOverlapped ist der Bezeichner des Prozesses, der seinen Grenzwert überschritten hat. Das System sendet diese Meldung nicht, wenn der Prozess noch nicht seinen Prozessbezeichner gemeldet hat. |
JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT |
Gibt an, dass ein prozess, der dem Auftrag zugeordnet ist, seinen Speichergrenzwert überschritten hat (wenn ein Prozess wirksam ist).
Der Wert lpOverlapped ist der Bezeichner des Prozesses, der seinen Grenzwert überschritten hat. Das System sendet diese Meldung nicht, wenn der Prozess noch nicht seinen Prozessbezeichner gemeldet hat. |
Die folgenden Beendigungscodes deuten auf einen abnormen Exit hin:
Sie müssen vorsichtig sein, wenn Sie die JOB_OBJECT_MSG_NEW_PROCESS und JOB_OBJECT_MSG_EXIT_PROCESS Nachrichten verwenden, da Rennbedingungen auftreten können. Wenn Prozesse z. B. aktiv innerhalb eines Auftrags beginnen und verlassen, und Sie gerade einen Abschlussport dem Auftrag zuweisen, verpassen Sie möglicherweise Nachrichten für Prozesse, deren Status sich während der Zuordnung des Abschlussports ändern. Aus diesem Grund empfiehlt es sich, einen Abschlussport einem Auftrag zuzuordnen, wenn der Auftrag inaktiv ist.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows Server 2003 [Nur Desktop-Apps] |
Header- | winnt.h (enthalten Windows.h) |