Reply To: TDI FILTER driver

Home Forums Discussions General TDI FILTER driver Reply To: TDI FILTER driver

#6278
Dmitry_177
Participant

    Собственно сам перехват:

    в *.h файле:

    PFILE_OBJECT pFile_tcp;
    PDEVICE_OBJECT pDev_tcp;
    PDRIVER_OBJECT pDrv_tcpip;
    
    typedef NTSTATUS (*OLDTCPIRPMJDEVICECONTROL)(IN PDEVICE_OBJECT, IN PIRP);
    OLDTCPIRPMJDEVICECONTROL OldTcpIrpMjDeviceControl;

    в *.с файле:

    UNICODE_STRING deviceTCPUnicodeString;
    WCHAR deviceTCPNameBuffer[]  = L"\\Device\\Tcp";
    
    RtlInitUnicodeString (&deviceTCPUnicodeString, deviceTCPNameBuffer);
    ntStatus = IoGetDeviceObjectPointer(&deviceTCPUnicodeString, FILE_READ_DATA, &pFile_tcp, &pDev_tcp);
    if(!NT_SUCCESS(ntStatus))
       return ntStatus;
    pDrv_tcpip = pDev_tcp->DriverObject;
    
    OldTcpIrpMjDeviceControl = pDrv_tcpip->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL];
    
    if (OldTcpIrpMjDeviceControl)
       InterlockedExchange ((PLONG)&pDrv_tcpip->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL], (LONG)HookedTcpDeviceControl);
    
    ...
    
    NTSTATUS HookedTcpDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
    {
        PIO_STACK_LOCATION      irpStack;
        UCHAR         *mdlBuffer;
    
        irpStack = IoGetCurrentIrpStackLocation (Irp);
        switch (irpStack->MajorFunction)
       {
           case IRP_MJ_INTERNAL_DEVICE_CONTROL:
             if (irpStack->MinorFunction == TDI_SEND)
             {
                DbgPrint("tdifilter TDI_SEND");
    
                mdlBuffer = MmGetSystemAddressForMdlSafe (Irp->MdlAddress, LowPagePriority);
    
                DbgPrint (mdlBuffer);
             }
    
             if (irpStack->MinorFunction == TDI_RECEIVE)
             {
                DbgPrint("tdifilter TDI_RECEIVE");
    
                mdlBuffer = MmGetSystemAddressForMdlSafe (Irp->MdlAddress, LowPagePriority);
    
                DbgPrint (mdlBuffer);
             }
    
           break;
          
           default:
           break;
           }
    
        return OldTcpIrpMjDeviceControl(DeviceObject, Irp);
    }

    по идее все должно ловиться и TDI_RECEIVE тоже.. Но почему-то этого не происходит.. Если я захожу на какойнибудь сайт, по идее там должны быть http-пакеты и html страничка.. Но этого почему-то нету..=(