Kelas CommandLineEventConsumer
Kelas CommandLineEventConsumer memulai proses arbitrer dalam sistem lokal ketika suatu peristiwa dikirimkan ke dalamnya. Kelas ini adalah salah satu konsumen peristiwa standar yang disediakan WMI. Untuk informasi selengkapnya, lihat Memantau dan Merespons Peristiwa dengan Konsumen Standar.
Catatan
Saat menggunakan kelas CommandLineEventConsumer , amankan executable yang ingin Anda mulai. Jika executable tidak berada di lokasi yang aman, atau diamankan dengan daftar kontrol akses (ACL) yang kuat, pengguna yang tidak sah dapat mengganti executable Anda dengan executable berbahaya. Untuk informasi selengkapnya tentang ACL, kunjungi bagian Keamanan Microsoft Windows Software Development Kit (SDK), dan lihat Membuat Deskriptor Keamanan untuk Objek Baru.
Sintaks
[AMENDMENT]
class CommandLineEventConsumer : __EventConsumer
{
uint8 CreatorSID[];
string MachineName;
uint32 MaximumQueueSize;
string CommandLineTemplate;
boolean CreateNewConsole = False;
boolean CreateNewProcessGroup = True;
boolean CreateSeparateWowVdm = False;
boolean CreateSharedWowVdm = False;
string DesktopName;
string ExecutablePath;
uint32 FillAttributes;
boolean ForceOffFeedback = False;
boolean ForceOnFeedback = False;
uint32 KillTimeout = 0;
string Name;
sint32 Priority = 0x20;
boolean RunInteractively = False;
uint32 ShowWindowCommand;
boolean UseDefaultErrorMode = False;
string WindowTitle;
string WorkingDirectory;
uint32 XCoordinate;
uint32 XNumCharacters;
uint32 XSize;
uint32 YCoordinate;
uint32 YNumCharacters;
uint32 YSize;
uint32 FillAttribute;
};
Anggota
Kelas CommandLineEventConsumer memiliki jenis anggota ini:
Properti
Kelas CommandLineEventConsumer memiliki properti ini.
-
CommandLineTemplate
-
-
Jenis data: string
-
Jenis akses: Baca-saja
Templat string standar yang menentukan proses yang akan dimulai. Properti ini bisa NULL, dan properti ExecutablePath digunakan sebagai baris perintah.
-
-
BuatNewConsole
-
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Tidak digunakan. Jika nilai ditetapkan ke properti ini, pesan pelacakan akan dihasilkan. Untuk informasi selengkapnya, lihat Melacak Aktivitas WMI.
-
-
CreateNewProcessGroup
-
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Jika True, proses baru adalah proses akar dari grup proses baru. Grup proses mencakup semua proses yang merupakan keturunan dari proses akar ini. Pengidentifikasi proses grup proses baru sama dengan pengidentifikasi proses ini. Grup proses digunakan oleh metode GenerateConsoleCtrlEvent untuk mengaktifkan pengiriman sinyal CTRL+C atau CTRL+BREAK ke sekelompok proses konsol.
-
-
CreateSeparateWowVdm
-
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Jika True, proses baru berjalan di Virtual DOS Machine (VDM) privat. Ini hanya valid ketika memulai aplikasi yang berjalan pada sistem operasi Windows 16-bit. Jika diatur ke False, semua aplikasi yang berjalan pada sistem operasi Windows 16-bit berjalan sebagai utas dalam satu VDM bersama. Untuk informasi selengkapnya, lihat bagian Keterangan dari topik ini.
-
-
CreateSharedWowVdm
-
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Jika True, metode CreateProcess menjalankan proses baru di Virtual DOS Machine (VDM) bersama. Properti ini dapat mengganti sakelar DefaultSeparateVDM di bagian Windows Win.ini jika diatur ke True. Untuk informasi selengkapnya, lihat bagian Keterangan dari topik ini.
-
-
CreatorSID
-
-
Jenis data: array uint8
-
Jenis akses: Baca-saja
Pengidentifikasi keamanan (SID) yang secara unik mengidentifikasi pengguna yang membuat filter. WMI menyimpan SID pengguna yang membuat instans __EventConsumer atau Administrator SID, tergantung pada sistem operasi. Untuk informasi selengkapnya, lihat Mengikat Filter Peristiwa dengan Konsumen Logis dan Memantau dan Merespons Peristiwa dengan Konsumen Standar.
Properti ini diwarisi dari __EventConsumer.
-
-
DesktopName
-
-
Jenis data: string
-
Jenis akses: Baca-saja
Tidak digunakan. Jika nilai ditetapkan ke properti ini, pesan pelacakan akan dihasilkan. Untuk informasi selengkapnya, lihat Melacak Aktivitas WMI.
-
-
ExecutablePath
-
-
Jenis data: string
-
Jenis akses: Baca-saja
Modul yang akan dijalankan. String dapat menentukan jalur lengkap dan nama file modul yang akan dijalankan, atau dapat menentukan nama parsial. Jika nama parsial ditentukan, drive saat ini dan direktori saat ini diasumsikan.
Properti ExecutablePath dapat berupa NULL. Dalam hal ini, nama modul harus menjadi token pertama yang dibatasi spasi putih dalam nilai properti CommandLineTemplate . Jika menggunakan nama file panjang yang berisi spasi, gunakan string yang dikutip untuk menunjukkan di mana nama file berakhir dan argumen mulai mengklarifikasi nama file.
Catatan
Karena properti CommandLineTemplate dapat menjadi templat tempat modul yang akan dijalankan disediakan oleh variabel, properti NULLExecutablePath mengizinkan modul yang ditentukan dalam parameter untuk dijalankan, dan kemudian berada di luar kendali Anda. Selalu atur properti ExecutablePath di pendaftaran CommandLineEventConsumer untuk menyertakan executable yang diperlukan, yang menghindari penimpaan oleh parameter peristiwa. Jika Anda harus menggunakan templat dan variabel untuk menentukan modul yang akan dijalankan, berhati-hatilah tentang siapa yang diberikan hak tulis penuh di namespace layanan.
-
-
FillAttribute
-
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Menentukan teks awal dan warna latar belakang jika jendela konsol baru dibuat dalam aplikasi konsol
-
-
FillAttributes
-
-
Jenis data: uint32
-
Jenis akses: Baca/tulis
Teks awal dan warna latar belakang, jika jendela konsol baru dibuat di aplikasi konsol. Properti ini diabaikan dalam aplikasi GUI. Nilai dapat berupa kombinasi apa pun dari nilai berikut.
-
-
1 (0x1)
-
latar depan biru
-
2 (0x2)
-
latar depan hijau
-
4 (0x4)
-
latar depan merah
-
8 (0x8)
-
intensitas latar depan
-
16 (0x10)
-
latar belakang biru
-
32 (0x20)
-
latar belakang hijau
-
64 (0x40)
-
latar belakang merah
-
128 (0x80)
-
intensitas latar belakang
Misalnya, kombinasi berikut menghasilkan teks merah pada latar belakang putih:
0x4 | 0x40 | 0x20 | 0x10
atau
0x74
ForceOffFeedback
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Jika True, kursor umpan balik dipaksa mati saat proses dimulai. Kursor normal ditampilkan.
ForceOnFeedback
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Jika True, kursor berada dalam mode umpan balik selama dua detik setelah CreateProcess dipanggil. Selama dua detik tersebut, jika proses melakukan panggilan GUI pertama, sistem memberikan lima detik lagi untuk prosesnya. Selama lima detik tersebut, jika proses menunjukkan jendela, sistem memberikan lima detik lagi ke proses untuk menyelesaikan menggambar jendela.
KillTimeout
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Angka, dalam detik, bahwa layanan WMI menunggu sebelum membunuh proses 0 (nol) menunjukkan proses tidak akan dimatikan. Membunuh proses mencegah proses berjalan tanpa batas waktu.
MachineName
-
Jenis data: string
-
Jenis akses: Baca-saja
Nama komputer tempat Instrumentasi Manajemen Windows (WMI) mengirim peristiwa.
Properti ini diwarisi dari __EventConsumer.
MaximumQueueSize
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Antrean maksimum untuk konsumen tertentu, dalam byte.
Properti ini diwarisi dari __EventConsumer.
Nama
-
Jenis data: string
-
Jenis akses: Baca-saja
-
Kualifikasi: kunci
Nama konsumen yang unik.
Prioritas
-
Jenis data: sint32
-
Jenis akses: Baca-saja
Menjadwalkan tingkat prioritas utas proses. Daftar berikut mencantumkan tingkat prioritas yang tersedia.
32 (0x20)
Menunjukkan proses normal tanpa menjadwalkan kebutuhan.
64 (0x40)
Menunjukkan proses yang utasnya hanya berjalan saat sistem diam, dan didahulukan oleh utas dari proses apa pun yang berjalan di kelas prioritas yang lebih tinggi. Contohnya adalah pengaman layar. Kelas prioritas menganggur diwariskan oleh proses anak.
128 (0x80)
Menunjukkan proses yang melakukan tugas prioritas tinggi dan kritis waktu. Utas proses kelas prioritas tinggi mendahului utas proses kelas prioritas normal atau diam. Contohnya adalah Daftar Tugas, yang harus merespons dengan cepat ketika dipanggil oleh pengguna terlepas dari beban pada sistem. Gunakan perawatan ekstrem saat menggunakan kelas prioritas tinggi, karena aplikasi yang terikat CPU dengan kelas prioritas tinggi dapat menggunakan hampir semua siklus yang tersedia.
256 (0x100)
Menunjukkan proses yang memiliki prioritas tertinggi. Utas proses kelas prioritas real time mendahului utas dari semua proses lain, termasuk proses sistem operasi yang melakukan tugas penting. Misalnya, proses real time yang dijalankan selama lebih dari interval singkat dapat menyebabkan cache disk tidak memerah, atau menyebabkan mouse tidak responsif.
RunInteractively
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Jika True, proses diluncurkan di WinStation interaktif. Jika False, proses diluncurkan di layanan default WinStation. Properti ini mengambil alih properti DesktopName . Properti ini hanya digunakan secara lokal, dan hanya jika pengguna interaktif adalah pengguna yang sama yang menyiapkan konsumen.
Dimulai dengan Windows Vista, proses menjalankan instans CommandLineEventConsumer dimulai di bawah akun LocalSystem dan berada di sesi 0. Layanan yang berjalan di sesi 0 tidak dapat berinteraksi dengan sesi pengguna.
ShowWindowCommand
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Status peragaan jendela. Ini bisa menjadi salah satu nilai yang dapat ditentukan dalam parameter nCmdShow untuk fungsi ShowWindow .
UseDefaultErrorMode
-
Jenis data: boolean
-
Jenis akses: Baca-saja
Jika True, mode kesalahan default digunakan.
WindowTitle
-
Jenis data: string
-
Jenis akses: Baca-saja
Judul yang muncul pada bilah judul proses. Properti ini diabaikan untuk aplikasi GUI.
WorkingDirectory
-
Jenis data: string
-
Jenis akses: Baca-saja
Direktori kerja untuk proses ini.
XCoordinate
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Offset X, dalam piksel, dari tepi kiri layar ke tepi kiri jendela, jika jendela baru dibuat.
XNumCharacters
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Lebar buffer layar, di kolom karakter, jika jendela konsol baru dibuat. Properti ini diabaikan dalam proses GUI.
XSize
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Lebar, dalam piksel, dari jendela baru, jika jendela baru dibuat.
YCoordinate
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Offset Y, dalam piksel, dari tepi atas layar ke tepi atas jendela, jika jendela baru dibuat.
YNumCharacters
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Tinggi buffer layar, dalam baris karakter, jika jendela konsol baru dibuat. Properti ini diabaikan dalam proses GUI.
Ukuran Y
-
Jenis data: uint32
-
Jenis akses: Baca-saja
Tinggi, dalam piksel, dari jendela baru, jika jendela baru dibuat.
Keterangan
Kelas CommandLineEventConsumer berasal dari kelas abstrak __EventConsumer .
Properti CreateSeparateWowVdm menunjukkan apakah proses baru berjalan di Virtual DOS Machine (VDM) privat atau tidak. Keuntungan berjalan secara terpisah adalah bahwa crash hanya mengakhiri VDM tunggal. Program yang berjalan dalam VDM yang berbeda terus berfungsi secara normal, dan aplikasi berbasis Windows 16-bit yang berjalan di VDM terpisah memiliki antrean input terpisah. Ini berarti bahwa jika satu aplikasi berhenti merespons sesaat, aplikasi di VDM terpisah terus menerima input. Kerugian berjalan secara terpisah adalah dibutuhkan lebih banyak memori untuk melakukannya secara signifikan. Anda harus mengatur properti ini ke True hanya jika pengguna meminta aplikasi berbasis Windows 16-bit berjalan di VDM mereka sendiri.
Catatan
CommandLineEventConsumer menggunakan metode CreateProcess secara internal, dan meneruskan properti ExecutablePath dan CommandLineTemplate sebagai parameter lpApplicationName dan lpCommandLine. Contoh kode Managed Object Format (MOF) berikut ini tidak menggunakan CommandLineEventConsumer dengan benar.
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\scripts\\MyScript.js param1 param2";
};
Metode CreateProcess meneruskan lpCommandLine sebagai argv[0]
, argv[1]
, dan sebagainya. Karena argv[0]
untuk aplikasi 16-bit yang digunakan untuk dicadangkan untuk nama file yang dapat dieksekusi, kode MOF sebelumnya menghasilkan proses yang dibuat seolah-olah perintah berikut dimasukkan pada prompt perintah: c:\windows\system32\cscript.exe param1 param2.
Perintah sebelumnya tidak berhasil karena Cscript.exe tidak melihat argv[0]
, sehingga tidak mengenali bahwa perintah tersebut tidak berisi namanya sendiri, tetapi sesuatu yang lain ("c:\\scripts\\MyScript.js"). Contoh berikut mengidentifikasi penggunaan CommandLineEventConsumer yang direkomendasikan.
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\windows\\system32\\cscript.exe"
"C:\\scripts\\MyScript.js param1 param2";
};
Penggunaan commandLineEventConsumer sebelumnya menghasilkan proses yang dibuat seolah-olah perintah berikut dimasukkan pada prompt perintah: c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2
Karena "c:\\scripts\\MyScript.js" sekarang argv[1]
, itu dilihat oleh Cscript.exe dan perintah berhasil.
Untuk informasi selengkapnya, lihat fungsi CreateProcess .
Contoh
Untuk contoh penggunaan CommandLineEventConsumer untuk membuat konsumen, lihat Menjalankan Program dari Baris Perintah Berdasarkan Peristiwa.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows Vista |
Server minimum yang didukung |
Windows Server 2008 |
Ruang nama |
Root\subscription |
MOF |
|
DLL |
|