![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: нет Всего: 3 |
Где взять компилятор для драйвера написанного на СИ
-------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Масяня |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Windows DDK
|
|||
|
||||
srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Т.е. тебе компилятор с чистого Си нужен? Смотри LCC-WIN32
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
Масяня |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
если у файла расширение .c, то он компиляется как CИ, а если .cpp, то как C++
|
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: нет Всего: 3 |
Да нет ВЫ не поняли вот есть код для него мне нужно все то (компилятор можеь ещё чего - незнаю), чтобы он стал драйвером с расширением sys Сам код: #include <ntddk.h> /* Убедимся что наша структура запакована корректно, на границе байта, а не на * границе двойного слова как по умолчанию. */ #pragma pack(push,1) /* Структуры для манипулирования регистром GDT и дескриптором сегмента в GDT. * Документированы в книгах по процессорам Intel. */ typedef struct { unsigned short limit; GDTENT *base; } GDTREG; typedef struct { unsigned limit : 16; unsigned baselo : 16; unsigned basemid : 8; unsigned type : 4; unsigned system : 1; unsigned dpl : 2; unsigned present : 1; unsigned limithi : 4; unsigned available : 1; unsigned zero : 1; unsigned size : 1; unsigned granularity : 1; unsigned basehi : 8; } GDTENT; #pragma pack(pop) /* Это самый низкий уровень для установки поля предела дескриптора сегмента TSS * Получаем селектор от инструкции STR, находим в GDT дескриптор и * подставляем новый предел. Чтобы новый предел применился, мы должны * снова загрузить селектор в регистр задачи (TR) */ void SetTSSLimit(int size) { GDTREG gdtreg; GDTENT *g; short TaskSeg; _asm cli; // Нас не должны прерывать! _asm sgdt gdtreg; // получаем адрес GDT _asm str TaskSeg; // получаем селектор TSS g = gdtreg.base + (TaskSeg >> 3); // получаем указатель на дескриптор TSS g->limit = size; // изменяем предел сегмента TSS // // НУЖНО установить тип селектора в 9, чтобы указать что задача // НЕ ЗАНЯТА. Иначе команда LTR вызовет ошибку. // g->type = 9; // помечаем TSS как “не занятый” // Мы должны произвести загрузку регистра задачи, иначе процессор // не увидит новый предел TSS. _asm ltr TaskSeg; // перезагрузка регистра задачи(TR) _asm sti; // Разрешаем прерывания } /* эта функция предоставляет полный доступ к в/в для всей системы. Это делается * изменением предела сегмента TSS через прямую модификацию дескриптора TSS * в GDT. Этот дескриптор устанавливается единожды во время инициализации * системы. Если мы его однажды изменили, он остаётся нетронутым для всех * процессов. */ void GiveTotalIO(void) { SetTSSLimit(0x20ab + 0xf00); } /* Это возвращает сегмент TSS к его нормальному размеру 0x20AB, * что меньше на 2 стандартного базового адреса карты в/в – 0x20AD. */ void RemoveTotalIO(void) { SetTSSLimit(0x20ab); } /****** Освобождаем память и всё такое *******/ VOID TotalIOdrvUnload( IN PDRIVER_OBJECT DriverObject ) { RemoveTotalIO(); } /****** Процедура входа. Всё стартуется *****/ NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { DriverObject->DriverUnload = TotalIOdrvUnload; GiveTotalIO(); return STATUS_SUCCESS; } Заранее спасибо! -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Масяня |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Засунь свой код в теги, а то в облом помогать!!!
У тебя DriverEntry ничего-то и не делает ![]() Вот так к примеру должно быть:
вместо ??? подставь имена своих функций. Вот вроде и все! ![]() Это сообщение отредактировал(а) Масяня - 3.4.2004, 12:31 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |