|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 28, 2003 13:37:05 Есть например функция HalDisableSystemInterrupt, а какие параметры ей передавать ? на MSDN про эту функцию ничего не нашел. Где взять описание этих HAL функций (язык по барабану :) |
|
|
Дата: Окт 28, 2003 15:35:51 [ s_work: ...на MSDN про эту функцию ничего не нашел. ] Подобные функции логичнее смотреть в DDK, но конкретно этой нет. [ s_work: Где взять описание этих HAL функций... ] Если в DDK нет, искать в сети. Если в сети нет то смотреть в дизасм. ntoskrnl.exe вызывает её так: :0042CF47 push [ebp+var_4] :0042CF4A push [esi+KINTERRUPT.Vector] :0042CF4D call ds:__imp__HalDisableSystemInterrupt@8 . . . :0042CF56 _KeDisconnectInterrupt@4 endp Насколько я успел понять, esi указывает на структуру KINTERRUPT. Определение вытянуто из дебужных символов. struct _KINTERRUPT {
/*<thisrel this+0x0>*/ /*|0x2|*/ short Type;
/*<thisrel this+0x2>*/ /*|0x2|*/ short Size;
/*<thisrel this+0x4>*/ /*|0x8|*/ struct _LIST_ENTRY InterruptListEntry;
/*<thisrel this+0xc>*/ /*|0x4|*/ unsigned char (ServiceRoutine*)(struct _KINTERRUPT*, void*);
/*<thisrel this+0x10>*/ /*|0x4|*/ void* ServiceContext;
/*<thisrel this+0x14>*/ /*|0x4|*/ unsigned long SpinLock;
/*<thisrel this+0x18>*/ /*|0x4|*/ unsigned long Spare1;
/*<thisrel this+0x1c>*/ /*|0x4|*/ unsigned long* ActualLock;
/*<thisrel this+0x20>*/ /*|0x4|*/ void (DispatchAddress*)();
/*<thisrel this+0x24>*/ /*|0x4|*/ unsigned long Vector;
/*<thisrel this+0x28>*/ /*|0x1|*/ unsigned char Irql;
/*<thisrel this+0x29>*/ /*|0x1|*/ unsigned char SynchronizeIrql;
/*<thisrel this+0x2a>*/ /*|0x1|*/ unsigned char FloatingSave;
/*<thisrel this+0x2b>*/ /*|0x1|*/ unsigned char Connected;
/*<thisrel this+0x2c>*/ /*|0x1|*/ char Number;
/*<thisrel this+0x2d>*/ /*|0x1|*/ unsigned char ShareVector;
/*<thisrel this+0x30>*/ /*|0x4|*/ int Mode;
/*<thisrel this+0x34>*/ /*|0x4|*/ unsigned long Spare2;
/*<thisrel this+0x38>*/ /*|0x4|*/ unsigned long Spare3;
/*<thisrel this+0x3c>*/ /*|0x1a8|*/ unsigned long DispatchCode[106];
};
// <size 0x1e4>
Так что первыйпараметр это номер вектора прерывания, а второй не используется в HalDisableSystemInterrupt, по крайней мере под 2000. Сама _HalDisableSystemInterrupt@8 очень простая. Ищи в сети описание портов контороллера прерываний. 0FFDFF030h, которое ты найдешь в теле HalDisableSystemInterrupt это KPCR.IDR. Сама структура KPCR описана в ддк. Это все, что могу на данный момент. ЗЫ: Интересно, а зачем может потребоваться вызвать функцию, про которую ничего не известно? :-) |
|
|
Дата: Окт 28, 2003 16:06:57 Ха... так и думал, что Four-F ответит, спасибо за подсказку. Не мелкая структура :) Поищем в DDK... >ЗЫ: Интересно, а зачем может потребоваться вызвать >функцию, про которую ничего не известно? :-) Интересно копать, да и так есть одна мысль сниффер написасть без WinPCAP, читать прямо из порта, поэтому и нужны функции HAL. Если у Вас есть опыт в подобных делах, то поделитесь ответом, на правильный путь я встал или как ? |
|
|
Дата: Окт 28, 2003 17:12:53 [ s_work: Не мелкая структура :) Поищем в DDK... ] Там её нет. Я вытащил её из ntoskrnlsym.pdb с помощью pdbdump - есть такой хороший тул. Лежит тут http://pdbdump.sourceforge.net/ [ s_work: ...поделитесь ответом, на правильный путь я встал или как ? ] Трудно сказать, т.к. не понятно сниффер чего требуется написать и что такое WinPCAP. Но в общем случае лучше искать пути сделать что-то на более высоком уровне, т.к. все недра недокументированы, а на раскопки может уйти огромное количество времени + аппаратные отличия, которые HAL как раз и призван устранять. Самым высоким уровнем, с которого начинается документирование, здесь являются IoConnectInterrupt/IoDisconnectInterrupt - описаны в ддк. Глубже (уже недокументированы) KeConnectInterrupt/KeDisconnectInterrupt, еще глубже HalEnableSystemInterrupt/HalDisableSystemInterrupt, еще глубже порты. |
|
|
Дата: Окт 28, 2003 17:55:22 [не понятно сниффер чего требуется написать и что такое WinPCAP. ] Собираюсь написать сниффер для снятия информации с сетевой карты, а WinPCAP - бесплатная библиотека как раз для таких целей с исходниками, но это не интересно. Теория моя такова: перехватить прерывание от сетевой карты и читать прямиком из её порта. Если не ошибаюсь Вы, батенька сами в статье писали, что можно обращаться из режима ядра к железкам на прямую или через HAL. Теория бредовая, но проверить стоит :) |
|
|
Дата: Окт 28, 2003 19:18:39 Насчет прямого обращения или через HAL к железкам из режима ядра все верно, но вопрос надо ли это тут. Спускаться до портов имеет смысл, если по другому никак. У каждого девайса есть дровина, которая с ним работает. Дровина, в свою очередь, должна взаимодействовать с системой. Причем документированными способами. Не проще ли посмотреть как она это делает. По-моему ты просто хочешь написАть обыкновенный драйвер-фильтр. См. в ддк раздел "Filter Drivers" и в исходниках должен быть пример. В конце концов, можно разобрать библиотеку эту WinPCAP. Да и в сети куча инфы должна быть. Я бы пошёл этим путем. Ну а покопаться во внутренностях всегда интересно, вот только времени на это немеряно надо. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.054 |