Fungsi PcwCreateInstance (wdm.h)
Fungsi ini PcwCreateInstance
membuat instans counterset baru. Sebagian besar pengembang akan menggunakan fungsi CreateXxx yang dihasilkan CTRPP alih-alih memanggil fungsi ini secara langsung.
Sintaks
NTSTATUS PcwCreateInstance(
[out] PPCW_INSTANCE *Instance,
[in] PPCW_REGISTRATION Registration,
[in] PCUNICODE_STRING Name,
[in] ULONG Count,
[in] PPCW_DATA Data
);
Parameter
[out] Instance
Penunjuk untuk menerima instans yang baru dibuat. Instans harus ditutup menggunakan PcwCloseInstance.
[in] Registration
Pointer ke pendaftaran counterset yang memiliki instans ini. Pendaftaran dibuat menggunakan PcwRegister.
[in] Name
Penunjuk ke string Unicode yang berisi nama instans penghitung. Ini tidak boleh NULL.
Nilai instans Name
HARUS stabil dari waktu ke waktu (instans logis yang sama harus menggunakan nilai yang sama Name
untuk semua pemanggilan panggilan balik) dan HARUS unik. Jika counterset terdaftar sebagai instans tunggal, instans Name
harus kosong (panjang 0). Jika counterset yang terdaftar sebagai multi-instans, instans Name
tidak boleh kosong. Pencocokan nama instans tidak peka huruf besar/kecil, sehingga Name
nilai tidak boleh berbeda hanya menurut kasus.
[in] Count
Jumlah deskriptor yang disediakan dalam Data
parameter .
[in] Data
Array deskriptor untuk blok data penyedia yang berisi nilai penghitung instans ini. Blok data yang direferensikan oleh deskriptor dapat diakses kapan saja dan harus tetap valid sampai instans ditutup oleh PcwCloseInstance
atau PcwUnregister
.
Nilai kembali
PcwCreateInstance
mengembalikan salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
STATUS_SUCCESS |
Instans berhasil dibuat. |
STATUS_INVALID_PARAMETER_4 |
Jumlah struktur, yang ditentukan oleh Count , tidak valid untuk penyedia terdaftar. |
STATUS_INVALID_BUFFER_SIZE |
Salah satu blok data penyedia terlalu kecil. Misalnya, selama panggilan ke PcwRegister, penyedia menentukan bahwa penghitung X berada di offset 100 dari blok data pertama dengan ukuran 4 byte. Jika panggilan ke PcwCreateInstance menentukan bahwa blok data pertama adalah 50 byte, status kesalahan ini dikembalikan. |
STATUS_INTEGER_OVERFLOW |
Ukuran struktur, yang ditentukan oleh Count , meluapkan buffer data. |
Keterangan
Penyedia counterset dapat menyediakan informasi kepada konsumen melalui dua sistem yang berbeda:
- Penyedia dapat menyediakan
PCW_CALLBACK
fungsi yang akan dipanggil oleh Pustaka Penghitung Kinerja sesuai kebutuhan untuk mengumpulkan data. Untuk informasi selengkapnya tentang sistem ini, lihat dokumentasi untuk PCW_CALLBACK. - Penyedia dapat menggunakan
PcwCreateInstance
danPcwCloseInstance
untuk mempertahankan daftar instans yang tersedia dan data penghitung yang sesuai. Sistem ini mudah diterapkan tetapi terbatas pada fleksibilitas.
Sebelum penyedia menggunakan fungsi ini, penyedia harus memanggil PcwRegister
fungsi untuk membuat pendaftaran.
Ketika instans baru tiba (misalnya ketika perangkat dicolokkan), penyedia harus mengalokasikan dan menginisialisasi blok data untuk instans, memanggil PcwCreateInstance
dengan nama dan blok data untuk instans, lalu menjaga nilai di blok data diperbarui dengan nilai penghitung untuk instans. Ketika instans menjadi tidak valid (misalnya ketika perangkat dilepas), penyedia harus memanggil PcwCloseInstance
lalu menghapus blok data.
Penyedia harus mempertahankan blok data (biasanya di kumpulan halaman atau tidak di-halaman) yang berisi nilai penghitung saat ini untuk setiap instans.
PcwCreateInstance
akan secara otomatis menetapkan id unik untuk instans. Untuk memberikan nilai tertentu untuk id instans, terapkan PCW_CALLBACK
fungsi alih-alih menggunakan PcwCreateInstance
.
Gunakan fungsi PcwCloseInstance untuk menutup instans.
Fungsi CreateXxx yang dihasilkan CTRPP
Sebagian besar pengembang tidak perlu menelepon PcwCreateInstance
secara langsung. Sebaliknya, mereka akan mengkompilasi manifes dengan alat CTRPP dan menggunakan fungsi CreateXxx dari header yang dihasilkan CTRPP. Fungsi yang dihasilkan akan terlihat seperti ini:
EXTERN_C __inline NTSTATUS
CreateMyCounterset(
__deref_out PPCW_INSTANCE *Instance,
__in PCUNICODE_STRING Name,
__in const MY_COUNTER_DATA *MyCounterData
)
{
PCW_DATA Data[1];
PAGED_CODE();
Data[0].Data = MyCounterData;
Data[0].Size = sizeof(MY_COUNTER_DATA);
return PcwCreateInstance(Instance,
MyCounterset,
Name,
1,
Data);
}
Fungsi Buat yang dihasilkan CTRPP akan diberi nama PrefixCreateCounterset. Awalan biasanya kosong, tetapi mungkin ada jika -prefix
parameter digunakan pada baris perintah CTRPP. Counterset adalah nama counterset, seperti yang ditentukan dalam manifes. Fungsi ini akan memiliki parameter Data berdasarkan struktur yang ditentukan dalam manifes. Fungsi ini akan membungkus blok data yang disediakan pengguna ke dalam array PCW_DATA
struktur dan kemudian memanggil PcwCreateInstance
. Perhatikan bahwa fungsi mereferensikan variabel Counterset (MyCounterset
dalam contoh), yang merupakan variabel global yang menyimpan handel pendaftaran counterset yang diinisialisasi oleh fungsi RegisterXxx yang dihasilkan CTRPP.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia di Windows 7 dan versi Windows yang lebih baru. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |