Я делаю хукер WinAPI, работающий в RING0. Диспетчер хуков вешаю на свободный слот N в IDT и затем в каждый процесс записываю процедуру-перехватчик, а на перехватываемый адрес - инструкцию int N. Диспетчер выясняет, в каком мы процессе и по какому адресу сработал int и подменяет адрес возврата на адрес перехватчика. Столкнулся с такой проблемой. Все работает на _существующих_ процессах. Когда же int срабатывает в _новом_ процессе (DLL шарятся между процессами и int попадает в новые процессы автоматически), диспетчер, понятное дело, не находит установленного перехватчика и размещает его on-the-fly. При этом происходит сбой при выделении виртуальной памяти: ZwAllocateVirtualMemory отрабатывает и возвращает STATUS_SUCCESS, а при попытке записать код по выделенному адресу возникает ошибка страницы. код такой: Код (Text): addr = 0; // разместить вирт. память по любому адресу result = ZwAllocateVirtualMemory( (HANDLE)-1, // свой процесс (void**)&addr, 0, (PSIZE_T)&size, MEM_COMMIT, PAGE_READWRITE); if(result==STATUS_SUCCESS) memcpy((void*)addr, code, size); // memcpy в новых процессах - вылетает page fault Причем когда я вызываю этот код для существующих процессов, все ОК. Сбой происходит только на новых процессах. Подскажите что я делаю не так? Есть ли другой способ решить проблему?