Freigeben über


NtEnumerateTransactionObject-Funktion (wdm.h)

Die ZwEnumerateTransactionObject Routine listet die KTM-Objekte auf einem Computer auf.

Syntax

__kernel_entry NTSYSCALLAPI NTSTATUS NtEnumerateTransactionObject(
  [in, optional] HANDLE            RootObjectHandle,
  [in]           KTMOBJECT_TYPE    QueryType,
  [in, out]      PKTMOBJECT_CURSOR ObjectCursor,
  [in]           ULONG             ObjectCursorLength,
  [out]          PULONG            ReturnLength
);

Parameter

[in, optional] RootObjectHandle

Ein Handle zu einem KTM-Objekt. Die Routine listet die untergeordneten Objekte des angegebenen Objekts auf. Dieser Parameter ist optional und kann NULL-werden. Weitere Informationen zu gültigen Werten für diesen Parameter finden Sie in der Tabelle im folgenden Abschnitt "Hinweise".

[in] QueryType

Ein KTMOBJECT_TYPE-typed-Wert, der den zu aufzählden Objekttyp identifiziert. Weitere Informationen zu gültigen Werten für diesen Parameter finden Sie in der Tabelle im folgenden Abschnitt "Hinweise".

[in, out] ObjectCursor

Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer, der mit einer KTMOBJECT_CURSOR Struktur beginnt. ZwEnumerateTransactionObject verwendet den Puffer, um die GUIDs der gefundenen Objekte zu speichern.

[in] ObjectCursorLength

Die Länge des Puffers in Byte, auf den ObjectCursor verweist.

[out] ReturnLength

Ein Zeiger auf einen vom Aufrufer zugewiesenen Speicherort, der die Anzahl der Bytes empfängt, die ZwEnumerateTransactionObject im ObjectCursor- Puffer zurückgibt, einschließlich der Länge der KTMOBJECT_CURSOR Struktur und der Länge aller zurückgegebenen GUIDs.

Rückgabewert

ZwEnumerateTransactionObject gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist, die Routine jedoch nicht alle Objekte aufgezählt hat. Wenn es keine weiteren Objekte gibt, die aufgezählt werden sollen, gibt die Routine STATUS_NO_MORE_ENTRIES zurück. Andernfalls gibt diese Routine möglicherweise einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER Der Wert des QueryType oder ObjectCursorLength Parameter ist ungültig.
STATUS_OBJECT_TYPE_MISMATCH Das Handle, das der RootObjectHandle--Parameter angibt, ist kein Handle für ein gültiges KTM-Objekt.
STATUS_INVALID_HANDLE Ein Objekthandle ist ungültig.
STATUS_ACCESS_DENIED Der Aufrufer hat keinen geeigneten Zugriff auf die Objekte, die aufgezählt werden.

Die Routine gibt möglicherweise andere NTSTATUS-Wertezurück.

Bemerkungen

Die folgende Tabelle enthält die gültigen Werte für die parameter RootObjectHandle und QueryType.

QueryType-Parameter RootObjectHandle-Parameter Aufgezählte Objekte
KTMOBJECT_TRANSACTION_MANAGER NULL- Alle Transaktions-Manager-Objekte
KTMOBJECT_RESOURCE_MANAGER Ein Handle für ein Transaktions-Manager-Objekt. Das Handle muss über TRANSACTIONMANAGER_QUERY_INFORMATION Zugriff auf das Objekt verfügen. Alle Ressourcen-Manager-Objekte, die zum angegebenen Transaktions-Manager-Objekt gehören
KTMOBJECT_ENLISTMENT Ein Handle für ein Ressourcen-Manager-Objekt. Das Handle muss über RESOURCEMANAGER_QUERY_INFORMATION Zugriff auf das Objekt verfügen. Alle Enlistment-Objekte, die zum angegebenen Ressourcen-Manager-Objekt gehören
KTMOBJECT_TRANSACTION Ein Handle für ein Transaktions-Manager-Objekt. Das Handle muss über TRANSACTIONMANAGER_QUERY_INFORMATION Zugriff auf das Objekt verfügen. Alle Transaktionsobjekte, die zum angegebenen Transaktions-Manager-Objekt gehören
KTMOBJECT_TRANSACTION NULL- Alle Transaktionsobjekte, die zu allen Transaktions-Manager-Objekten gehören

Die meisten TPS-Komponenten müssen nicht ZwEnumerateTransactionObject-aufrufen, aber die Routine kann nützlich sein, wenn Sie ein Debugging-Hilfsprogramm schreiben müssen.

Bevor die Komponente ZwEnumerateTransactionObject-aufruft, muss sie den Puffer zuweisen und null, auf den ObjectCursor verweist. Das GUID-Array des Puffers kann groß genug sein, um ein oder mehrere Elemente zu empfangen.

Zum Aufzählen aller KTM-Objekte des angegebenen Typs muss ihre Komponente ZwEnumerateTransactionObject wiederholt aufrufen, bis sie STATUS_NO_MORE_ENTRIES zurückgibt.

Jedes Mal, wenn die Routine aufgerufen wird, füllt sie das GUID-Array des Puffers mit so vielen Objekt-GUIDs, die passen. Nach jedem Aufruf kann ihre Komponente die ObjectIdCount- Member der KTMOBJECT_CURSOR Struktur verwenden, um die Anzahl der Objekt-GUIDs zu bestimmen, die die Routine im Array gespeichert hat.

NtEnumerateTransactionObject und ZwEnumerateTransactionObject sind zwei Versionen derselben Windows Native System Services-Routine.

Bei Aufrufen von Kernelmodustreibern können sich die NtXxx und ZwXxx- Versionen einer Windows Native System Services-Routine anders verhalten, wie sie Eingabeparameter behandeln und interpretieren. Weitere Informationen zur Beziehung zwischen den NtXxx und ZwXxx- Versionen einer Routine finden Sie unter Using Nt and Zw Versions of the Native System Services Routines.

Beispiele

Das folgende Codebeispiel zeigt, wie sie alle Transaktionsobjekte auf einem Computer aufzählen. In diesem Beispiel enthält das GUID-Array der KTMOBJECT_CURSOR-Struktur nur ein Element, sodass jeder Aufruf von ZwEnumerateTransactionObject eine GUID zurückgibt. Die Routine erstellt eine Unicode-Zeichenfolge aus der GUID und zeigt die Zeichenfolge an.

NTSTATUS Status;
UNICODE_STRING GuidString;
KTMOBJECT_CURSOR Cursor;
ULONG ReturnedBytes;

RtlZeroMemory(&Cursor, sizeof(Cursor));

do {
    Status = ZwEnumerateTransactionObject(
                                          NULL,
                                          KTMOBJECT_TRANSACTION,
                                          &Cursor,
                                          sizeof(Cursor),
                                          &ReturnedBytes
                                          );

    if (Status != STATUS_NO_MORE_ENTRIES) {
        RtlStringFromGUID(
                          &Cursor.ObjectIds[0],
                          &GuidString
                          );
        OutputMessage(GuidString.Buffer);
        OutputMessage(L"\r\n");
        RtlFreeUnicodeString(&GuidString);
    }
} while (Status == STATUS_SUCCESS);
if (Status == STATUS_NO_MORE_ENTRIES) {
    Status = STATUS_SUCCESS;
}

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs, PowerIrpDDis

Siehe auch

KTMOBJECT_CURSOR

KTMOBJECT_TYPE

Verwenden von Nt- und Zw-Versionen der systemeigenen Systemdienste-Routinen