PO_FX_COMPONENT_IDLE_STATE_CALLBACK fungsi panggilan balik (wdm.h)
Rutinitas panggilan balik ComponentIdleStateCallback memberi tahu driver tentang perubahan yang tertunda ke status daya Fx dari komponen yang ditentukan.
Sintaks
PO_FX_COMPONENT_IDLE_STATE_CALLBACK PoFxComponentIdleStateCallback;
void PoFxComponentIdleStateCallback(
[in] PVOID Context,
[in] ULONG Component,
[in] ULONG State
)
{...}
Parameter
[in] Context
Penunjuk ke konteks perangkat. Driver perangkat menggunakan konteks ini untuk menyimpan informasi tentang status daya perangkat saat ini. Driver perangkat menentukan pointer ini di anggota DeviceContext dari struktur PO_FX_DEVICE yang digunakan driver untuk mendaftarkan perangkat dengan kerangka kerja manajemen daya (PoFx). Konteks ini buram untuk PoFx.
[in] Component
Menentukan nomor komponen. Parameter ini adalah indeks ke dalam array Komponen dalam struktur PO_FX_DEVICE yang digunakan driver perangkat untuk mendaftarkan perangkat dengan PoFx. Jika array Komponen berisi elemen N, indeks komponen berkisar dari 0 hingga N-1.
[in] State
Menentukan status daya Fx baru yang akan diubah oleh komponen. Jika parameter ini nol, status baru adalah F0; jika parameter ini adalah satu, status baru adalah F1; dan sebagainya.
Mengembalikan nilai
Tidak ada
Keterangan
Ketika PoFx memanggil rutinitas ComponentIdleStateCallback driver, driver mungkin perlu mempersiapkan perubahan status Fx yang tertunda. Setelah persiapan yang diperlukan selesai, driver harus memanggil rutinitas PoFxCompleteIdleState untuk memberi tahu PoFx bahwa driver menyelesaikan responsnya terhadap panggilan balik ComponentIdleStateCallback . Panggilan PoFxCompleteIdleState dapat terjadi baik sebelum atau sesudah rutinitas ComponentIdleStateCallback kembali.
Jika komponen beralih dari F0 ke status Fx berdaya rendah di mana perangkat akan kehilangan status perangkat keras komponen, driver harus menyimpan status perangkat keras komponen sebelum transisi ke status Fx baru terjadi. Jika komponen beralih dari status Fx berdaya rendah ke F0, dan status perangkat keras sebelumnya disimpan, driver harus memulihkan status perangkat keras setelah daya dipulihkan ke komponen.
Untuk beberapa perangkat, status daya komponen mungkin dikontrol di perangkat keras perangkat. Untuk perangkat ini, driver biasanya bertanggung jawab untuk mengubah status daya komponen. Untuk perangkat lain, status daya komponen mungkin dikontrol oleh perangkat keras yang berada di luar perangkat, dan driver biasanya harus mengandalkan PoFx untuk mengonfigurasi status daya komponen.
Jika driver bertanggung jawab untuk mengonfigurasi status daya komponen, driver harus mengubah status daya sebagai respons terhadap panggilan balik ComponentIdleStateCallback . Untuk transisi dari F0 ke status Fx berdaya rendah, komponen berada di F0 pada entri ke rutinitas ComponentIdleStateCallback , dan driver harus mengalihkan komponen status Fx baru sebelum memanggil PoFxCompleteIdleState. Untuk transisi dari status Fx berdaya rendah ke F0, komponen berada dalam status Fx berdaya rendah pada entri ke rutinitas ComponentIdleStateCallback , dan driver harus mengalihkan komponen ke F0 sebelum memanggil PoFxCompleteIdleState.
Jika driver tidak bertanggung jawab untuk mengonfigurasi status daya komponen, driver harus berasumsi bahwa komponen selalu dalam status F0 pada entri ke rutinitas ComponentIdleStateCallback . Untuk transisi tertunda dari F0 ke status Fx berdaya rendah, transisi ke status Fx baru tidak terjadi sampai setelah driver memanggil PoFxCompleteIdleState. Untuk transisi dari status Fx berdaya rendah ke F0, transisi ke F0 terjadi sebelum rutinitas ComponentIdleStateCallback dipanggil.
PoFx tidak pernah memanggil rutinitas ComponentIdleStateCallback untuk beralih langsung dari satu status Fx berdaya rendah ke status Fx berdaya rendah lainnya. Misalnya, PoFx mungkin perlu mengalihkan komponen dari satu status Fx berdaya rendah ke status lain sebagai respons terhadap panggilan ke rutinitas PoFxSetComponentLatency, PoFxSetComponentResidency, atau PoFxSetComponentWake . Dalam hal ini, PoFx pertama-tama memanggil rutinitas ComponentIdleStateCallback untuk beralih dari status Fx lama ke F0, lalu memanggil rutinitas ComponentIdleStateCallback untuk kedua kalinya untuk beralih dari F0 ke status Fx baru.
Contoh
Untuk menentukan rutinitas panggilan balik ComponentIdleStateCallback , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis rutinitas panggilan balik yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi panggilan balik untuk driver. Mendeklarasikan fungsi menggunakan jenis fungsi panggilan balik membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.
Misalnya, untuk menentukan rutinitas panggilan balik ComponentIdleStateCallback yang diberi nama MyComponentIdleStateCallback
, gunakan jenis PO_FX_COMPONENT_IDLE_STATE_CALLBACK seperti yang ditunjukkan dalam contoh kode ini:
PO_FX_COMPONENT_IDLE_STATE_CALLBACK MyComponentIdleStateCallback;
Kemudian, terapkan rutinitas panggilan balik Anda sebagai berikut:
_Use_decl_annotations_
VOID
MyComponentIdleStateCallback(
PVOID Context,
ULONG Component,
ULONG State
)
{
// Function body
}
Jenis fungsi PO_FX_COMPONENT_IDLE_STATE_CALLBACK didefinisikan dalam file header Wdm.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan _Use_decl_annotations_
anotasi ke definisi fungsi Anda. Anotasi _Use_decl_annotations_
memastikan bahwa anotasi yang diterapkan ke jenis fungsi PO_FX_COMPONENT_IDLE_STATE_CALLBACK dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver WDM. Untuk informasi tentang _Use_decl_annotations_
, lihat Menganotasi Perilaku Fungsi.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Didukung di Windows versi Windows 8 dan yang lebih baru. |
Target Platform | Desktop |
Header | wdm.h (termasuk Wudfwdm.h) |
IRQL | Dipanggil di IRQL <= DISPATCH_LEVEL. |