Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die ZwCreateEnlistment-Routine erstellt ein neues Enlistment-Objekt für eine Transaktion.
Syntax
NTSYSCALLAPI NTSTATUS ZwCreateEnlistment(
[out] PHANDLE EnlistmentHandle,
[in] ACCESS_MASK DesiredAccess,
[in] HANDLE ResourceManagerHandle,
[in] HANDLE TransactionHandle,
[in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
[in, optional] ULONG CreateOptions,
[in] NOTIFICATION_MASK NotificationMask,
[in, optional] PVOID EnlistmentKey
);
Parameter
[out] EnlistmentHandle
Ein Zeiger auf eine vom Aufrufer zugewiesene Variable, die ein Handle für das neue Enlistment-Objekt empfängt, wenn der Aufruf von ZwCreateEnlistment erfolgreich ist.
[in] DesiredAccess
Ein ACCESS_MASK Wert, der den vom Aufrufer angeforderten Zugriff auf das Enlistment-Objekt angibt. Zusätzlich zu den Zugriffsrechten, die für alle Arten von Objekten definiert sind (siehe ACCESS_MASK), kann der Aufrufer eines der folgenden Zugriffsberechtigungsflags für Einlistungsobjekte angeben:
| ACCESS_MASK Flag | Ermöglicht dem Aufrufer die |
|---|---|
| ENLISTMENT_QUERY_INFORMATION | Abfrageinformationen zur Einlistung (siehe ZwQueryInformationEnlistment). |
| ENLISTMENT_SET_INFORMATION | Legen Sie Informationen für die Einlistung fest (siehe ZwSetInformationEnlistment). |
| ENLISTMENT_RECOVER | Wiederherstellen der Einlistung (siehe ZwRecoverEnlistment). |
| ENLISTMENT_SUBORDINATE_RIGHTS | Führen Sie Vorgänge aus, die ein Ressourcen-Manager ausführt, der nicht überlegen ist (siehe ZwRollbackEnlistment, ZwPrePrepareComplete, ZwPrepareComplete, ZwCommitComplete, ZwRollbackComplete, ZwSinglePhaseReject, ZwReadOnlyEnlistment). |
| ENLISTMENT_SUPERIOR_RIGHTS | Führen Sie Vorgänge aus, die ein höherer Transaktions-Manager ausführen muss (siehe ZwPrepareEnlistment, ZwPrePrepareEnlistment, ZwCommitEnlistment). |
Alternativ können Sie eine oder mehrere der folgenden ACCESS_MASK Bitmaps angeben. Diese Bitmaps kombinieren die Flags aus der vorherigen Tabelle mit den STANDARD_RIGHTS_XXX-Flags , die auf der ACCESS_MASK Referenzseite beschrieben werden. Sie können diese Bitmaps auch mit zusätzlichen Flags aus der vorherigen Tabelle kombinieren. Die folgende Tabelle zeigt, wie die Bitmaps bestimmten Zugriffsrechten entsprechen.
| Generisches Zugriffsrecht | Satz bestimmter Zugriffsrechte |
|---|---|
| ENLISTMENT_GENERIC_READ | STANDARD_RIGHTS_READ und ENLISTMENT_QUERY_INFORMATION |
| ENLISTMENT_GENERIC_WRITE | STANDARD_RIGHTS_WRITE, ENLISTMENT_SET_INFORMATION, ENLISTMENT_RECOVER, ENLISTMENT_REFERENCE, ENLISTMENT_SUBORDINATE_RIGHTS und ENLISTMENT_SUPERIOR_RIGHTS |
| ENLISTMENT_GENERIC_EXECUTE | STANDARD_RIGHTS_EXECUTE, ENLISTMENT_RECOVER, ENLISTMENT_SUBORDINATE_RIGHTS und ENLISTMENT_SUPERIOR_RIGHTS |
| ENLISTMENT_ALL_ACCESS | STANDARD_RIGHTS_REQUIRED, ENLISTMENT_GENERIC_READ, ENLISTMENT_GENERIC_WRITE und ENLISTMENT_GENERIC_EXECUTE |
[in] ResourceManagerHandle
Ein Handle für das Ressourcen-Manager-Objekt des Aufrufers, das durch einen vorherigen Aufruf von ZwCreateResourceManager oder ZwOpenResourceManager abgerufen wurde.
[in] TransactionHandle
Ein Handle für ein Transaktionsobjekt , das durch einen vorherigen Aufruf von ZwCreateTransaction oder ZwOpenTransaction abgerufen wurde. KTM fügt diese Transaktion der Liste der Transaktionen hinzu, die der aufrufende Ressourcen-Manager verarbeitet.
[in, optional] ObjectAttributes
Ein Zeiger auf eine OBJECT_ATTRIBUTES-Struktur , die den Objektnamen und andere Attribute angibt. Verwenden Sie die InitializeObjectAttributes-Routine , um diese Struktur zu initialisieren. Wenn der Aufrufer nicht in einem Systemthreadkontext ausgeführt wird, muss er das attribut OBJ_KERNEL_HANDLE festlegen, wenn initializeObjectAttributes aufgerufen wird. Dieser Parameter ist optional und kann NULL sein.
[in, optional] CreateOptions
Enlistment-Optionsflags. Die folgende Tabelle enthält das einzige verfügbare Flag.
| CreateOptions-Flag | Bedeutung |
|---|---|
| ENLISTMENT_SUPERIOR | Der Aufrufer wird als überlegener Transaktions-Manager für die angegebene Transaktion angezeigt. |
Dieser Parameter ist optional und kann null sein.
[in] NotificationMask
Ein bitweiser OR mit TRANSACTION_NOTIFY_XXX-Werten , die in Ktmtypes.h definiert sind. Diese Maske gibt die Arten von Transaktionsbenachrichtigungen an, die KTM an den Aufrufer sendet.
[in, optional] EnlistmentKey
Ein Zeiger auf vom Aufrufer definierte Informationen, die die Einlist eindeutig identifizieren. Der Ressourcen-Manager empfängt diesen Zeiger, wenn er ZwGetNotificationResourceManager aufruft oder wenn KTM die ResourceManagerNotification-Rückrufroutine aufruft. Der Ressourcen-Manager kann eine Referenzanzahl für diesen Schlüssel verwalten, indem er TmReferenceEnlistmentKey und TmDereferenceEnlistmentKey aufruft. Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
ZwCreateEnlistment gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Routine möglicherweise einen der folgenden Werte zurück:
| Rückgabecode | Beschreibung |
|---|---|
|
Ein Objekthandle ist ungültig. |
|
Der Wert des CreateOptions- oder NotificationMask-Parameters ist ungültig, oder KTM konnte die Transaktion, die der TransactionHandle-Parameter angibt, nicht finden. |
|
Fehler bei der Speicherzuweisung. |
|
Fehler bei der Einlistung, da sich KTM oder der Ressourcenmanager nicht in einem betriebsfähigen Zustand befinden. |
|
Fehler bei der Einlistung, da die Transaktion, die vom TransactionHandle-Parameter angegeben wird, nicht aktiv ist. |
|
Der Aufrufer hat versucht, sich als überlegener Transaktionsmanager zu registrieren, aber ein überlegener Transaktionsmanager ist bereits vorhanden. |
|
Der Aufrufer versucht, sich als überlegener Transaktions-Manager zu registrieren, aber das Ressourcen-Manager-Objekt des Aufrufers ist volatil , während das zugehörige Transaktions-Manager-Objekt nicht volatil ist. |
|
Der Wert des DesiredAccess-Parameters ist ungültig. |
Die Routine gibt möglicherweise andere NTSTATUS-Werte zurück.
Hinweise
Ein Ressourcen-Manager ruft ZwCreateEnlistment auf, um sich in eine Transaktion ein eintragen zu können.
Ressourcenmanager, die nicht überlegen sind, müssen das flag ENLISTMENT_SUBORDINATE_RIGHTS in ihrer Zugriffsmaske enthalten.
Übergeordnete Transaktionsmanager müssen das ENLISTMENT_SUPERIOR_RIGHTS-Flag in ihre Zugriffsmasken aufnehmen. In der Regel enthält ein überlegener Transaktions-Manager Code, der ZwRollbackEnlistment aufruft. Daher muss er auch das flag ENLISTMENT_SUBORDINATE_RIGHTS enthalten.
Ein Ressourcen-Manager, der ZwCreateEnlistment aufruft , muss schließlich ZwClose aufrufen, um das Objekthandle zu schließen.
Ihr Ressourcen-Manager kann den EnlistmentKey-Parameter verwenden, um jeder Enlist einen eindeutigen Wert zuzuweisen, z. B. einen Zeiger auf eine Datenstruktur, die Informationen zur Enlistment enthält. Wenn der Ressourcen-Manager beispielsweise das Handle des Einlistungsobjekts in der Struktur speichert, kann der Ressourcen-Manager die folgenden Schritte ausführen:
- Rufen Sie ZwGetNotificationResourceManager auf, um eine Benachrichtigung abzurufen.
- Rufen Sie den Wert des Auflistungsschlüssels aus der TRANSACTION_NOTIFICATION-Struktur ab.
- Verwenden Sie den Auflistungsschlüssel, um das handle des gespeicherten Eintragsobjekts zu suchen.
- Rufen Sie Routinen auf, die das Enlistment-Handle als Eingabe erfordern, z. B. ZwCommitComplete oder ZwRollbackComplete.
Bei Aufrufen von Kernelmodustreibern können sich die NtXxx - und ZwXxx-Versionen einer Windows Native System Services-Routine anders verhalten, da sie Eingabeparameter verarbeiten und interpretieren. Weitere Informationen zur Beziehung zwischen den Nt Xxx- und ZwXxx-Versionen einer Routine finden Sie unter Verwenden von Nt- und Zw-Versionen der Systemdienstroutinen.
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) | Verfügbar in Windows Vista und höheren Betriebssystemversionen. |
| Zielplattform | Universell |
| Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
| Bibliothek | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | PASSIVE_LEVEL |
| DDI-Complianceregeln | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
Weitere Informationen
Verwenden von Nt- und Zw-Versionen der Systemdienstroutinen