Makro WdfDeviceStopIdle (wdfdevice.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfDeviceStopIdle menginformasikan kerangka kerja bahwa perangkat yang ditentukan harus ditempatkan dalam status daya yang berfungsi (D0).
Sintaks
NTSTATUS WdfDeviceStopIdle(
_In_ WDFDEVICE Device,
_In_ BOOLEAN WaitForD0
);
Parameter
[in] Device
Handel ke objek perangkat kerangka kerja.
[in] WaitForD0
Nilai Boolean yang menunjukkan kapan WdfDeviceStopIdle akan kembali. Jika TRUE, maka akan kembali hanya setelah perangkat yang ditentukan memasuki status daya perangkat D0. Jika FALSE, metode akan segera dikembalikan.
Nilai kembali
Tidak ada
Keterangan
Makro ini bisa mengembalikan nilai berikut:
Mengembalikan nilai | Makna |
---|---|
STATUS_PENDING | Perangkat sedang dinyalakan secara asinkron. |
STATUS_INVALID_DEVICE_STATE | Driver bukan pemilik kebijakan daya untuk perangkat. |
STATUS_POWER_STATE_INVALID | Terjadi kegagalan perangkat dan perangkat tidak dapat memasuki status daya D0. |
Metode ini mungkin mengembalikan nilai NTSTATUS lainnya.
Catatan
Untuk perangkat yang menentukan SystemManagedIdleTimeout atau SystemManagedIdleTimeoutWithHint dalam enumerasi WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE , saat memanggil WdfDeviceStopIdle dengan WaitForD0 diatur ke FALSE, jika perangkat masih dalam D0 dan periode batas waktu diam belum berlalu, mulai dari WDF versi 1.33/2.33, WdfDeviceStopIdle mengembalikan STATUS_SUCCESS (dalam versi sebelumnya ini menghasilkan nilai pengembalian STATUS_PENDING).
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Jika perangkat Anda dapat memasuki status daya rendah saat diam, driver Anda mungkin harus sesekali memanggil WdfDeviceStopIdle untuk membawa perangkat kembali ke status berfungsi (D0) atau untuk mencegahnya memasuki status daya rendah.
WdfDeviceStopIdle tidak mencegah kerangka kerja transisi perangkat ke status tidur ketika sistem berubah menjadi status tidur Sx. Satu-satunya efeknya adalah mencegah transisi ke status tidur Dx saat sistem berada dalam status kerja S0. Demikian pula, jika perangkat mendukung manajemen daya yang diarahkan, WdfDeviceStopIdle tidak mencegah perangkat memasuki daya yang diarahkan ke bawah.
Peringatan
Jangan panggil WdfDeviceStopIdle dengan WaitForD0 = TRUE selama daya mati, baik secara langsung maupun tidak langsung. Misalnya, jika panggilan balik EvtDeviceArmWakeFromS0 menunggu di utas WdfDeviceStopIdle(TRUE)
lain yang memanggil , transisi daya diblokir dan sistem mengalami crash.
Driver Anda tidak perlu memanggil WdfDeviceStopIdle saat perangkat menganggur dan kerangka kerja menempatkan permintaan I/O dalam antrean I/O yang dikelola daya perangkat. Selain itu, driver Anda tidak perlu memanggil WdfDeviceStopIdle saat perangkat diam dan mendeteksi sinyal bangun. Dalam kedua kasus ini, kerangka kerja meminta driver bus untuk memulihkan status daya perangkat ke D0.
Meskipun driver biasanya tidak perlu memanggil WdfDeviceStopIdle saat menangani permintaan I/O yang mereka peroleh dari antrean I/O yang dikelola daya, panggilan diizinkan. Namun, driver tidak boleh mengatur parameter WaitForD0 ke TRUE saat menangani permintaan I/O dari antrean I/O yang dikelola daya.
Driver Anda memang harus memanggil WdfDeviceStopIdle jika harus mengakses perangkat karena permintaan yang diterima driver di luar antrean I/O yang dikelola daya. Misalnya, driver Anda mungkin mendukung antarmuka yang ditentukan driver atau permintaan WMI yang memerlukan akses perangkat. Dalam hal ini, Anda harus memastikan bahwa perangkat dalam keadaan berfungsi sebelum driver mengakses perangkat, dan bahwa perangkat tetap dalam status kerjanya sampai driver selesai mengakses perangkat.
Memanggil WdfDeviceStopIdle memaksa perangkat ke status berfungsi (D0), jika sistem dalam status berfungsi (S0). Perangkat tetap dalam status kerjanya sampai driver memanggil WdfDeviceResumeIdle, di mana kerangka kerja dapat menempatkan perangkat dalam status daya rendah jika tetap menganggur.
Jangan panggil WdfDeviceStopIdle sebelum kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0Entry driver untuk pertama kalinya.
Panggilan ke WdfDeviceStopIdle dapat memulihkan perangkat diam ke status kerjanya hanya jika sistem dalam status berfungsi (S0). Jika sistem beralih ke status daya rendah atau perangkat telah dimatikan sebagai respons terhadap Sx (di mana x > 0) ketika driver memanggil WdfDeviceStopIdle dengan parameter WaitForD0 diatur ke TRUE, fungsi tidak kembali sampai sistem kembali ke status S0-nya.
Setiap panggilan yang berhasil ke WdfDeviceStopIdle akhirnya harus diikuti dengan panggilan ke WdfDeviceResumeIdle, atau perangkat tidak akan pernah kembali ke status daya rendah jika kembali menganggur. Panggilan ke WdfDeviceStopIdle dapat ditumpuk, sehingga jumlah panggilan ke WdfDeviceResumeIdle harus sama dengan jumlah panggilan ke WdfDeviceStopIdle. Jangan panggil WdfDeviceResumeIdle jika panggilan ke WdfDeviceStopIdle gagal.
Jika sistem memasuki status daya rendah setelah WdfDeviceStopIdle kembali, perangkat juga memasuki status daya rendah. Ketika sistem kembali ke status berfungsi (S0), perangkat juga kembali ke status berfungsi (D0). Referensi daya dari panggilan ke WdfDeviceStopIdle tetap aktif dan mencegah perangkat memasuki status daya rendah hingga ada panggilan yang cocok ke WdfDeviceResumeIdle.
Untuk informasi selengkapnya, lihat Mendukung Power-Down Menganggur.
Jika WaitForD0TRUE, WdfDeviceStopIdle harus dipanggil di IRQL = PASSIVE_LEVEL. Jika WaitForD0FALSE, metode ini harus dipanggil di IRQL <= DISPATCH_LEVEL.
Memanggil WdfDeviceStopIdleWithTag alih-alihWdfDeviceStopIdle menyediakan informasi tambahan (nilai tag, nomor baris, dan nama file) yang dapat Anda lihat di debugger Microsoft.
Contoh
Dalam contoh kode berikut, WdfDeviceStopIdle kembali setelah perangkat yang ditentukan memasuki status daya perangkat D0.
NTSTATUS status;
status = WdfDeviceStopIdle(Device, TRUE);
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | wdfdevice.h (termasuk Wdf.h) |
Pustaka | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | Lihat bagian Keterangan. |
Aturan kepatuhan DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk