Pengguna Melepas Perangkat

Saat sistem berjalan, pengguna dapat menghapus perangkat dengan salah satu dari dua cara: dengan penghapusan tertib, yang berarti bahwa pengguna memberi tahu sistem bahwa perangkat akan dihapus (misalnya, dengan menggunakan program Cabut atau Lepaskan Perangkat Keras); atau dengan penghapusan mendadak, yang berarti bahwa pengguna mencabut perangkat tanpa memberi tahu sistem. Jika bus mendukung penghapusan mendadak (misalnya, USB), driver perangkat harus dapat menangani hilangnya perangkat secara tiba-tiba.

Penghapusan Tertib

Pengguna meminta penghapusan dengan menggunakan program Cabut atau Keluarkan Perangkat Keras sistem, dengan menonaktifkan perangkat dengan menggunakan Manajer Perangkat, atau dengan mendorong tombol keluarkan perangkat yang dapat dikeluarkan. Kerangka kerja memungkinkan perangkat dihapus atau dinonaktifkan, kecuali driver memiliki:

Untuk setiap fungsi dan driver filter yang mendukung perangkat, kerangka kerja melakukan hal berikut, secara berurutan, satu driver pada satu waktu, dimulai dengan driver yang tertinggi di tumpukan driver:

  1. Jika driver menggunakan I/O yang dikelola sendiri, kerangka kerja memanggil fungsi panggilan balik EvtDeviceSelfManagedIoSuspend driver.

  2. Kerangka kerja menghentikan semua antrean I/O yang dikelola daya driver.

  3. Jika perangkat keras dan driver mendukung DMA, kerangka kerja memanggil fungsi panggilan balik EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush, dan EvtDmaEnablerDisable driver (jika ada) untuk setiap saluran DMA yang dibuat.

  4. Kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0ExitPreInterruptsDisabled driver (jika ada), lalu memanggil fungsi panggilan balik EvtInterruptDisable driver (jika ada) untuk setiap gangguan sehingga driver dapat menonaktifkan gangguan perangkat.

  5. Kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0Exit driver (jika ada).

  6. Kerangka kerja memanggil fungsi panggilan balik EvtDeviceReleaseHardware driver (jika ada), meneruskannya daftar sumber daya perangkat keras yang telah ditetapkan manajer PnP ke perangkat.

  7. Jika driver menggunakan I/O yang dikelola sendiri, kerangka kerja memanggil fungsi panggilan balik EvtDeviceSelfManagedIoFlush driver.

  8. Jika driver menggunakan I/O yang dikelola sendiri, kerangka kerja memanggil fungsi panggilan balik EvtDeviceSelfManagedIoCleanup driver.

Sopir bus adalah sopir di tumpukan yang disebut terakhir. Ketika kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0Exit driver bus, fungsi panggilan balik mengatur status daya perangkat (perangkat anak bus) ke D3. Driver bus dapat mengontrol kapan kerangka kerja memanggil fungsi panggilan balik EvtDeviceReleaseHardware dengan memanggil WdfDeviceInitSetReleaseHardwareOrderOnFailure.

Penghapusan Kejutan

Pengguna men cabut perangkat secara tak terduga. Driver bus untuk bus perangkat menemukan bahwa perangkat hilang dan memanggil WdfChildListUpdateChildDescriptionAsMissing.

Untuk setiap fungsi dan driver filter yang mendukung perangkat, kerangka kerja melakukan hal berikut, secara berurutan, satu driver pada satu waktu, dimulai dengan driver yang tertinggi di tumpukan driver:

  1. Kerangka kerja memanggil fungsi panggilan balik EvtDeviceSurpriseRemoval driver (jika ada).
  2. Jika perangkat dalam status berfungsi (D0) saat dicabut:
    1. Kerangka kerja menghentikan semua antrean I/O yang dikelola daya driver.
    2. Jika driver menggunakan I/O yang dikelola sendiri, kerangka kerja memanggil fungsi panggilan balik EvtDeviceSelfManagedIoSuspend driver.
    3. Jika perangkat keras dan driver mendukung DMA, kerangka kerja memanggil fungsi panggilan balik EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush, dan EvtDmaEnablerDisable driver (jika ada) untuk setiap saluran DMA yang dibuat.
    4. Kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0ExitPreInterruptsDisabled dan EvtInterruptDisable driver (jika ada) sehingga driver dapat menonaktifkan gangguan perangkat.
    5. Kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0Exit driver (jika ada).
  3. Kerangka kerja memanggil fungsi panggilan balik EvtDeviceReleaseHardware driver (jika ada), meneruskan daftar sumber daya perangkat keras yang telah ditetapkan manajer PnP ke perangkat.
  4. Jika driver menggunakan I/O yang dikelola sendiri, kerangka kerja memanggil fungsi panggilan balik EvtDeviceSelfManagedIoFlush driver.
  5. Jika driver menggunakan I/O yang dikelola sendiri, kerangka kerja memanggil fungsi panggilan balik EvtDeviceSelfManagedIoCleanup driver.

Perhatikan bahwa perangkat dapat dihapus secara tiba-tiba kapan saja. Oleh karena itu, kerangka kerja mungkin memanggil fungsi panggilan balik EvtDeviceSurpriseRemoval driver pada satu waktu selain yang ditunjukkan pada langkah-langkah sebelumnya. Misalnya, jika pengguna secara tidak terduga mencabut perangkat saat memasuki status daya rendah, kerangka kerja mungkin memanggil fungsi panggilan balik EvtDeviceSurpriseRemoval setelah memanggil fungsi panggilan balik EvtDeviceReleaseHardware . Anda tidak boleh membuat kode fungsi panggilan balik EvtDeviceSurpriseRemoval dengan cara yang mengasumsikan bahwa fungsi panggilan balik dan lainnya dipanggil dalam urutan tertentu.

Selain itu, kerangka kerja tidak menyinkronkan fungsi panggilan balik EvtDeviceSurpriseRemoval perangkat dengan salah satu fungsi panggilan balik yang tercantum dalam langkah-langkah sebelumnya untuk perangkat tersebut. Oleh karena itu, fungsi panggilan balik EvtDeviceSurpriseRemoval mungkin berjalan sementara fungsi panggilan balik lain yang tercantum sebelumnya juga berjalan.