Condividi tramite


Funzione ZwEnumerateTransactionObject (wdm.h)

La routine ZwEnumerateTransactionObject enumera gli oggetti KTM in un computer.

Sintassi

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

Parametri

[in, optional] RootObjectHandle

Handle per un oggetto KTM. La routine enumera gli oggetti figlio dell'oggetto specificato. Questo parametro è facoltativo e può essere NULL. Per altre informazioni sui valori validi per questo parametro, vedere la tabella nella sezione Osservazioni seguenti.

[in] QueryType

Valore KTMOBJECT_TYPE tipizzato che identifica il tipo di oggetto da enumerare. Per altre informazioni sui valori validi per questo parametro, vedere la tabella nella sezione Osservazioni seguenti.

[in, out] ObjectCursor

Puntatore a un buffer allocato del chiamante che inizia con una struttura KTMOBJECT_CURSOR . ZwEnumerateTransactionObject usa il buffer per archiviare i GUID degli oggetti trovati.

[in] ObjectCursorLength

Lunghezza, in byte, del buffer a cui ObjectCursor punta.

[out] ReturnLength

Puntatore a una posizione allocata del chiamante che riceve il numero di byte restituiti da ZwEnumerateTransactionObject nel buffer ObjectCursor , inclusa la lunghezza della struttura KTMOBJECT_CURSOR e la lunghezza di tutti i GUID restituiti.

Valore restituito

ZwEnumerateTransactionObject restituisce STATUS_SUCCESS se l'operazione ha esito positivo, ma la routine non ha enumerato tutti gli oggetti. Se non sono presenti più oggetti da enumerare, la routine restituisce STATUS_NO_MORE_ENTRIES. In caso contrario, questa routine potrebbe restituire uno dei valori seguenti:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER Il valore del parametro QueryType o ObjectCursorLength non è valido.
STATUS_OBJECT_TYPE_MISMATCH L'handle specificato dal parametro RootObjectHandle non è un handle per un oggetto KTM valido.
STATUS_INVALID_HANDLE Un handle oggetto non è valido.
STATUS_ACCESS_DENIED Il chiamante non dispone dell'accesso appropriato agli oggetti che vengono enumerati.

La routine potrebbe restituire altri valori NTSTATUS.

Commenti

La tabella seguente contiene i valori validi per i parametri RootObjectHandle e QueryType .

Parametro QueryType Parametro RootObjectHandle Oggetti enumerati
KTMOBJECT_TRANSACTION_MANAGER NULL Tutti gli oggetti di Gestione transazioni
KTMOBJECT_RESOURCE_MANAGER Handle a un oggetto di gestione transazioni. L'handle deve avere TRANSACTIONMANAGER_QUERY_INFORMATION accesso all'oggetto. Tutti gli oggetti di Resource Manager appartenenti all'oggetto di gestione transazioni specificato
KTMOBJECT_ENLISTMENT Handle a un oggetto resource manager. L'handle deve avere RESOURCEMANAGER_QUERY_INFORMATION accesso all'oggetto. Tutti gli oggetti di inserimento appartenenti all'oggetto resource manager specificato
KTMOBJECT_TRANSACTION Handle a un oggetto di gestione transazioni. L'handle deve avere TRANSACTIONMANAGER_QUERY_INFORMATION accesso all'oggetto. Tutti gli oggetti transazioni appartenenti all'oggetto di gestione transazioni specificato
KTMOBJECT_TRANSACTION NULL Tutti gli oggetti transazioni che appartengono a tutti gli oggetti di gestione transazioni

La maggior parte dei componenti TPS non deve chiamare ZwEnumerateTransactionObject, ma la routine potrebbe essere utile se è necessario scrivere un'utilità di debug.

Prima che il componente chiami ZwEnumerateTransactionObject, deve allocare e zero il buffer a cui Punta ObjectCursor . La matrice GUID del buffer può essere abbastanza grande per ricevere uno o più elementi.

Per enumerare tutti gli oggetti KTM del tipo specificato, il componente deve chiamare ripetutamente ZwEnumerateTransactionObject finché non restituisce STATUS_NO_MORE_ENTRIES.

Ogni volta che viene chiamata la routine, riempie la matrice GUID del buffer con il numero di GUID dell'oggetto che si adatta. Dopo ogni chiamata, il componente può usare il membro ObjectIdCount della struttura KTMOBJECT_CURSOR per determinare il numero di GUID oggetto archiviati nella matrice.

NtEnumerateTransactionObject e ZwEnumerateTransactionObject sono due versioni della stessa routine di Windows Native System Services.

Per le chiamate dai driver in modalità kernel, le versioni NtXxx e ZwXxx di una routine di Windows Native System Services possono comportarsi in modo diverso nel modo in cui gestiscono e interpretano i parametri di input. Per altre informazioni sulla relazione tra le versioni NtXxx e ZwXxx di una routine, vedere Uso di nt e zw versioni delle routine di Servizi di sistema nativo.

Esempio

Nell'esempio di codice seguente viene illustrato come enumerare tutti gli oggetti transazioni in un computer. In questo esempio la matrice GUID della struttura di KTMOBJECT_CURSOR contiene un solo elemento, quindi ogni chiamata a ZwEnumerateTransactionObject restituisce un GUID. La routine crea una stringa Unicode dal GUID e visualizza la stringa.

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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Vedi anche

KTMOBJECT_CURSOR

KTMOBJECT_TYPE

Uso di nt e zw versioni delle routine di Servizi di sistema nativo