Handel Objek SpbCx

Topik ini menjelaskan handel objek yang ditentukan untuk pustaka ekstensi kerangka kerja SPB (SpbCx).

Selain itu, SerCx2 DDI menggunakan dua jenis handel objek generik, WDFDEVICE dan WDFREQUEST, yang ditentukan oleh Kernel-Mode Driver Framework (KMDF). Untuk informasi selengkapnya tentang jenis handel kerangka kerja, lihat Ringkasan Objek Kerangka Kerja.

Topik ini menjelaskan penanganan objek berikut:

Header: Spbcx.h

Handel Objek SPBREQUEST

Handel objek SPBREQUEST mewakili permintaan I/O yang dikeluarkan untuk perangkat target pada bus.

DECLARE_HANDLE(SPBREQUEST)

Kelas objek SPBREQUEST berasal dari kelas objek WDFREQUEST , yang mewakili permintaan I/O yang dikirim oleh manajer I/O. Dengan demikian, metode WdfRequestXxx yang mengambil nilai handel WDFREQUEST sebagai parameter menerima nilai handel SPBREQUEST sebagai nilai parameter yang valid. Untuk informasi selengkapnya tentang metode ini, lihat Objek Permintaan Kerangka Kerja.

Namun, beberapa metode SpbCx dan fungsi panggilan balik secara khusus memerlukan handel SPBREQUEST sebagai parameter. Untuk parameter seperti itu, mengganti handel WDFREQUEST yang bukan juga handel SPBREQUEST adalah kesalahan.

Misalnya, metode SpbRequestGetTransferParameters mengambil handel SPBREQUEST sebagai parameter. Untuk menyediakan, untuk parameter ini, handel WDFREQUEST yang bukan juga handel SPBREQUEST adalah kesalahan. Alasan untuk persyaratan ini adalah bahwa objek SPBREQUEST harus menyimpan informasi status tambahan khusus SPB untuk mendukung urutan transfer I/O. Kelas objek dasar WDFREQUEST tidak menyediakan dukungan ini.

Selama inisialisasi perangkat, driver pengontrol SPB Anda dapat menetapkan konteks per permintaan ke handel SPBREQUEST dengan memanggil metode SpbControllerSetRequestAttributes .

Handel Objek SPBTARGET

Handel objek SPBTARGET mengidentifikasi koneksi logis dari klien (driver periferal) ke port atau perangkat periferal yang dapat diatasi di bus.

DECLARE_HANDLE(SPBTARGET)

Untuk bus I2C, handel SPBTARGET sesuai dengan alamat perangkat tertentu.
Untuk bus SPI, handel SPBTARGET sesuai dengan baris yang dipilih perangkat.

Biasanya, objek SPBTARGET ada dari awal panggilan balik peristiwa EvtSpbTargetConnect melalui akhir panggilan balik peristiwa EvtSpbTargetDisconnect yang sesuai. Namun, masa pakai objek SPBTARGET mungkin melampaui panggilan balik kedua jika driver pengontrol SPB mengambil referensi tambahan pada objek SPBTARGET untuk mencegah objek menghilang secara tiba-tiba selama pemrosesan permintaan I/O untuk target.

Driver pengontrol SPB melakukan semua operasi khusus perangkat keras untuk perangkat pengontrol SPB. Ketika klien mengirim permintaan IRP_MJ_CREATE untuk membuka koneksi ke target pada bus, ekstensi kerangka kerja SPB (SpbCx), yang mengelola antrean I/O untuk driver pengontrol, meneruskan permintaan ini ke driver pengontrol SPB dengan memanggil fungsi panggilan balik EvtSpbTargetConnect driver ini. Parameter Target dari fungsi ini adalah handel SPBTARGET. Fungsi ini dapat menggunakan handel ini untuk mengambil informasi sumber daya khusus koneksi (misalnya, alamat perangkat) dari manajer PnP. Ketika klien mengirim permintaan IRP_MJ_CLOSE untuk menutup koneksi, SpbCx meneruskan permintaan ini ke fungsi panggilan balik EvtSpbTargetDisconnect driver pengontrol SPB, yang merilis sumber daya ini.

Akses Exclusive-Mode

Klien memiliki mode eksklusif untuk mengakses perangkat target. Hanya satu klien yang dapat memiliki koneksi ke perangkat target tertentu pada satu waktu. SpbCx memastikan bahwa hanya satu handel SPBTARGET yang ada untuk alamat perangkat target di bus. Pembatasan ini diperlukan karena SpbCx tidak mendukung interleaving permintaan I/O yang dikirim oleh dua klien atau lebih ke perangkat target. Jika perangkat target harus dapat menerima permintaan dari beberapa klien, perangkat ini memerlukan driver MUX—terpisah dari driver pengontrol—yang dapat menyela operasi yang diminta dengan benar.

Interoperabilitas dengan KMDF

Metode Dukungan Driver SerCx2 dan Fungsi Panggilan Balik Peristiwa SpbCx yang ditentukan oleh SpbCx menggunakan handel SPBTARGET untuk mewakili koneksi terbuka ke perangkat target di bus. Namun, driver pengontrol biasanya harus memanggil metode KMDF yang memerlukan handel WDFFILEOBJECT, alih-alih handel SPBTARGET , untuk menunjuk perangkat target.

Objek SPBTARGET mirip dengan objek WDFFILEOBJECT. Namun, objek SPBTARGET berisi informasi tambahan khusus SPB. Misalnya, selama pemrosesan permintaan kontrol I/O IOCTL_SPB_EXECUTE_SEQUENCE , objek SPBTARGET untuk perangkat target melacak status transfer dalam urutan transfer I/O.

Untuk mendapatkan handel WDFFILEOBJECT ke target, driver pengontrol SPB memanggil metode SpbTargetGetFileObject . Metode ini menerima, sebagai parameter input, handel SPBTARGET ke perangkat target terbuka, dan mengembalikan handel WDFFILEOBJECT yang sesuai ke target ini.

Sesuai dengan konvensi KMDF, driver pengontrol SPB dapat melampirkan konteksnya sendiri ke objek SPBTARGET untuk perangkat target, dan konteks ini dapat mencakup fungsi panggilan balik EvtCleanupCallback dan EvtDestroyCallback terkait. Driver pengontrol SPB menggunakan konteks ini untuk melacak informasi yang khusus untuk driver pengontrol dan ke perangkat target. Selain itu, driver ini dapat membuat objek anak dari objek SPBTARGET , seperti timer, DPC, atau, jika diperlukan, permintaan I/O dan antrean I/O.