Тема: Деталі драйверів
DriverEntry proc near public, DriverObject:PDRIVER_OBJECT, RegistryPath:PUNICODE_STRING
    LOCAL        Status:DWORD
    mov Status,STATUS_SUCCESSЦе типовий початок коду якогось драйвера, так би вимовляючісь.
Або щось подібне ж в такої формі
.text:00010280 ; NTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
.text:00010280                 public DriverEntry
.text:00010280 DriverEntry     proc near               ; DATA XREF: HEADER:000100D8o
.text:00010280                                         ; HEADER:000100DCo ...
.text:00010280
.text:00010280 var_4           = dword ptr -4
.text:00010280 DriverObject    = dword ptr  8
.text:00010280 RegistryPath    = dword ptr  0Ch
.text:00010280
.text:00010280                 push    ebp
.text:00010281                 mov     ebp, espАбо навить якость так
DriverEntry proto DriverObject:PDRIVER_OBJECT, RegistryPath:PUNICODE_STRINGdriver object
об'єкт(завантажувальний образ драйвера, використовуваний в привілейованому режимі для визначення потрібних точок входу драйвера) драйвера
Приклади з текстів
"You detained the goods, not the driver," objected the slimy.
- Ви затримали не водія, а вантаж, - заперечив слизовий.
Strugatsky, Arkady, Strugatsky, Boris / The Ugly Swans
Стругацкий, Аркадій, Стругацкий, Борис / Бридкі лебеді
Додати в мій словник
driver object
об'єкт драйвера
Таблиця 8.1. Параметри виклику функції DriverEntry
NTSTATUS DriverEntry IRQL == PASSIVE _ LEVEL
Параметри Опис
IN PDRIVER _ OBJECT pDriverObject Адреса об'єкту драйвера
IN PUNICODE _ STRING pRegistryPath Шлях в регістрі до підрозділу драйвера
Повертане значення - STATUS _ SUCCESS
- STATUS _ XXX - код помилки
Отримавши від Диспетчера введення/виведення покажчик на структуру DRIVER _ OBJECT(див. заголовні файли DDK ntddk.h або wdm.h), драйвер повинен заповнити в ній певні поля, а саме:
Поле pDriverObject ->DriverUnload - для реєстрації власної функції Unload, яка викликається перед вивантаженням драйвера.
Поле pDriverObject ->DriverStartIo - для реєстрації власної функції StartIo, яка потрібна для організації обробки черги необроблених запитів System Queuing.
Поле pDriverObject ->DriverExtension ->AddDevice - в структурі розширення об'єкту драйвера DRIVER _ EXTENSION(см ntddk.h або wdm.h), в якому WDM драйвер реєструє власну процедуру AddDevice.
У масиві pDriverObject ->MajorFunction[IRP _ MJ _ Xxx] драйвер реєструє точки входу у власні робочі процедури.
Реєстрація робочих процедур відбувається зазвичай у виді:
DriverObject ->MajorFunction[IRP _ MJ _ READ]= ReadWrite _ IRPhandler;
DriverObject ->MajorFunction[IRP _ MJ _ WRITE]=ReadWrite _ IRPhandler;
DriverObject ->MajorFunction[IRP _ MJ _ DEVICE _ CONTROL]=
DeviceControlRoutine;
Загалом, це частково зрозуміло, проте хотілося б, що б хтось освітив словами це питання дуже детально.
Де прописані-описані ці структури? Якщо це код драйверу, він адже в першій функції їх звідки - те отримує?
То значить, не в ньому! Як скомпілювати драйвера яким-небуть асемблером, не використовуючи DDK ntddk.h або wdm.h? 
Що, звідки і як драйвер отримує в своеї першої функциї???