次の方法で共有


NtEnumerateTransactionObject 関数 (wdm.h)

ZwEnumerateTransactionObject ルーチンは、コンピューター上で KTM オブジェクトを列挙します。

構文

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

パラメーター

[in, optional] RootObjectHandle

KTM オブジェクトへのハンドル。 ルーチンは、指定したオブジェクトの子オブジェクトを列挙します。 このパラメーターは省略可能であり、NULL できます。 このパラメーターの有効な値の詳細については、次の「解説」セクションの表を参照してください。

[in] QueryType

列挙するオブジェクトの種類を識別する KTMOBJECT_TYPE型指定された値。 このパラメーターの有効な値の詳細については、次の「解説」セクションの表を参照してください。

[in, out] ObjectCursor

KTMOBJECT_CURSOR 構造体で始まる呼び出し元によって割り当てられたバッファーへのポインター。 ZwEnumerateTransactionObject は、バッファーを使用して、見つけたオブジェクトの GUID を格納します。

[in] ObjectCursorLength

ObjectCursor が指 バッファーの長さ (バイト単位)。

[out] ReturnLength

ObjectCursor バッファーで返 ZwEnumerateTransactionObject が返すバイト数を受け取る呼び出し元によって割り当てられた場所へのポインター (KTMOBJECT_CURSOR 構造体の長さと、返されるすべての GUID の長さを含む)。

戻り値

ZwEnumerateTransactionObject は、操作が成功したが、ルーチンがすべてのオブジェクトを列挙していない場合にSTATUS_SUCCESSを返します。 列挙するオブジェクトがこれ以上ない場合、ルーチンはSTATUS_NO_MORE_ENTRIESを返します。 それ以外の場合、このルーチンは次のいずれかの値を返す可能性があります。

リターン コード 形容
STATUS_INVALID_PARAMETER QueryType または ObjectCursorLength パラメーターの値 が無効です。
STATUS_OBJECT_TYPE_MISMATCH RootObjectHandle パラメーターが指定するハンドルは、有効な KTM オブジェクトへのハンドルではありません。
STATUS_INVALID_HANDLE オブジェクト ハンドルが無効です。
STATUS_ACCESS_DENIED 呼び出し元には、列挙されているオブジェクトへの適切なアクセス権がありません。

ルーチンは、NTSTATUS 値を返す場合があります。

備考

次の表に、RootObjectHandle および QueryType パラメーター 有効な値を示します。

QueryType パラメーター RootObjectHandle パラメーター 列挙されたオブジェクト
KTMOBJECT_TRANSACTION_MANAGER NULL すべてのトランザクション マネージャー オブジェクト
KTMOBJECT_RESOURCE_MANAGER トランザクション マネージャー オブジェクトへのハンドル。 ハンドルには、オブジェクトへのTRANSACTIONMANAGER_QUERY_INFORMATIONアクセス権が必要です。 指定されたトランザクション マネージャー オブジェクトに属するすべてのリソース マネージャー オブジェクト
KTMOBJECT_ENLISTMENT リソース マネージャー オブジェクトへのハンドル。 ハンドルには、オブジェクトへのRESOURCEMANAGER_QUERY_INFORMATIONアクセス権が必要です。 指定されたリソース マネージャー オブジェクトに属するすべての参加オブジェクト
KTMOBJECT_TRANSACTION トランザクション マネージャー オブジェクトへのハンドル。 ハンドルには、オブジェクトへのTRANSACTIONMANAGER_QUERY_INFORMATIONアクセス権が必要です。 指定されたトランザクション マネージャー オブジェクトに属するすべてのトランザクション オブジェクト
KTMOBJECT_TRANSACTION NULL すべてのトランザクション マネージャー オブジェクトに属するすべてのトランザクション オブジェクト

ほとんどの TPS コンポーネントは ZwEnumerateTransactionObject 呼び出す必要はありませんが、デバッグ ユーティリティを記述する必要がある場合は、ルーチンが役立つ場合があります。

コンポーネントが ZwEnumerateTransactionObject 呼び出す前に、ObjectCursor が指すバッファー 割り当て、ゼロにする必要があります。 バッファーの GUID 配列は、1 つ以上の要素を受け取るのに十分な大きさにすることができます。

指定した型の KTM オブジェクトをすべて列挙するには、コンポーネントがSTATUS_NO_MORE_ENTRIESを返すまで、ZwEnumerateTransactionObject を繰り返し呼び出す必要があります。

ルーチンが呼び出されるたびに、バッファーの GUID 配列に収まるオブジェクト GUID が格納されます。 各呼び出しの後、コンポーネントは、KTMOBJECT_CURSOR 構造体の ObjectIdCount メンバーを使用して、ルーチンが配列に格納するオブジェクト GUID の数を決定できます。

NtEnumerateTransactionObject と ZwEnumerateTransactionObject は、同じ Windows ネイティブ システム サービス ルーチンの 2 つのバージョンです。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxxZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt および Zw バージョンの使用 を参照してください。

次のコード例は、コンピューター上のすべてのトランザクション オブジェクトを列挙する方法を示しています。 この例では、KTMOBJECT_CURSOR 構造体の GUID 配列に含まれる要素は 1 つだけであるため、ZwEnumerateTransactionObject の呼び出しごとに 1 つの GUID が返されます。 このルーチンは、GUID から Unicode 文字列を作成し、その文字列を表示します。

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

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 する HwStorPortProhibitedDIs、PowerIrpDDis

関連項目

KTMOBJECT_CURSOR

KTMOBJECT_TYPE

ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンを使用した