Fungsi NtEnumerateTransactionObject (wdm.h)
Rutinitas ZwEnumerateTransactionObject menghitung objek KTM pada komputer.
Sintaks
__kernel_entry NTSYSCALLAPI NTSTATUS NtEnumerateTransactionObject(
[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 ini.
[in] QueryType
Nilai KTMOBJECT_TYPE-typed yang mengidentifikasi jenis objek untuk dijumlahkan. Untuk informasi selengkapnya tentang nilai yang valid untuk parameter ini, lihat tabel di bagian Keterangan berikut ini.
[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
Panjang, dalam byte, dari buffer yang ditunjuk objectCursor .
[out] ReturnLength
Penunjuk ke lokasi yang dialokasikan penelepon 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 mengembalikan 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 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 perlu 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 hingga kembali STATUS_NO_MORE_ENTRIES.
Setiap kali rutinitas dipanggil, ia mengisi array GUID buffer dengan GUID objek sebanyak yang akan cocok. 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 menafsirkan 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, PowerIrpDDis |
Lihat juga
Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk