Fungsi ControlTraceA (evntrace.h)
Fungsi ControlTrace memerah , mengkueri, memperbarui, atau menghentikan sesi pelacakan peristiwa yang ditentukan.
Sintaks
ULONG WMIAPI ControlTraceA(
CONTROLTRACE_ID TraceId,
[in] LPCSTR InstanceName,
[in, out] PEVENT_TRACE_PROPERTIES Properties,
[in] ULONG ControlCode
);
Parameter
TraceId
[in] InstanceName
Nama sesi pelacakan peristiwa, atau NULL. Anda harus menentukan InstanceName jika TraceHandle adalah 0.
Untuk menentukan sesi NT Kernel Logger, atur InstanceName ke KERNEL_LOGGER_NAME.
[in, out] Properties
Penunjuk ke struktur EVENT_TRACE_PROPERTIES yang diinisialisasi. Struktur ini harus di-nol sebelum mengatur bidang apa pun.
Jika ControlCode menentukan EVENT_TRACE_CONTROL_STOP, EVENT_TRACE_CONTROL_QUERY , atau EVENT_TRACE_CONTROL_FLUSH, Anda hanya perlu mengatur anggota Wnode.BufferSize, Wnode.Guid, LoggerNameOffset, dan LogFileNameOffset dari struktur EVENT_TRACE_PROPERTIES . Jika sesi adalah sesi privat, Anda juga perlu mengatur LogFileMode. Anda dapat menggunakan nama sesi maksimum (1024 karakter) dan panjang nama file log maksimum (1024 karakter) untuk menghitung ukuran buffer dan offset jika tidak diketahui.
Jika ControlCode menentukan EVENT_TRACE_CONTROL_UPDATE, pada input, anggota harus menentukan nilai baru untuk properti yang akan diperbarui. Pada output, Properti berisi properti dan statistik untuk sesi pelacakan peristiwa. Anda bisa memperbarui properti berikut ini.
EnableFlags: Atur anggota ini ke 0 untuk menonaktifkan semua penyedia sistem. Atur ini ke nilai bukan nol untuk menentukan penyedia sistem yang ingin Anda aktifkan atau tetap aktifkan. Ini mungkin bukan nol hanya untuk pencatat sistem.
FlushTimer: Atur anggota ini jika Anda ingin mengubah waktu untuk menunggu sebelum menyiram buffer. Jika anggota ini adalah 0, anggota tidak diperbarui.
LogFileNameOffset: Atur anggota ini jika Anda ingin beralih ke file log lain atau menghapus jejak mode buffering ke file log baru. Jika anggota ini adalah 0, nama file tidak diperbarui. Jika offset bukan nol dan Anda tidak mengubah nama file log, fungsi mengembalikan kesalahan.
LogFileMode: Atur anggota ini jika Anda ingin mengaktifkan dan menonaktifkan EVENT_TRACE_REAL_TIME_MODE . Untuk menonaktifkan penggunaan waktu nyata, atur anggota ini ke 0. Untuk mengaktifkan penggunaan real time (membuat sesi yang merekam ke disk serta mengirimkan peristiwa secara real-time), atur anggota ini ke EVENT_TRACE_REAL_TIME_MODE dan itu akan or'd dengan mode saat ini.
MaximumBuffers: Atur anggota ini jika Anda ingin mengubah jumlah maksimum buffer yang digunakan ETW. Jika anggota ini adalah 0, anggota tidak diperbarui.
Untuk sesi pencatat privat, Anda hanya dapat memperbarui anggota LogFileNameOffset dan FlushTimer .
Jika Anda menggunakan struktur EVENT_TRACE_PROPERTIES yang baru diinisialisasi, nol keluar struktur, lalu atur Wnode.BufferSize, Wnode.Guid, dan Wnode.Flags, dan nilai yang ingin Anda perbarui.
Jika Anda menggunakan kembali struktur EVENT_TRACE_PROPERTIES (yaitu menggunakan struktur yang sebelumnya Anda lewati ke StartTrace atau ControlTrace), pastikan untuk mengatur anggota LogFileNameOffset ke 0 kecuali Anda mengubah nama file log, dan pastikan untuk mengatur EVENT_TRACE_PROPERTIES. Wnode.Flags ke WNODE_FLAG_TRACED_GUID.
Dimulai dengan Windows 10, versi 1703: Untuk performa yang lebih baik dalam skenario lintas proses, Anda sekarang dapat meneruskan informasi pemfilteran ke ControlTrace untuk pencatat privat luas sistem. Anda harus menggunakan struktur EVENT_TRACE_PROPERTIES_V2 untuk menyertakan informasi pemfilteran. Lihat Mengonfigurasi dan Memulai Sesi Pencatat Privat untuk detail selengkapnya.
[in] ControlCode
Fungsi kontrol yang diminta. Anda dapat menentukan satu atau beberapa nilai berikut:
EVENT_TRACE_CONTROL_FLUSH: Membersihkan buffer aktif sesi.
Ini dapat digunakan dengan sesi dalam memori (sesi yang dimulai dengan bendera EVENT_TRACE_BUFFERING_MODE ) untuk menulis data dari jejak ke file.
Anda biasanya tidak perlu membersihkan sesi berbasis file atau real-time karena ETW akan secara otomatis membersihkan buffer ketika penuh (yaitu ketika tidak memiliki ruang untuk peristiwa berikutnya), ketika FlushTimer sesi jejak kedaluwarsa, atau ketika sesi pelacakan ditutup.
Windows 2000: Nilai ini tidak didukung.
EVENT_TRACE_CONTROL_QUERY: Mengambil properti dan statistik sesi.
EVENT_TRACE_CONTROL_STOP: Menghentikan sesi. Handel sesi tidak lagi valid.
EVENT_TRACE_CONTROL_UPDATE: Memperbarui properti sesi.
EVENT_TRACE_CONTROL_INCREMENT_FILE: Jika sesi memiliki
EVENT_TRACE_FILE_MODE_NEWFILE
, perbarui sesi untuk segera beralih ke file berikutnya, daripada menunggu file sebelumnya terisi. Didukung dimulai dengan Pembaruan Windows 10 Oktober 2018.EVENT_TRACE_CONTROL_CONVERT_TO_REALTIME: Mengubah sesi mode file ke sesi real-time (memungkinkan pengiriman real-time dan menonaktifkan penulisan peristiwa ke file ETL). Didukung dimulai dengan Pembaruan Windows 10 Oktober 2020.
Catatan
Tidak aman untuk membersihkan buffer atau menghentikan sesi pelacakan dari DllMain (dapat menyebabkan kebuntuan).
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan adalah ERROR_SUCCESS.
Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan sistem. Berikut ini adalah beberapa kesalahan umum dan penyebabnya.
ERROR_BAD_LENGTH
Salah satu hal berikut ini benar:
- Anggota Properti Wnode.BufferSize menentukan ukuran yang salah.
- Properti tidak memiliki cukup ruang yang dialokasikan untuk menyimpan salinan nama sesi dan nama file log (jika digunakan).
ERROR_INVALID_PARAMETER
Salah satu hal berikut ini benar:
- Properti adalah NULL.
- InstanceName dan TraceHandle keduanya ADALAH NULL.
- InstanceName adalah NULL dan TraceHandle bukan handel yang valid.
- Anggota Properti LogFileNameOffset tidak valid.
- Anggota Properti LoggerNameOffset tidak valid.
- Anggota Properti LogFileMode menentukan kombinasi bendera yang tidak valid.
- Anggota Properti Wnode.GuidadalahSystemTraceControlGuid, tetapi parameter InstanceName bukan
KERNEL_LOGGER_NAME
.
ERROR_BAD_PATHNAME
Sesi lain sudah menggunakan nama file yang ditentukan oleh anggota LogFileNameOffset dari struktur Properti .
ERROR_MORE_DATA
Buffer untuk EVENT_TRACE_PROPERTIES terlalu kecil untuk menyimpan semua informasi untuk sesi tersebut. Jika Anda tidak memerlukan informasi properti sesi, Anda dapat mengabaikan kesalahan ini. Jika Anda menerima kesalahan ini saat menghentikan sesi, ETW akan menghentikan sesi sebelum menghasilkan kesalahan ini.
ERROR_ACCESS_DENIED
Hanya pengguna yang berjalan dengan hak administratif yang ditingkatkan, pengguna di grup Pengguna Log Performa, dan layanan yang berjalan sebagai LocalSystem, LocalService, NetworkService yang dapat mengontrol sesi pelacakan peristiwa. Untuk memberi pengguna terbatas kemampuan untuk mengontrol sesi pelacakan, tambahkan ke grup Pengguna Log Performa. Hanya pengguna dengan hak istimewa administratif dan layanan yang berjalan sebagai LocalSystem yang dapat mengontrol sesi NT Kernel Logger.
Windows XP dan Windows 2000: Siapa pun dapat mengontrol sesi pelacakan.
ERROR_WMI_INSTANCE_NOT_FOUND
Sesi yang diberikan tidak berjalan.
Keterangan
Pengontrol pelacakan peristiwa memanggil fungsi ini.
Fungsi ini menggantikan fungsi FlushTrace, QueryTrace, StopTrace, dan UpdateTrace .
Catatan
Header evntrace.h mendefinisikan ControlTrace sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta pra-prosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 Professional [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows 2000 Server [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | evntrace.h |
Pustaka | Sechost.lib pada Windows 8.1 dan Windows Server 2012 R2; Advapi32.lib di Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, dan Windows XP |
DLL | Sechost.dll pada Windows 8.1 dan Windows Server 2012; Advapi32.dll pada Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Server 2008, Windows Vista, dan Windows XP |