Fungsi PoFxActivateComponent (wdm.h)

Rutinitas PoFxActivateComponent meningkatkan jumlah referensi aktivasi pada komponen yang ditentukan.

Sintaks

void PoFxActivateComponent(
  [in] POHANDLE Handle,
  [in] ULONG    Component,
  [in] ULONG    Flags
);

Parameter

[in] Handle

Handel yang mewakili pendaftaran perangkat dengan kerangka kerja manajemen daya (PoFx). Driver perangkat sebelumnya menerima handel ini dari rutinitas PoFxRegisterDevice .

[in] Component

Indeks yang mengidentifikasi 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 antara 0 hingga N–1.

[in] Flags

Bendera untuk operasi aktivasi. Atur anggota ini ke nol atau ke salah satu bendera berikut PO_FX_FLAG_XXX bit:

Kedua bit bendera ini saling eksklusif. Untuk informasi selengkapnya, lihat Keterangan.

Nilai Makna
PO_FX_FLAG_BLOCKING
0x1
Buat perubahan kondisi sinkron. Jika bendera ini diatur, rutinitas yang meminta perubahan kondisi tidak mengembalikan kontrol ke driver panggilan hingga perangkat keras komponen menyelesaikan transisi ke kondisi baru. Bendera ini hanya dapat digunakan jika penelepon berjalan di IRQL < DISPATCH_LEVEL.
PO_FX_FLAG_ASYNC_ONLY
0x2
Buat kondisi berubah sepenuhnya asinkron. Jika bendera ini diatur, rutinitas panggilan balik driver memanggil dipanggil dari utas selain utas tempat rutinitas yang meminta perubahan kondisi dipanggil. Dengan demikian, rutinitas yang meminta perubahan kondisi selalu kembali secara asinkron tanpa menunggu panggilan balik selesai.

Nilai kembali

Tidak ada

Keterangan

Sebelum driver perangkat dapat mengakses komponen di perangkat, driver harus terlebih dahulu memanggil PoFxActivateComponent untuk mendapatkan referensi aktivasi ke komponen. Jika komponen belum dalam kondisi aktif, panggilan ini memulai transisi dari kondisi menganggur ke kondisi aktif. Ketika transisi ini selesai, PoFx memanggil rutinitas ComponentActiveConditionCallback driver untuk memberi tahu driver. Driver dapat mengakses register perangkat keras dalam komponen hanya ketika komponen dalam kondisi aktif.

Jika komponen sudah dalam kondisi aktif ketika PoFxActivateComponent dipanggil, tidak diperlukan transisi, dan rutinitas ComponentActiveConditionCallback tidak dipanggil.

Setelah komponen memasuki kondisi aktif, komponen tetap dalam kondisi aktif selama driver memegang satu atau beberapa referensi aktivasi pada komponen. Untuk merilis referensi aktivasi, driver memanggil rutinitas PoFxIdleComponent . Ketika driver merilis referensi aktivasi terakhir pada komponen, PoFxIdleComponent memulai transisi dari kondisi aktif ke kondisi diam. Komponen yang berada dalam kondisi diam berpotensi memasuki status Fx berdaya rendah.

Jika Bendera = PO_FX_FLAG_BLOCKING, panggilan PoFxActivateComponent sinkron. Jika komponen sudah dalam kondisi aktif, panggilan akan menaikkan jumlah referensi aktivasi dan kembali tanpa menunggu. Jika tidak, PoFxActivateComponent menunggu untuk kembali sampai komponen menyelesaikan transisi ke kondisi aktif. Dalam hal ini, jika komponen belum dalam status F0 ketika panggilan terjadi, PoFxActivateComponent memanggil rutinitas ComponentIdleStateCallback driver untuk memulai transisi ke F0. Setelah komponen memasuki status F0, PoFxActivateComponent memanggil rutinitas ComponentActiveConditionCallback driver untuk memberi tahu driver bahwa komponen dalam kondisi aktif. Panggilan balik ini terjadi di utas yang sama dengan panggilan ke PoFxActivateComponent, dan PoFxActivateComponent hanya mengembalikan setelah panggilan balik ComponentActiveConditionCallback kembali.

Jika Bendera = PO_FX_FLAG_ASYNC_ONLY, panggilan PoFxActivateComponent tidak sinkron. Jika komponen sudah dalam kondisi aktif, panggilan akan menaikkan jumlah referensi aktivasi dan mengembalikan. Jika tidak, PoFxActivateComponent menjadwalkan panggilan balik ComponentIdleStateCallback (jika perlu) dan ComponentActiveConditionCallback terjadi di utas lain, lalu kembali tanpa menunggu panggilan balik terjadi. Panggilan balik dapat terjadi sebelum atau setelah PoFxActivateComponent kembali. Driver bergantung pada panggilan balik ComponentActiveConditionCallback untuk menentukan kapan komponen menyelesaikan transisi ke kondisi aktif.

Driver dapat mengatur Bendera = 0 untuk menunjukkan bahwa tidak peduli apakah panggilan PoFxActivateComponent sinkron atau asinkron. Dalam hal ini, PoFx memutuskan apakah akan membuat panggilan sinkron atau asinkron.

Dua atau lebih jalur kode di driver yang sama mungkin perlu mengakses komponen tertentu secara bersamaan. Rutinitas PoFxActivateComponent dan PoFxIdleComponent menggunakan jumlah referensi aktivasi untuk memungkinkan berbagai bagian driver mempertahankan akses secara independen ke komponen tanpa mengharuskan driver mengelola akses ke komponen secara terpusat.

PoFx mempertahankan jumlah referensi aktivasi untuk setiap komponen dalam perangkat. Panggilan PoFxActivateComponent meningkatkan jumlah ini satu per satu, dan panggilan PoFxIdleComponent mengurangi hitungan satu per satu. Ketika hitungan bukan nol, komponen berada dalam kondisi aktif atau sedang dalam proses beralih ke kondisi aktif. Komponen yang memiliki hitungan nol baik dalam kondisi diam atau sedang dalam proses beralih ke kondisi diam.

Ketika panggilan PoFxActivateComponent menyebabkan jumlah referensi aktivasi bertambah dari 0 hingga 1, PoFxActivateComponent memulai transisi dari kondisi diam ke kondisi aktif. Ketika panggilan PoFxIdleComponent menyebabkan jumlah turun dari 1 ke 0, PoFxIdleComponent memulai transisi dari kondisi aktif ke kondisi menganggur.

PoFx memberi tahu driver ketika transisi antara kondisi aktif dan kondisi diam terjadi. Panggilan balik ComponentActiveConditionCallback memberi tahu driver transisi ke kondisi aktif, dan panggilan balik ComponentIdleConditionCallback memberi tahu driver transisi ke kondisi diam. Ketika panggilan PoFxActivateComponent atau PoFxIdleComponent hanya meningkatkan atau mengurangi jumlah referensi aktivasi tanpa menyebabkan transisi seperti itu, driver tidak menerima pemberitahuan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 8.
Target Platform Universal
Header wdm.h
Pustaka Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Lihat juga

ComponentActiveConditionCallback

ComponentIdleStateCallback

PO_FX_DEVICE

PoFxIdleComponent

PoFxRegisterDevice