У меня есть готовый драйвер перехватывающий NtReadFile, то есть NT драйвер. а мне надо написать NDIS промежуточный драйвер. Подскажите могу ли я писать его в том же проекте с теми же настройками что и в предыдущем? Просто я не умею настраивать правильно проект, а там уже настроен. Кто знает подскажите. Заранее спасибо
promtpol Какой проект??? Ты о чем? Берешь notepad, открываешь, сверху пишешь #include <ntddk.h> #include <ndis.h> и будет тебе счастье...
Если это Ваш первый интремедиэйт драйвер то писать его с нуля будет довольно сложно, значительно удобней курить WDK\src\network\ndis\passthru исходник. Тем более что теория в виде Сорокиной и ДДК имеется.
Я хочу писать драйвер в студии подключив ддк. Неужели бы считаете что это тупо? Если нет,то как мне passthru проект засунуть?Подскажите
promtpol Кто тебе сказал что это тупо? Здесь, вообще, имелось ввиду не где писать, а какой типа NDIS драйвера выбрать для начала. Писать можно где хочешь, хоть в паинте . Главное, чтоб была возможность это написанное собрать с наименьшими телодвижениями. Тем самым, происходит оптимизация времени разработки. А по сути - используют либо утилиту build из DDK, чтоб собрать SOURCES и MAKEFILE, либо вручную создают проэкт в визуалстудии (по вопросу "как?", используйте поиск по форуму). ЗЫ: а не рано ли вам за NDIS браться?
TermoSINteZ вспомнилось: если долго размышлять на тему рано, то станет поздно) 2FED даже если у тебя ничего не выйдет - это будет тренировка..... не стоит просто так сдаваться)
вообще надо в рамках курсовой дров написать который будет трафик vpn клиента писать в какой-нибудь лог, типа того ну или по максимуму инфу собрать... поэтому рано не рано,хз, а делать надо и я чувствую я погрязну в этом! Сорокина правда одна теория. Вот смотрю passthru: например регистрируем точки входа для протокола. Есть готовая точка ProtocolBindAdapter, все делает сама, так зачем тогда в passthru делают свою с тем же самым прототипом и засовывают в PROTOCOL_CHARACTERISTICS??? не пойму чтото
promtpol Вот тут то ты сильно ошибся, PROTOCOL_CHARACTERISTICS заполняется функциями, которые будет использовать этот протокол. Если на асме, то это примерно так: Code (Text): ;... mov PChars.BindAdapterHandler, offset PtBindAdapter ;... То есть, заполняются смещения на твои функции. И они уже вызываются системой! Иначе как система узнает, что ей вызвать, когда пришел момент связывания с адаптером. В этой функции, как раз и идет вызов системной NDIS функции NdisOpenAdapter. И вызывается не только она, но и другие типа NdisOpenProtocolConfiguration и тп. То есть для работы конечной функции надо подготовить кучу всего. Так же заполняются и CompletionRoutine функции. Они выступают в роли колбеков: Code (Text): ;... mov PChars.OpenAdapterCompleteHandler, offset PtOpenAdapterComplete ;... В общем внимательно читай ддк. Без него никуда. Сорокина - бред, ничего хорошего.
TermoSINteZ однозначно! promtpol Ничего, кроме практики и DDK в изучении NDIS тебе не поможет. Кстати, внимательно читай коменты к коду примеров DDK, там много полезного
да уж, еще надо понять что надо писать в эти функции, перед тем как отправить их в CHARACTERISTICS. лан, будем разбираться) спасибо
promtpol Вначале заполняешь CHARACTERISTICS в DriverEntry, и поставь заглушки на все функции. Типа таких: Code (Text): PtBindAdapter proc pStatus:PNDIS_STATUS,BindContext: NDIS_HANDLE, pDeviceName:PNDIS_STRING, SystemSpecific1:PVOID, SystemSpecific2:PVOID LOCAL pOpenContext:PNDIS_OPEN_CONTEXT LOCAL status:NDIS_STATUS LOCAL cfg_status:NDIS_STATUS LOCAL cfg_handle:NDIS_HANDLE invoke DbgPrint,$CTA0("-------NdisBindAdapter------\n") push NDIS_STATUS_SUCCESS pop status mov eax, status mov eax,pStatus push NDIS_STATUS_SUCCESS pop [eax] ret PtBindAdapter endp Это даст просмотр как все работает в отладочном окне.