TermoSINteZ Так.. Значит мне,перечисляя потоки следует проверить первым делом состяние UserApcPending.Если оно false-игнорируем. И все? А вот уже дополнили.. Т.е проверять надо только состояние Alertable? А если ,чисто теоретически,оно у всех потоков не установлено-тогда облом вообще?
coocky Из юзермода ты его не проверишь Ты сможешь тока проверить Alerted\Alertable . Да и я уверен, что ты не найдешь таких потоков в обычных запущенных приложениях . Разве что в explorer.exe, может, есть 1 такой поток в этом состоянии. Но, ИМХО, если нет то это тупиковый путь для внедрения в систему из юзермода. JamesB Код (Text): PETHREAD Thread; Thread->Tcb.Alertable = TRUE; Thread->Tcb.ApcState.KernelApcPending = TRUE; Лишнее.
) Приехали.. Я вообще хочу внедрятся почти во все..,во что можно.А explorer только-меня не устраивает Ладно, давайте посмотрим.. Т.е. мне нужен поток,у которого состояние Alertable=TRUE ? Ok Я посмотрел функцию NtQuerySystemInformation- класс SystemProcessesAndThreadInformation, нашел там поле THREAD_STATE,это то,что мне нужно проверять? Я прошу прощение за назойливость,но для меня в первые использовать эту функцию,для проверки флага Alertable (кстати,там нет такого)
coocky Это не то. Это состояние исполнения потока. То есть в каком режиме он находится. The execution state of the thread. Permitted values are drawn from the enumeration Код (Text): THREAD_STATE. typedef enum { StateInitialized, StateReady, StateRunning, StateStandby, StateTerminated, StateWait, StateTransition, StateUnknown } THREAD_STATE; Для проверки надо заюзать ZwTestAlert
coocky Да пардон , я и забыл. Значит никак не узнаешь из юзера (если тока косвенно послав апц и увидев что ниче не выполнилось :-D) Попробуй поюзать ZwAlertThread. Тока если поток без UserApcPending то ничего не произойдет. Объяснения смотри выше Сам ты поток из юзера в алертейбл не переведешь , мсдн пишет : Код (Text): A thread enters an alertable state by using SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx, or MsgWaitForMultipleObjectsEx to perform an alertable wait operation. Но это если поток создаешь ты и вызываешь в его процедуре соответствующие функции.