Процедура DriverEntry не выполняется

Тема в разделе "WASM.BEGINNERS", создана пользователем Omigo, 2 май 2006.

  1. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    Почему не выполняется процедура DriverEntry моего драйвера имеющая следующий вид :



    DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING

    mov eax, STATUS_DEVICE_CONFIGURATION_ERROR

    call AllocConsole

    push offset vvod

    call SetConsoleTitleA

    push 2000d

    call Sleep

    push 0

    call ExitProcess

    DriverEntry endp

    end DriverEntry



    Вызывающая ее программа имеет следующий вид :

    .386

    .model flat, stdcall

    option casemap:none



    include I:\Alex\Driver\KmdKit\include\windows.inc

    include I:\Alex\Driver\KmdKit\include\kernel32.inc

    include I:\Alex\Driver\KmdKit\include\user32.inc

    include I:\Alex\Driver\KmdKIt\include\advapi32.inc

    includelib I:\Alex\Driver\KmdKit\lib\kernel32.lib

    includelib I:\Alex\Driver\KmdKit\lib\user32.lib

    includelib I:\Alex\Driver\KmdKit\lib\advapi32.lib

    include I:\Alex\Driver\KmdKit\Macros\Strings.mac

    .data

    sl dd 0

    .code

    start proc

    local hSCManager:HANDLE

    local hService:HANDLE

    local acDriverPath[MAX_PATH]:CHAR



    invoke OpenSCManager, NULL, NULL, SC_MANAGER_CREATE_SERVICE



    .if eax != NULL

    mov hSCManager,eax

    push eax

    invoke GetFullPathName, $CTA0("alexandr.sys"), sizeof acDriverPath, addr acDriverPath, esp

    pop eax



    invoke CreateService, hSCManager, $CTA0("alexandr"), $CTA0("this is simplest "), \

    SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, \

    SERVICE_ERROR_IGNORE, addr acDriverPath, NULL, NULL, NULL, NULL, NULL

    .if eax != NULL

    mov hService, eax

    invoke StartService, hService, 0, NULL

    .endif

    invoke DeleteService, hService

    invoke CloseServiceHandle, hService



    .else

    invoke GetLastError

    mov sl,eax

    invoke MessageBox, NULL, offset sl, NULL, MB_ICONSTOP

    invoke CloseServiceHandle, hService

    .endif

    invoke CloseServiceHandle, hSCManager

    .else

    invoke MessageBox, NULL, $CTA0("Can't connect to Service Control Manager."), \

    NULL, MB_ICONSTOP

    .endif



    invoke ExitProcess, 0



    start endp



    Драйвер нормально регестрируется но StartService возвращает ноль
     
  2. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    после StartService endif нету то опечатка
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Вызывай GetLastError и смотри, что за ошибка.



    P.S.

    Оформляй код при помощи кнопки "Код" (седьмая по счёту над окном ввода текста сообщения).
     
  4. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    cresta

    В KmdKit написано что StartService вернет ошибку но DriverEntry должна выполнится
     
  5. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    cresta

    Вызывая GetLastError

    сразу после StartService возвращает

    ERROR_PROC_NOT_FOUND

    Что бы это могло означать

    Помогите
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Что за странный код? Ничего не путаешь?

    Может быть ERROR_PATH_NOT_FOUND?

    Проверь ещё раз.

    Если так, то файл не найден, проверь путь, указываемый при создании сервиса и наличие .sys по этому адресу. При такой ошибке естественно, никакая DriverEntry выполнена не будет.

    Непосредственно перед CreateService проверь содержимое acDriverPath
     
  7. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    Проверил перед CreateService путь абсолютно правильный

    сразу после StartService возвращает

    ERROR_INVALID_HANDLE

    CreateService почемуто возвращает ноль а не хендл

    Помоги
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Прицепи сюда зип со своим драйвером, и его исходником, а то мы долго плутать будем.
     
  9. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    Я щото никак не могу понять как тут файл прицепить

    подскажи

    если хочеш напиши на емейл вышли там всего лиш 3кб
     
  10. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    Все понял как!

    в Create.asm вызов и регистрация драйвера

    ALEXANDER.SYS САМ ДРАЙВЕР

    ALEXANDER.BAT ЕГО КОД

    на всякий случай и его екзешник кинул





    [​IMG] 917546168__Driver.zip
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Эй, приятель, ты что творишь ?

    Какие такие AllocConsole, SetConsoleTitleA, Sleep, ExitProcess могут быть в DriverEntry ???

    Это драйвер, а не прога :))))

    Никаких винапи. Никаких kernel32, advapi32, user32



    Всё, что у тебя есть - это ntoskrnl.lib, hal.lib.

    Больше ничего. Никаких других либ.



    Естественно ничего не запустится и не выполнится: тот файл .sys, который ты получил, на самом деле никаким драйвером не является.
     
  12. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Загляни в папку kmdkit\w2k, там есть файлы ntoskrnl.inc, hal.inc.

    Посмотри, какие функции в них есть. Это всё, что ты можешь использовать.

    Никаких окон, никаких консолей, никакой визуальности.
     
  13. Omigo

    Omigo New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    22
    cresta

    Большое спасибо за ответ а то б а еще долго мучался