Здравствуйте, Господа! Как можно получить список загруженных драйверов под Win9x? Заранее спасибо за ответы.
можно найти первый ddb и пройтись по цепочке до конца.в какждой такой структуре есть указатель на след.
можно найти первый ddb и пройтись по цепочке до конца.в какждой такой структуре есть указатель на след. Здравствуйте! Что есть ddb? Как его найти? Обязательное условие - пользовательский режим, никаких драйверов ядра.
ты сам представляеш как это можно сделать? помоему на ring3 нет у винды сервисов для получения сабжа. темболее у винды9х нет засчиты памяти. можно сканить с использованием seh'а. ddb - это просто сруктура описывающая загруженный VxD. она есть и у vmm и т.д. формат: _DDB struct _DB_Next dd ?; 00h _DDB_SDK_Version dw ?; 04h _DB_Req_Device_Number dw ?; 06h _DDB_Dev_Major_Version db ?; 08h _DDB_Dev_Minor_Version db ?; 09h _DDB_Flags dw ?; 0Ah _DDB_Name db " "; 0Ch _DB_Init_Order dd ?; 14h _DDB_Control_Proc dd ?; 18h _DDB_V86_API_Proc dd ?; 1Ch _DDB_PM_API_Proc dd ?; 20h _DB_V86_API_CSIP dd ?; 24h _DDB_PM_API_CSIP dd ?; 28h _DDB_Reference_Data dd ?; 2ch _DB_VxD_Service_Table_Ptr dd ?; 30h _DDB_VxD_Service_Table_Size dd ?; 34h _DDB_Win32_Service_Table dd ?; 38h _DDB_Prev db 'Prev'; 3Ch _DDB_Size dd ?; 40 _DDB_Reserved1 db 'Rsv1'; 44h _DDB_Reserved2 db 'Rsv2'; 48h _DDB_Reserved3 db 'Rsv3'; 5Ch ends сигнатура Rsv1 ну да по стуктуре видно. искать с аддреса 0C0001000H до 0C0200000H.вот так я делал под нулем: mov eax, 0C0001000H _0: inc eax cmp eax, 0C0200000h je exit_r0 cmp 4 ptr [eax], 'Rsv1' jne _0 lea eax, 4 ptr [eax - 44h] _1: под ринг 3 поросто добавляеш оброботку ошибок через seh.
чтото типо такого. mov ebx, 0C0001000H _0: call isread or eax, eax jnz _1 cmp ebx, 0C0200000h je _1 cmp 4 ptr [ebx], 'Rsv1' inc ebx jne _0 lea ebx, 4 ptr [ebx - 44h] _1: ret isread: call _seh_init ; install seh mov esp, [esp+8] xor eax, eax inc eax jmp _seh_exit _seh_init: push dword ptr fs:[0] mov fs:[0], esp mov eax, [ebx] xor eax, eax _seh_exit: pop dword ptr fs:[0] pop edx ret