EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT fungsi panggilan balik (mbbcx.h)

Fungsi panggilan balik peristiwa EvtMbbDeviceSendMbimFragment driver klien menginstruksikan perangkatnya untuk melakukan tugas yang ditentukan oleh pesan kontrol MBIM. Fungsi panggilan balik ini setara dengan permintaan SendEncapsulatedCommand yang ditentukan dalam spesifikasi MBIM.

Sintaks

EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;

void EvtMbbDeviceSendMbimFragment(
  WDFDEVICE Device,
  MBBREQUEST SendRequest
)
{...}

Parameter

Device

Handel ke objek perangkat kerangka kerja yang diperoleh driver klien dari panggilan sebelumnya ke WdfDeviceCreate.

SendRequest

Handel ke objek kerangka kerja yang mewakili permintaan untuk mengirim pesan MBIM terfragmentasi ke perangkat.

Nilai kembali

Tidak ada

Keterangan

Driver klien MBBCx harus mendaftarkan fungsi panggilan balik EvtMbbDeviceSendMbimFragment dengan memanggil MbbDeviceInitialize.

Kerangka kerja MBBCx memanggil fungsi panggilan balik ini ketika ingin mengeluarkan perintah dalam format pesan kontrol MBIM ke driver klien. Jika ukuran pesan kontrol MBIM lebih besar dari ukuran fragmen maksimum yang ditetapkan oleh driver klien dalam struktur MBB_DEVICE_MBIM_PARAMETERS , kerangka kerja MBBCx membagi pesan kontrol MBIM menjadi beberapa pesan terfragmentasi dan memanggil fungsi panggilan balik ini sekali per pesan terfragmentasi.

Untuk mendapatkan fragmen pesan MBIM aktual yang dikirim, driver klien harus memanggil MbbRequestGetBuffer untuk mendapatkan buffer tempat fragmen pesan MBIM disimpan. Setelah perangkatnya berhasil menerima permintaan kontrol, atau kondisi kegagalan apa pun telah terjadi, driver klien harus mengakui ini ke MBBCx dengan memanggil MbbRequestComplete baik secara asinkron atau sinkron.

Untuk informasi selengkapnya, lihat Menangani pesan kontrol MBIM.

Contoh

Kode penanganan kesalahan telah dibiarkan dari contoh ini untuk keringkasan dan kejelasan.

VOID
EvtMbbDeviceSendMbimFragment(
    WDFDEVICE  Device,
    MBBREQUEST SendRequest
)
{
    // The client driver-specified framework object context
    PMY_DEVICE_CONTEXT myContext = GetMyDeviceContext(Device);

    size_t bufferSize = 0;
    PVOID buffer = MbbRequestGetBuffer(SendRequest, &bufferSize);

    // This client driver example uses asynchronous completion
    auto myDeviceSendCompletionRoutine = [](MBBREQUEST SendRequest, NTSTATUS NtStatus)
    {
        //Acknowledge back to MBBCx
        MbbRequestComplete(SendRequest, NtStatus);
    };

    // The client driver-specified function call into its device
    NTSTATUS sendStatus = MyDeviceAsyncSend(

        // The client driver-specific handle
        myContext->MyDeviceHandle,

        // The context for completion
        SendRequest,

        // MBIM message               
        buffer,

        // MBIM message size
        bufferSize,   

        // Can be used for logging purpose, for example              
        MbbRequestGetActivityId(SendRequest), 

        // The client driver-specific completion routine
        myDeviceSendCompletionRoutine);

    if (sendStatus != STATUS_PENDING)
    {
        // Acknowledge back to MBBCx
        myDeviceSendCompletionRoutine(
            SendRequest,
            sendStatus);
    }
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10, version 1809
Target Platform Universal
Versi KMDF minimum 1.27
Header mbbcx.h
IRQL <= DISPATCH_LEVEL