Bagikan melalui


EVT_SERCX2_SELECT_NEXT_TRANSMIT_TRANSACTION_TYPE fungsi panggilan balik (sercx.h)

Fungsi panggilan balik peristiwa EvtSerCx2SelectNextTransmitTransactionType dipanggil oleh versi 2 dari ekstensi kerangka kerja serial (SerCx2) untuk menentukan mekanisme transfer data mana yang akan digunakan untuk operasi tulis berikutnya.

Sintaks

EVT_SERCX2_SELECT_NEXT_TRANSMIT_TRANSACTION_TYPE EvtSercx2SelectNextTransmitTransactionType;

SERCX2_TRANSACTION_TYPE EvtSercx2SelectNextTransmitTransactionType(
  [in]  WDFDEVICE Device,
  [in]  PMDL Mdl,
  [in]  ULONG Offset,
  [in]  ULONG RemainingLength,
  [out] SERCX2CUSTOMTRANSMIT *CustomTransmit,
  [out] PULONG NextTransactionLength
)
{...}

Parameter

[in] Device

Handel WDFDEVICE ke objek perangkat kerangka kerja yang mewakili pengontrol serial. Driver pengontrol serial membuat objek ini dalam fungsi panggilan balik EvtDriverDeviceAdd . Untuk informasi selengkapnya, lihat SerCx2InitializeDevice.

[in] Mdl

Penunjuk ke MDL yang menjelaskan halaman memori yang dibentangkan oleh buffer tulis untuk transaksi pengiriman berikutnya. Daftar sebar/kumpulkan untuk transfer DMA akan menggunakan wilayah memori ini yang ditentukan oleh parameter Offset dan Length .

[in] Offset

Offset awal untuk transfer data berikutnya. Parameter ini adalah offset byte dari awal wilayah buffer yang dijelaskan oleh MDL. Jika MDL menentukan total N byte ruang buffer, kemungkinan nilai Offset berada dalam rentang 0 hingga N–1.

[in] RemainingLength

Jumlah total byte data yang masih harus ditransfer dalam permintaan tulis (IRP_MJ_WRITE) saat ini. Jika MDL menentukan total N byte ruang buffer, kemungkinan nilai Panjang berada dalam rentang 1 hingga N–Offset.

[out] CustomTransmit

Penunjuk ke lokasi tempat fungsi menulis handel SERCX2CUSTOMTRANSMIT ke objek transmisi kustom. Jika fungsi mengembalikan SerCx2TransactionTypeCustom, fungsi harus menyediakan handel objek yang dibuat driver pengontrol serial dalam panggilan sebelumnya ke metode SerCx2CustomTransmitCreate . Jika nilai yang dikembalikan bukan SerCx2TransactionTypeCustom, nilai output ini diabaikan oleh SerCx2.

[out] NextTransactionLength

Pointer ke lokasi di mana fungsi menulis jumlah byte untuk ditransfer dalam transaksi pengiriman berikutnya. Jika nilai yang dikembalikan adalah SerCx2TransactionTypeDefault, nilai output ini diabaikan oleh SerCx2.

Nilai kembali

Fungsi EvtSerCx2SelectNextTransmitTransactionType mengembalikan konstanta enumerasi SERCX2_TRANSACTION_TYPE untuk menunjukkan apakah akan menggunakan jenis transaksi yang dipilih driver (I/O terprogram (PIO), DMA sistem, atau transfer data kustom), atau membiarkan SerCx2 memilih jenis transaksi mana yang akan digunakan untuk transaksi pengiriman berikutnya.

Keterangan

Driver pengontrol serial Anda dapat, sebagai opsi, menerapkan fungsi ini. Jika diimplementasikan, driver mendaftarkan fungsi ini dalam panggilan ke metode SerCx2InitializeDevice yang menyelesaikan inisialisasi objek perangkat kerangka kerja untuk pengontrol serial.

Jika driver pengontrol serial Anda tidak menerapkan fungsi EvtSerCx2SelectNextTransmitTransactionType , maka SerCx2 selalu memutuskan jenis mekanisme transfer data (PIO, DMA sistem, atau kustom) apa yang akan digunakan untuk transaksi pengiriman berikutnya. SerCx2 mendasarkan keputusannya pada informasi konfigurasi I/O yang disediakan oleh driver pengontrol serial. Driver yang mendukung transaksi transmisi DMA sistem memasok struktur SERCX2_SYSTEM_DMA_TRANSMIT_CONFIG yang berisi informasi ini. Driver yang mendukung transaksi pengiriman kustom memasok struktur SERCX2_CUSTOM_TRANSMIT_CONFIG yang berisi informasi ini.

Jika driver pengontrol serial Anda mengimplementasikan fungsi EvtSerCx2SelectNextTransmitTransactionType , SerCx2 memanggil fungsi ini untuk menentukan jenis mekanisme transfer data (PIO, DMA sistem, atau kustom) apa yang akan digunakan untuk transaksi pengiriman berikutnya. Anda mungkin ingin menerapkan fungsi ini jika pengontrol serial memiliki kemampuan perangkat keras khusus yang tidak dapat dijelaskan secara memadai oleh informasi konfigurasi I/O dalam struktur SERCX2_XXX_TRANSMIT_CONFIG .

Catatan Bahkan jika driver pengontrol serial mengimplementasikan fungsi EvtSerCx2SelectNextTransmitTransactionType , SerCx2 menggunakan transaksi transmisi PIO untuk melakukan jenis transfer data tertentu tanpa terlebih dahulu memanggil fungsi ini.
 
Untuk informasi selengkapnya, lihat Gambaran Umum Transaksi I/O SerCx2.

Contoh

Untuk menentukan fungsi panggilan balik EvtSerCx2CustomTransmitSelectNextTransactionType , 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 EvtSerCx2CustomTransmitSelectNextTransactionType yang bernama MyCustomTransmitSelectNextTransactionType, gunakan jenis fungsi EVT_SERCX2_CUSTOM_TRANSMIT_SELECT_NEXT_TRANSACTION_TYPE , seperti yang ditunjukkan dalam contoh kode ini:

EVT_SERCX2_CUSTOM_TRANSMIT_SELECT_NEXT_TRANSACTION_TYPE  MyCustomTransmitTransactionStart;

Kemudian, terapkan fungsi panggilan balik Anda sebagai berikut:

_Use_decl_annotations_
SERCX2_TRANSACTION_TYPE
  EvtSerCx2SelectNextTransmitTransactionType(
    WDFDEVICE  Device,
    PMDL  Mdl,
    ULONG  Offset,
    ULONG  RemainingLength,
    SERCX2CUSTOMTRANSMIT  *CustomTransmit,
    PULONG  NextTransactionLength
    )
  {...}

Jenis fungsi EVT_SERCX2_CUSTOM_TRANSMIT_SELECT_NEXT_TRANSACTION_TYPE didefinisikan dalam file header Sercx.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_SERCX2_CUSTOM_TRANSMIT_SELECT_NEXT_TRANSACTION_TYPE 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 Tersedia dimulai dengan Windows 8.1.
Target Platform Desktop
Header sercx.h
IRQL Dipanggil di IRQL <= DISPATCH_LEVEL.

Lihat juga

EvtDriverDeviceAdd

IRP_MJ_WRITE

MDL

SERCX2CUSTOMTRANSMIT

SERCX2_CUSTOM_TRANSMIT_CONFIG

SERCX2_SYSTEM_DMA_TRANSMIT_CONFIG

SERCX2_TRANSACTION_TYPE

SerCx2CustomTransmitCreate

SerCx2InitializeDevice