Доброго времени суток, уважаемый All
Пишу что-то типа файрвола под Win9x, нашел пример.
http://www.insafe.kubiks.ru/articles/connect/1/7.htmНо он написан под VtoolsD. Я его перевожу под обычный DDK98. В чем затык: перевод из Hook_Device_Service_C в Hook_Device_Service
Вроде бы все очень просто, но... Чего-то не догоняю.
Напрмер, автор пишет
OldNdisSend = (POS_NDIS_SEND)Hook_Device_Service_C(__NdisSend, NH_NdisSend, &thunkNdisSendHook);
Вопрос №1, зачем тут thunk? Мы что, передаем управление в 16-битный код?
Вопрос №2, про __NdisSend. Как я понимаю, это ординал функции NdisSend, хук которой мы производим. Т. е. получится вот такой аналог
GetVxDServiceOrdinal eax, NdisSend ; без подчеркиваний!
mov esi, OFFSET32 NH_NdisSend
VMMCall Hook_Device_Service
Все бы хорошо, но скомпилировать такой текст мне не дают
__NdisSend undeclared identificator
а тут с подчеркиваниями
Я на Гугле нашел такую замену для GetVxDServiceOrdinal:
#define Ndis_DEVICE_ID 0x28
#define SendSvcNo 45
#define NdisSendOrdinal ((Ndis_DEVICE_ID<<16) + SendSvcNo)
Но откуда узнать младшие слова остальных функций (прием, регистрация протокола и т.п.) для перехвата? В DDK их не вижу, кроме Ndis_DEVICE_ID.
Кто прояснит туман в моей непутевой голове? Драйвер пишу впервые, ногами не бить