Пытаюсь разобраться с инжектом с помощью APC, сам код содержащийся по pMappedCode загружает DLL с использованием LdrLoadDll, а в самой Dll простой MessageBox выбрасывает на DLL_ATTACH-е в DllMain функции. Работает, успешно инжектит, окошко MessageBox выкидывается, НО! Грабли какие-то. Почему-то срабатывает это все с задержкой большой, ЕСЛИ процесс висит в фоне, т.е. активен например другой, или хотябы не провести по нему курсором мыши. В случае когда я это заметил, испытания проводил на обычном виндовом калькуляторе, а до того на Internet Explorer-е. Получается, если в процессе выполняются какие-то действия, например в Internet explorer у меня всегда была открыта страница, и он при этом в том числе и сворачивался, в игре сапер проверил это был отсчет времени (самое простое что в голову пришло с одним тредом и игровым таймером которому пофиг активна задача или нет), то срабатывает моментально. Подскажите в чем может быть проблема? Как заставить срабатывать моментально даже в такой фигне как калькулятор в фоновом режиме? Я уже всю голову себе сломал, не могу допереть что это за мистика. Код (Text): KeInitializeApc( pKAPC, (PKTHREAD)TargetThread, OriginalApcEnvironment, (PKKERNEL_ROUTINE)APCKernelRoutine, NULL, (PKNORMAL_ROUTINE) pMappedCode, // Адрес в юзермоде UserMode, (PVOID)arg1 // Context ); KeInsertQueueApc(pKAPC, (PVOID)arg2, // Context 2. (PVOID)arg3, // Context 3. 0 ); // Priority increment LARGE_INTEGER liTimeout = {0}; KeDelayExecutionThread (UserMode, TRUE, &liTimeout); Буду премного благодарен за дельные подсказки и советы. Спасибо. Дополнено в 14:53: Посмотрел Process Hacker-ом, состояние треда в это время Wait:WrUserRequest, попробовал сделать процессу Suspend и потом Resume, на Resume получается срабатыване. Может быть стОит как-то принудительно из драйвера процесс передернуть? По идее да, но все же хочется разобраться в приничне, и найти наиболее правильное решение.
Пока треда не войдёт в alertable состояние апк не будет доставлено. http://www.opening-windows.com/techart_windows_vista_apc_internals.htm