Compartilhar via


Função NtEnumerateTransactionObject (wdm.h)

A rotina de ZwEnumerateTransactionObject enumera os objetos KTM em um computador.

Sintaxe

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

Parâmetros

[in, optional] RootObjectHandle

Um identificador para um objeto KTM. A rotina enumera os objetos filho do objeto especificado. Esse parâmetro é opcional e pode ser NULL. Para obter mais informações sobre valores válidos para esse parâmetro, consulte a tabela na seção Comentários a seguir.

[in] QueryType

Um valor KTMOBJECT_TYPEdigitado que identifica o tipo de objeto a ser enumerado. Para obter mais informações sobre valores válidos para esse parâmetro, consulte a tabela na seção Comentários a seguir.

[in, out] ObjectCursor

Um ponteiro para um buffer alocado por chamador que começa com uma estrutura KTMOBJECT_CURSOR. ZwEnumerateTransactionObject usa o buffer para armazenar os GUIDs de objetos encontrados.

[in] ObjectCursorLength

O comprimento, em bytes, do buffer que ObjectCursor aponta para.

[out] ReturnLength

Um ponteiro para um local alocado por chamador que recebe o número de bytes que ZwEnumerateTransactionObject retorna no buffer ObjectCursor, incluindo o comprimento da estrutura KTMOBJECT_CURSOR e o comprimento de todos os GUIDs retornados.

Valor de retorno

ZwEnumerateTransactionObject retornará STATUS_SUCCESS se a operação for bem-sucedida, mas a rotina não tiver enumerado todos os objetos. Se não houver mais objetos para enumerar, a rotina retornará STATUS_NO_MORE_ENTRIES. Caso contrário, essa rotina poderá retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INVALID_PARAMETER O QueryType ou o valor do parâmetro ObjectCursorLength é inválido.
STATUS_OBJECT_TYPE_MISMATCH O identificador que o parâmetro RootObjectHandle especifica não é um identificador para um objeto KTM válido.
STATUS_INVALID_HANDLE Um identificador de objeto é inválido.
STATUS_ACCESS_DENIED O chamador não tem acesso apropriado aos objetos que estão sendo enumerados.

A rotina pode retornar outros valores NTSTATUS .

Observações

A tabela a seguir contém os valores válidos para os parâmetros RootObjectHandle e QueryType.

Parâmetro queryType parâmetro RootObjectHandle Objetos enumerados
KTMOBJECT_TRANSACTION_MANAGER NULL Todos os objetos do gerenciador de transações
KTMOBJECT_RESOURCE_MANAGER Um identificador para um objeto do gerenciador de transações. O identificador deve ter acesso TRANSACTIONMANAGER_QUERY_INFORMATION ao objeto. Todos os objetos do gerenciador de recursos que pertencem ao objeto do gerenciador de transações especificado
KTMOBJECT_ENLISTMENT Um identificador para um objeto do gerenciador de recursos. O identificador deve ter acesso RESOURCEMANAGER_QUERY_INFORMATION ao objeto. Todos os objetos de inscrição que pertencem ao objeto do gerenciador de recursos especificado
KTMOBJECT_TRANSACTION Um identificador para um objeto do gerenciador de transações. O identificador deve ter acesso TRANSACTIONMANAGER_QUERY_INFORMATION ao objeto. Todos os objetos de transação que pertencem ao objeto do gerenciador de transações especificado
KTMOBJECT_TRANSACTION NULL Todos os objetos de transação que pertencem a todos os objetos do gerenciador de transações

A maioria dos componentes TPS não precisa chamar ZwEnumerateTransactionObject, mas a rotina pode ser útil se você precisar escrever um utilitário de depuração.

Antes que o componente chame ZwEnumerateTransactionObject, ele deve alocar e zero o buffer para o qual ObjectCursor aponta. A matriz GUID do buffer pode ser grande o suficiente para receber um ou mais elementos.

Para enumerar todos os objetos KTM do tipo especificado, seu componente deve chamar ZwEnumerateTransactionObject repetidamente até retornar STATUS_NO_MORE_ENTRIES.

Sempre que a rotina é chamada, ela preenche a matriz GUID do buffer com o máximo de GUIDs de objeto que se ajustarão. Após cada chamada, seu componente pode usar o membro ObjectIdCount da estrutura de KTMOBJECT_CURSOR para determinar o número de GUIDs de objeto armazenados na matriz.

NtEnumerateTransactionObject e ZwEnumerateTransactionObject são duas versões da mesma rotina dos Serviços nativos do Windows.

Para chamadas de drivers no modo kernel, as versões NtXxx e Zwxxx versões de uma rotina dos Serviços de Sistema Nativo do Windows podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Usando versões Nt e Zw das rotinas de serviços do sistema nativo.

Exemplos

O exemplo de código a seguir mostra como enumerar todos os objetos de transação em um computador. Neste exemplo, a matriz GUID da estrutura KTMOBJECT_CURSOR contém apenas um elemento, portanto, cada chamada para ZwEnumerateTransactionObject retorna um GUID. A rotina cria uma cadeia de caracteres Unicode do GUID e exibe a cadeia de caracteres.

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

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs, PowerIrpDDis

Consulte também

KTMOBJECT_CURSOR

KTMOBJECT_TYPE

usando versões Nt e Zw das rotinas de serviços do sistema nativo