EVT_SPB_CONTROLLER_OTHER fungsi panggilan balik (spbcx.h)

Fungsi panggilan balik peristiwa EvtSpbControllerIoOther driver pengontrol SPB menangani permintaan kontrol I/O perangkat yang tidak ditangani oleh fungsi panggilan balik peristiwa lain atau oleh ekstensi kerangka kerja SPB (SpbCx).

Sintaks

EVT_SPB_CONTROLLER_OTHER EvtSpbControllerOther;

void EvtSpbControllerOther(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Parameter

[in] Controller

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

[in] Target

Handel SPBTARGET ke 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] Request

HANDEL SPBREQUEST ke permintaan I/O. Driver pengontrol SPB Anda harus menyelesaikan permintaan ini. Untuk informasi selengkapnya, lihat Keterangan.

[in] OutputBufferLength

Panjangnya, dalam byte, dari buffer output, jika buffer output disediakan dengan permintaan.

[in] InputBufferLength

Panjang, dalam byte, dari buffer input, jika buffer input disediakan dengan permintaan.

[in] IoControlCode

Kode kontrol I/O (IOCTL) untuk permintaan tersebut. Nilai ini adalah IOCTL yang tidak dikenali oleh ekstensi kerangka kerja SPB (SpbCx). Untuk informasi selengkapnya, lihat Keterangan.

Nilai kembali

Tidak ada

Keterangan

SpbCx mengelola antrean I/O untuk pengontrol SPB. Jika driver pengontrol SPB mendaftarkan fungsi panggilan balik EvtSpbControllerIoOther , SpbCx memanggil fungsi ini ketika permintaan kontrol I/O perangkat yang tidak didukung SpbCx tiba dalam antrean I/O pengontrol. Nilai parameter Permintaan adalah handel yang merangkum permintaan ini. Driver pengontrol SPB harus menyelesaikan permintaan ini baik dengan melakukan operasi yang diminta atau dengan mengembalikan status kesalahan. Jika driver tidak mendukung IOCTL yang ditentukan, driver harus mengembalikan status kesalahan STATUS_NOT_SUPPORTED. Untuk daftar IOCTL yang didukung SpbCx, lihat Kode Kontrol SpbCx I/O.

Panggilan balik EvtSpbControllerIoOther memungkinkan perintah khusus bus atau khusus driver dikirim ke driver pengontrol SPB sebagai IOCTL. Misalnya, klien (driver periferal) mungkin menggunakan IOCTL ini untuk mengoordinasikan operasi khusus bus, seperti pertukaran data dupleks penuh dengan perangkat target pada bus SPI. IOCTL tersebut tunduk pada kontrol alur yang sama dengan IOCTL yang didukung oleh SpbCx.

Fungsi panggilan balik EvtSpbControllerIoOther mirip dengan EvtIoDeviceControl dan memproses IOCTL dengan cara yang sama. Untuk informasi umum tentang cara driver WDF menangani permintaan I/O, lihat Objek Permintaan Kerangka Kerja.

Panggilan balik EvtSpbControllerIoOther tidak mengembalikan nilai status. Sebaliknya, driver pengontrol SPB menunjukkan status operasi yang diminta dalam status penyelesaian untuk permintaan I/O.

Jika permintaan I/O tidak dapat segera diselesaikan, fungsi panggilan balik harus kembali tanpa menunggu driver pengontrol SPB selesai memproses permintaan. Driver pengontrol SPB nantinya dapat menyelesaikan permintaan secara asinkron.

Fungsi EvtSpbControllerIoOther harus memvalidasi nilai parameter dalam permintaan kontrol I/O yang diterimanya dari klien mode pengguna. Untuk semua fungsi panggilan balik EvtSpbXxx selain EvtSpbControllerIoOther, SpbCx memvalidasi parameter mode pengguna sebelum memanggil fungsi.

Untuk mendaftarkan fungsi panggilan balik EvtSpbControllerIoOther , panggil metode SpbControllerSetIoOther .

Contoh

Untuk menentukan fungsi panggilan balik EvtSpbControllerIoOther , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi panggilan balik yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi panggilan balik untuk pengandar. 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 EvtSpbControllerIoOther yang diberi nama MyEvtSpbControllerIoOther, gunakan jenis fungsi EVT_SPB_CONTROLLER_OTHER, seperti yang ditunjukkan dalam contoh kode ini:

EVT_SPB_CONTROLLER_OTHER  MyEvtSpbControllerIoOther;

Kemudian, terapkan fungsi panggilan balik Anda sebagai berikut:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoOther(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t OutputBufferLength,
    size_t InputBufferLength,
    ULONG IoControlCode
    )
{ ... }

Jenis fungsi EVT_SPB_CONTROLLER_OTHER ditentukan 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_OTHER 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

EvtIoDeviceControl

EvtSpbTargetConnect

SPBREQUEST

SPBTARGET

SpbControllerSetIoOther