Fungsi ZwEnumerateTransactionObject (wdm.h)

Rutinitas ZwEnumerateTransactionObject menghitung objek KTM di komputer.

Sintaks

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

Parameter

[in, optional] RootObjectHandle

Handel ke objek KTM. Rutinitas menghitung objek anak dari objek yang ditentukan. Parameter ini bersifat opsional dan dapat berupa NULL. Untuk informasi selengkapnya tentang nilai yang valid untuk parameter ini, lihat tabel di bagian Keterangan berikut.

[in] QueryType

Nilai KTMOBJECT_TYPE-ketik yang mengidentifikasi jenis objek untuk dijumlahkan. Untuk informasi selengkapnya tentang nilai yang valid untuk parameter ini, lihat tabel di bagian Keterangan berikut.

[in, out] ObjectCursor

Penunjuk ke buffer yang dialokasikan penelepon yang dimulai dengan struktur KTMOBJECT_CURSOR . ZwEnumerateTransactionObject menggunakan buffer untuk menyimpan GUID objek yang ditemukannya.

[in] ObjectCursorLength

Panjangnya, dalam byte, dari buffer yang ditunjuk objectCursor .

[out] ReturnLength

Penunjuk ke lokasi yang dialokasikan pemanggil yang menerima jumlah byte yang dikembalikan ZwEnumerateTransactionObject di buffer ObjectCursor , termasuk panjang struktur KTMOBJECT_CURSOR dan panjang semua GUID yang dikembalikan.

Nilai kembali

ZwEnumerateTransactionObject mengembalikan STATUS_SUCCESS jika operasi berhasil tetapi rutinitas belum menghitung semua objek. Jika tidak ada lagi objek untuk dijumlahkan, rutinitas akan kembali STATUS_NO_MORE_ENTRIES. Jika tidak, rutinitas ini mungkin mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
STATUS_INVALID_PARAMETER Nilai parameter QueryType atau ObjectCursorLength tidak valid.
STATUS_OBJECT_TYPE_MISMATCH Handel yang ditentukan parameter RootObjectHandle bukan handel ke objek KTM yang valid.
STATUS_INVALID_HANDLE Handel objek tidak valid.
STATUS_ACCESS_DENIED Pemanggil tidak memiliki akses yang sesuai ke objek yang sedang dijumlahkan.

Rutinitas mungkin mengembalikan nilai NTSTATUS lainnya.

Keterangan

Tabel berikut berisi nilai yang valid untuk parameter RootObjectHandle dan QueryType .

Parameter QueryType Parameter RootObjectHandle Objek yang dijumlahkan
KTMOBJECT_TRANSACTION_MANAGER NULL Semua objek manajer transaksi
KTMOBJECT_RESOURCE_MANAGER Handel ke objek manajer transaksi. Handel harus memiliki akses TRANSACTIONMANAGER_QUERY_INFORMATION ke objek . Semua objek resource manager yang termasuk dalam objek manajer transaksi yang ditentukan
KTMOBJECT_ENLISTMENT Handel ke objek resource manager. Handel harus memiliki akses RESOURCEMANAGER_QUERY_INFORMATION ke objek . Semua objek pendaftaran yang termasuk dalam objek resource manager yang ditentukan
KTMOBJECT_TRANSACTION Handel ke objek manajer transaksi. Handel harus memiliki akses TRANSACTIONMANAGER_QUERY_INFORMATION ke objek . Semua objek transaksi milik objek manajer transaksi yang ditentukan
KTMOBJECT_TRANSACTION NULL Semua objek transaksi milik semua objek manajer transaksi

Sebagian besar komponen TPS tidak harus memanggil ZwEnumerateTransactionObject, tetapi rutinitas mungkin berguna jika Anda harus menulis utilitas debugging.

Sebelum komponen Anda memanggil ZwEnumerateTransactionObject, komponen harus mengalokasikan dan nol buffer yang ditunjuk objectCursor . Array GUID buffer bisa cukup besar untuk menerima satu atau beberapa elemen.

Untuk menghitung semua objek KTM dari jenis yang ditentukan, komponen Anda harus memanggil ZwEnumerateTransactionObject berulang kali sampai kembali STATUS_NO_MORE_ENTRIES.

Setiap kali rutinitas dipanggil, ia mengisi array GUID buffer dengan GUID objek sebanyak yang akan pas. Setelah setiap panggilan, komponen Anda dapat menggunakan anggota ObjectIdCount struktur KTMOBJECT_CURSOR untuk menentukan jumlah GUID objek yang disimpan rutin dalam array.

NtEnumerateTransactionObject dan ZwEnumerateTransactionObject adalah dua versi dari rutinitas Layanan Sistem Asli Windows yang sama.

Untuk panggilan dari driver mode kernel, versi NtXxx dan ZwXxx dari rutinItas Windows Native System Services dapat berperilaku berbeda dalam cara mereka menangani dan menginterpretasikan parameter input. Untuk informasi selengkapnya tentang hubungan antara versi NtXxx dan ZwXxx dari rutinitas, lihat Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli.

Contoh

Contoh kode berikut menunjukkan cara menghitung semua objek transaksi di komputer. Dalam contoh ini, array GUID struktur KTMOBJECT_CURSOR hanya berisi satu elemen, sehingga setiap panggilan ke ZwEnumerateTransactionObject mengembalikan satu GUID. Rutinitas membuat string Unicode dari GUID dan menampilkan string.

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

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Lihat juga

KTMOBJECT_CURSOR

KTMOBJECT_TYPE

Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli