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 バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx と ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの 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 |