WFP / Проверять длину пакета в обслуживании (umdf) - PullRequest
0 голосов
/ 14 октября 2018

В моем kmdf (Inspect / wfp) я проверяю длину данных пакета:

if (eventType == INSPECT_EVENT_STREAM)
{
    KLOCK_QUEUE_HANDLE lockHandle;

    PFLOW_CONTEXT flowData = (PFLOW_CONTEXT)flowContext;

    if (flowData != NULL)
    {
        FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket;
        FWPS_STREAM_DATA* streamData;

        ioPacket = (FWPS_STREAM_CALLOUT_IO_PACKET*)layerData;
        NT_ASSERT(ioPacket != NULL);

        streamData = ioPacket->streamData;
        NT_ASSERT(streamData != NULL);

        KeAcquireInStackQueuedSpinLock(&dataLenghtGuard, &lockHandle);

        flowData->DataLength = streamData->dataLength;

        if (streamData->flags & FWPS_STREAM_FLAG_SEND)
        {
            flowData->DataTotalLengthOut += streamData->dataLength;
        }
        else if (streamData->flags & FWPS_STREAM_FLAG_RECEIVE)
        {
            flowData->DataTotalLengthIn += streamData->dataLength;
        }

Когда я DbgPrint, я вижу эти значения (DataTotalLengthOut / DataTotalLengthIn).

В моемservice (umdf) Я хотел бы отобразить DataTotalLengthOut и DataTotalLengthIn, когда сессия закрыта:

if (request->EventType == INSPECT_EVENT_CLOSE) 
    {
        ZeroMemory(msg, MSG_MAX_LENGTH);

        sprintf_s(msg, sizeof(msg),  "IN %u, OUT %u",
            request->DataTotalLengthIn,
            request->DataTotalLengthOut
    }

Но здесь (в работе) значения выше всегда равны 0. Какой правильный способ получить DataTotalLengthOut и DataTotalLengthIn в обслуживании(umdf) при закрытии сессии (request-> EventType == INSPECT_EVENT_CLOSE)?

...