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