В моем 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)?