Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > NDIS miniport нид хелп


Автор: Kasiro 29.10.2010, 12:32
Всем доброго времени суток!

Стоит задача: создать драйвер который бы перехватывал http запрос и заменял его своим (например www.google.com  на www.yandex.ru)
После изучения некоторых материалов пришёл к выводу что можно реализовать это с помощью ndis im драйвера, (для изучения и внесения своих коррективов выбрал сэмпл из WDK - Passthru Ndis Intermediate Sample Driver)
Просмотрел исходники, в принципе не сложно, но моих знаний нехватает.
Интересует как получить пакет, изменить в нём запрашиваемую страницу и отправить дальше выполняться.
Любая инфа которая есть по этой теме так же очень желательна
Помогите пожалуйста)

зы: если я правильно всё понял, то код который мне необходим нужно вставлять в функции PtDispatch

Код

NTSTATUS
PtDispatch(
    IN PDEVICE_OBJECT    DeviceObject,
    IN PIRP              Irp
    )
/*++
Routine Description:

    Process IRPs sent to this device.

Arguments:

    DeviceObject - pointer to a device object
    Irp      - pointer to an I/O Request Packet

Return Value:

    NTSTATUS - STATUS_SUCCESS always - change this when adding
    real code to handle ioctls.

--*/
{
    PIO_STACK_LOCATION  irpStack;
    NTSTATUS            status = STATUS_SUCCESS;

    UNREFERENCED_PARAMETER(DeviceObject);
    
    DBGPRINT(("==>Pt Dispatch\n"));
    irpStack = IoGetCurrentIrpStackLocation(Irp);
      

    switch (irpStack->MajorFunction)
    {
        case IRP_MJ_CREATE:
            break;
            
        case IRP_MJ_CLEANUP:
            break;
            
        case IRP_MJ_CLOSE:
            break;        
            
        case IRP_MJ_DEVICE_CONTROL:
            //
            // Add code here to handle ioctl commands sent to passthru. //Кэп очевидность подсказывает что сюда
            //
            break;        
        default:
            break;
    }

    Irp->IoStatus.Status = status;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    DBGPRINT(("<== Pt Dispatch\n"));

    return status;



Автор: Kasiro 30.10.2010, 08:56
Можно просто литературу посоветовать smile 

Автор: Resident 6.11.2010, 06:06
Тоже интересует

Автор: Kasiro 7.11.2010, 23:48
Resident, я вроде начал разобрираться с сабжем
руководствуюсь документацией WDK 
книгой "Программирование драйверов и систем безопасности"
и этой темой - http://forum.shelek.ru/index.php/topic,7748.0.html

а так вопросы будут, пиши в эту тему, может гуру подключатся к обсуждению)

Автор: icecrashldr 8.11.2010, 17:05
Kasiro
Вы не тот семпел выбрали .. 
\src\network\ndis\filter\         - Если NDIS ! 

Может будет лучше узать TDI так как это идет выше по стеку ... Хоть и microsoft говорит что это не будет работать, оно все равно работает ... 

C уровня NDIS вам придется анализировать выше стоящий транспортый уровень ...


А ваш участок кода не закакой транспорт не отвечает ... Это Dispatcher IO на драйвер ... 

Проще говоря нужно читать доки ... 

Автор: Kasiro 9.11.2010, 20:10
icecrashldr, да, вы совершенно правы по поводу того куска кода, это не то что нужно
но в этом же семпле я нашёл функцию где происходит обработка пакета

а вот насчёт TDI, я смогу изменять содержимое хттп пакета на его уровне?

Автор: icecrashldr 12.11.2010, 12:00
Kasiro, В целом можно ... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)