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