EVT_SPB_CONTROLLER_LOCK fungsi panggilan balik (spbcx.h)

Fungsi panggilan balik peristiwa EvtSpbControllerLock driver pengontrol SPB mengunci pengontrol SPB untuk akses perangkat target tunggal di bus.

Sintaks

EVT_SPB_CONTROLLER_LOCK EvtSpbControllerLock;

void EvtSpbControllerLock(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST LockRequest
)
{...}

Parameter

[in] Controller

Handel WDFDEVICE ke objek perangkat kerangka kerja yang mewakili pengontrol SPB.

[in] Target

SPBTARGET menangani target untuk permintaan I/O ini. Targetnya adalah perangkat periferal atau port yang terpasang pada bus. Ekstensi kerangka kerja SPB (SpbCx) sebelumnya menetapkan handel ini ke target dalam panggilan balik EvtSpbTargetConnect yang membuka koneksi ke target.

[in] LockRequest

HANDEL SPBREQUEST ke permintaan kontrol I/O untuk mengunci pengontrol. Driver pengontrol SPB Anda harus menyelesaikan permintaan ini baik dengan melakukan operasi yang diminta atau dengan mengembalikan status kesalahan. Untuk informasi selengkapnya, lihat Keterangan.

Mengembalikan nilai

Tidak ada

Keterangan

SpbCx mengelola antrean I/O untuk pengontrol SPB. Jika driver pengontrol SPB mendaftarkan fungsi panggilan balik EvtSpbControllerLock , SpbCx memanggil fungsi ini ketika klien (driver periferal) pengontrol mengirimkan permintaan IOCTL_SPB_LOCK_CONTROLLER ke target pada bus. Nilai parameter LockRequest adalah handel yang merangkum permintaan ini.

Fungsi EvtSpbControllerLock dan EvtSpbControllerUnlock melakukan operasi pelengkap. Kedua fungsi bersifat opsional. Jika driver pengontrol SPB Anda mengimplementasikan fungsi EvtSpbControllerUnlock , driver tidak diperlukan untuk mengimplementasikan fungsi EvtSpbControllerLock , tetapi mungkin melakukannya. Namun, jika driver pengontrol SPB Anda mengimplementasikan fungsi EvtSpbControllerLock , driver ini juga harus menerapkan fungsi EvtSpbControllerUnlock . Untuk informasi selengkapnya, lihat Keterangan di SPB_CONTROLLER_CONFIG.

Saat kunci berlaku, pengontrol tidak boleh mengizinkan akses ke target pada bus selain target yang ditunjuk oleh parameter LockRequest .

Jika driver pengontrol SPB perlu mengubah mode pengontrolnya untuk mengganti mekanisme pemilihan target normal untuk sementara waktu, pengontrol dapat melakukannya selama panggilan balik EvtSpbControllerLock . Jika perubahan mode ini melibatkan penundaan panjang atau mengharuskan driver menunggu interupsi perangkat, driver harus memulai perubahan mode dan kemudian kembali dari panggilan balik tanpa penundaan. Nantinya, driver dapat menyelesaikan operasi penguncian di DPC timer atau DPC interupsi.

Jika operasi penguncian selesai dalam DPC, driver pengontrol SPB sebelumnya harus telah mengalokasikan semua sumber daya yang dibutuhkan untuk operasi penguncian.

Panggilan balik EvtSpbControllerLock harus menghindari permintaan penguncian yang gagal. Jika Driver Verifier diaktifkan, kegagalan seperti itu akan memicu perangkap pemverifikasi, yang akan melaporkan ke manajer Plug and Play bahwa pengontrol telah gagal. SpbCx mengabaikan kegagalan permintaan kunci dan tidak mencoba menangani atau mengurangi kegagalan.

Fungsi EvtSpbControllerLock tidak mengembalikan nilai. Sebaliknya, driver pengontrol SPB menunjukkan status operasi penguncian dalam status penyelesaian permintaan I/O yang diidentifikasi oleh parameter LockRequest . Atur status penyelesaian ke STATUS_SUCCESS.

SpbCx memanggil fungsi panggilan balik peristiwa EvtSpbControllerUnlock untuk membuka kunci pengontrol yang sebelumnya dikunci oleh panggilan balik EvtSpbControllerLock .

Untuk mendaftarkan fungsi panggilan balik EvtSpbControllerLock , panggil metode SpbDeviceInitialize .

Untuk informasi selengkapnya tentang fungsi EvtSpbControllerLock , lihat Menangani Urutan Client-Implemented.

Contoh

Untuk menentukan fungsi panggilan balik EvtSpbControllerLock , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi 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 fungsi panggilan balik EvtSpbControllerLock yang diberi nama MyEvtSpbControllerLock, gunakan jenis fungsi EVT_SPB_CONTROLLER_LOCK, seperti yang ditunjukkan dalam contoh kode ini:

EVT_SPB_CONTROLLER_LOCK  MyEvtSpbControllerLock;

Kemudian, terapkan fungsi panggilan balik Anda sebagai berikut:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerLock(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST LockRequest
    )
{ ... }

Jenis fungsi EVT_SPB_CONTROLLER_LOCK didefinisikan dalam file header Spbcx.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi EVT_SPB_CONTROLLER_LOCK dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver KMDF. Untuk informasi selengkapnya tentang Use_decl_annotations, lihat Perilaku Fungsi Anotasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung dimulai dengan Windows 8.
Target Platform Desktop
Header spbcx.h
IRQL Dipanggil di IRQL <= DISPATCH_LEVEL.

Lihat juga