2014-01-30 2 views
4

некоторое время назад я решил научиться писать драйверы. К сожалению, я не зашел слишком далеко, потому что для тестирования драйвера для вас очень важно иметь возможность выгружать его без необходимости перезапуска машины. Теперь я вернулся к нему, но я просто не могу пройти мимо этого самостоятельно.Выгрузка драйвера Windows

Теперь я полагаю, просто чтобы сделать этот вопрос более прямо вперед, вы уверены, что хотите увидеть это:

VOID Unload(PDRIVER_Object DriverObject) 
{ 
    DbgPrint("Unload\r\n"); 
} 

и

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) 
{ 
    DbgPrint("Entry\r\n"); 
    pDriverObject->DriverUnload = Unload; 

    return STATUS_SUCCESS; 
} 

В окне DbgView печатает сообщение «Entry», но при выгрузке драйвер не распечатывает «Выгрузить». На самом деле попытка остановить работу службы драйверов имеет статус NOT_STOPPABLE. Затем я должен перезапустить, если хочу другую попытку. Я работаю с Windows 7, и с такими же результатами я попытался сделать это, загрузившись с TESTSIGNING ON и без каких-либо требований. Немного странно, что нагрузка не работает, если я не создаю устройство в функции ввода. Только тогда я смогу найти свой драйвер с winobj в каталоге \ Driver. Я также пробовал это на другой машине с установкой Win7, но оказалось, что локальные настройки не являются проблемой. Если вы признаете такое поведение ядра, я бы очень хотел его услышать, спасибо.

На самом деле, если вы знаете о какой-либо программе, которая может загрузить .sys, а затем может ее выгрузить, оставьте ссылку или имя. Исходные коды не требуются, исполняемый файл должен делать .. или наоборот .. спасибо.

+0

Отладка в виртуальной машине с помощью [VisualDDK] (http://visualddk.sysprogs.org/)? –

+0

Работает ли она без IDE VS? – Pyjong

+0

@gbjbaanb: хорошо, это определенно прогресс, драйвер не остается слишком долго, но, по крайней мере, я могу видеть сообщение Unload, большое спасибо – Pyjong

ответ

0

Ok Проблема была я связана с/драйвера: WDM, потому что я прочитал старую учебник. В наши дни это неправильно, вы можете использовать только IoCreateDevice в DriverEntry в старых драйверах, что означает, что правильный вариант - это просто/драйвер. Извините, я не понимаю поведение диспетчера ввода-вывода, но если у вас такая же проблема, просто избавитесь от этого флага wdm и он выгрузится.

Смежные вопросы