EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT コールバック関数 (mbbcx.h)

クライアント ドライバーの EvtMbbDeviceSendMbimFragment イベント callabck 関数は、MBIM コントロール メッセージで指定されたタスクを実行するようにデバイスに指示します。 このコールバック関数は、MBIM 仕様で定義 されている SendEncapsulatedCommand 要求に相当します。

構文

EVT_MBB_DEVICE_SEND_MBIM_FRAGMENT EvtMbbDeviceSendMbimFragment;

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

パラメーター

Device

WdfDeviceCreate の以前の呼び出しから取得したクライアント ドライバーのフレームワーク デバイス オブジェクトへのハンドル。

SendRequest

fragemented MBIM メッセージをデバイスに送信する要求を表すフレームワーク オブジェクトへのハンドル。

戻り値

なし

解説

MBBCx クライアント ドライバーは、MbbDeviceInitialize を呼び出して EvtMbbDeviceSendMbimFragment コールバック関数を登録する必要があります。

MBBCx フレームワークは、MBIM コントロール メッセージの形式でコマンドをクライアント ドライバーに発行する場合に、このコールバック関数を呼び出します。 MBIM 制御メッセージのサイズが、 MBB_DEVICE_MBIM_PARAMETERS 構造のクライアント ドライバーによって設定された最大フラグメント サイズよりも大きい場合、MBBCx フレームワークは MBIM 制御メッセージを複数のフラグメント化されたメッセージに分割し、このコールバック関数を fragemented メッセージごとに 1 回呼び出します。

送信されている実際の MBIM メッセージ フラグメントを取得するには、クライアント ドライバーで MbbRequestGetBuffer を呼び出して、MBIM メッセージ フラグメントが格納されているバッファーを取得する必要があります。 デバイスが制御要求を正常に受け入れた後、またはエラー状態が発生した場合、クライアント ドライバーは、 MbbRequestComplete を非同期または sychronously を呼び出すことによって、MBBCx に対してこれを確認する必要があります。

詳細については、「 MBIM 制御メッセージの処理」を参照してください。

簡潔でわかりやすくするために、この例ではエラー処理コードが取り残されています。

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);
    }
}

要件

要件
サポートされている最小のクライアント Windows 10 Version 1809
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.27
Header mbbcx.h
IRQL <= DISPATCH_LEVEL