нет, возвращалось 0C00000004h. Я достаточно долго парился с ZwQuerySystemInformation и её параметрами, копал везде, и истину нашёл.
Вот если надо зацени код, работает превосходно: Функция возвращает указатель на массив требуемых структур. Code (Text): NTGetInfoPtr proc uses ecx tp:DWORD local mSize:DWORD, mPtr:DWORD, rtm:DWORD mov mSize, 4000 bgn: invoke VirtualAlloc, 0, mSize, 1000h, 4 mov mPtr, eax push ecx mov ecx, esp invoke ZwQuerySystemInformation, tp, mPtr, mSize, ecx pop ecx mov rtm, eax .If rtm == 0C0000004h invoke VirtualFree, mPtr, 0, 4000h .If ecx mov mSize, ecx .Else mov eax, mSize add mSize, eax .endif .endif cmp rtm, 0C0000004h je bgn mov eax, mPtr ret NTGetInfoPtr endp
гм.. учту вообще-то меня работает, даже если передавать в третьем параметре 0 билд NtDll 5.1.2600.1106 (xpsp1.020828-1920) ntoskrnl 5.1.2600.1634 (xpsp2.050301-1526) кстати, тольо сейчас заметил, что они разные ) разве такое возможно?
В принципе да, т.к. sp2 - набор заплаток, возможно, что как раз ntdll и не обновился. Сейчас у себя посмотрю... ntdll: 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158) ntoskrnl: 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158) Надо же! Одинаковые. У тебя, наверное, не sp2, а просто заплатки установлены?
вообще-то я думал, что все ntdll подстроены под соответствующие ядра, поэтому даже если и работают из разных версий, то патчатся все равно вместе похоже, что не так.. слушай, а кинь мне свою ntdll.. попробую прикрутить ))
кста, вопрос, как теперь заставить процесс использовать именно эту длл, не заменяя ее в system32 и не перезагружаясь?
ошибочка, оказывается, нужно <имя exe>.exe.local теперь пишет "The application failed to initialize properly (0xc0000005). Click on OK to terminate the application." (кто пишет, кстати, непонятно). Причем так даже с родной ntdll.dll. С kernel'ом это прокатывает, причем в памяти обнаруживаются два мапа файла - один по нормальному адресу, второй по 0x430000, хз как это, может, второй отмапирован как данные, а не как исполняемый файл.. только зачем это?
Хех, получается неисполняемый исполняемый файл. Не знаю чем тебе ещё помочь, я б не парился, а сразу вкинул бы ntdll в system32.
Значит не подошла ntdll к ядру. Надо и ядро из комплекта. И по ходу не только ядро... Может проще SP2 поставить?