Поделиться через


функция обратного вызова EVT_MBB_DEVICE_SEND_DEVICE_SERVICE_SESSION_DATA (mbbcx.h)

Функция обратного вызова события EvtMbbDeviceSendServiceSessionData драйвера клиента отправляет данные сеанса службы устройства на свое модемное устройство.

Синтаксис

EVT_MBB_DEVICE_SEND_DEVICE_SERVICE_SESSION_DATA EvtMbbDeviceSendDeviceServiceSessionData;

void EvtMbbDeviceSendDeviceServiceSessionData(
  WDFDEVICE Device,
  DSS_SESSION_ID SessionId,
  WDFMEMORY Data
)
{...}

Параметры

Device

Дескриптор объекта устройства платформы, полученного драйвером клиента из предыдущего вызова WdfDeviceCreate.

SessionId

Идентификатор сеанса службы устройства, полученный из предыдущего вызова MbbAdapterGetSessionId.

Data

Объект WDFMEMORY, содержащий данные для передачи на устройство.

Возвращаемое значение

None

Remarks

MBBCx вызывает функцию обратного вызова EvtMbbDeviceSendServiceSessionData драйвера клиента, когда приложение отправляет данные DSS на модемное устройство. После асинхронной отправки данных на устройство драйвер клиента должен вызвать MbbDeviceSendServiceSessionDataComplete , чтобы MBBCx смог освободить память, выделенную для данных.

Пример

В следующем примере показано, как клиент может отправлять данные DSS на свое модемное устройство. Обработка ошибок была оставлена из этого примера для краткости и ясности.

VOID
MyEvtMbbDeviceSendServiceSessionData(
    _In_ WDFDEVICE Device,
    _In_ DSS_SESSION_ID SessionId,
    _In_ WDFMEMORY Data
)
{
    // Get the device context and NETADAPTER context
    PMY_DEVICE_CONTEXT deviceContext = GetMyDeviceContext(Device);

    // Set up a driver-defined DSS packet structure
    PMY_DSS_PACKET packet = NULL;

    // Get the data to send from the WDFMEMORY object
    size_t bufferSize = 0;
    PVOID buffer = WdfMemoryGetBuffer(Data, 
                                      &bufferSize);

    // Populate the DSS packet
    packet = MyAllocateDssPacket(Data,
                                buffer,
                                bufferSize,
                                SessionId);

    // Send the data asynchronously, which returns STATUS_PENDING when successful
    status = MyModemBusWriteData(deviceContext->BusHandle,
                                 packet);

    // Increment count of sent packets
    deviceContext->DSSPacketsSentCount++;

    // Clean up the memory
    MbbDeviceSendServiceSessionDataComplete(Data,
                                            status);
    MyCleanupDssPacket(packet);
}

Требования

Требование Значение
Минимальная версия клиента Windows 10, версия 1809
Целевая платформа Универсальное
Минимальная версия KMDF 1.27
Верхняя часть mbbcx.h
IRQL PASSIVE_LEVEL