Сегодня 06 сентября 2026
18+
MWC 2018 2018 Computex IFA 2018
реклама
Программное обеспечение

Недокументированные особенности Win9x/WinNT/Win2000

Автор: Ашот Оганесян

Некоторое время тому назад, я писал очередное расширение для моего Remote Task Manager и когда встала проблема определить состояние того или иного приложения, как это делает стандартный виндузовый менеджер задач, я крепко призадумался.

С одной стороны что может быть проще - использовать обычную функцию SendMessageTimeout для отправки окну приложения какого-то контрольного сообщения и если ф-ция выходит по таймауту, то считать, что приложение "висит". Однако хитрый и коварный системный программист, писавший Windows думал иначе (и конечно он был прав!) то, что окно (оконная ф-ция) не реагирует на внешние сообщения не может однозначно определять состояние "зависа", поэтому я решил запустить свой любимый дизассемблер и узнать очередную порцию правды о Windows.

Как всегда, все оказалось очень просто - библиотека User32.dll содержит специальную ф-цию для определения состояния приложения. Единственная трудность только в том, что эта ф-ция имеет разные названия и разный синтаксис в Windows NT/2000 и в Windows 9x. В NT ф-ция называется IsHungAppWindow, а в 9x - IsHungThread, попробую немного прояснить ситуацию с их использованием:

BOOL IsHungAppWindow (
HWND hWnd, // описатель главного окна приложения
);

BOOL IsHungThread (
DWORD dwThreadId, // идентификатор потока, которому принадлежит главное окно приложения
);

Так как эти ф-ции являются недокументированными, то Микрософт не включило их экспортные символы в User32.lib, но это не должно стать нам преградой - используем динамическую загрузку:

typedef BOOL (WINAPI *PROCISHUNGAPPWINDOW) (HWND);
typedef BOOL (WINAPI *PROCISHUNGTHREAD) (DWORD);

PROCISHUNGAPPWINDOW IsHungAppWindow;
PROCISHUNGTHREAD IsHungThread;

HMODULE hUser32 = GetModuleHandle("user32");

IsHungAppWindow = (PROCISHUNGAPPWINDOW)
GetProcAddress(hUser32,"IsHungAppWindow");

IsHungThread = (PROCISHUNGTHREAD)
GetProcAddress(hUser32,"IsHungThread");

Ну что же, теперь мы все можем и все умеем, осталось только написать маленький работающий пример: ishung.zip (15Kb)

Оригинал этой статьи на английском языке лежит здесь: Trick 1

Не документированные ф-ции Windows NT и Windows 95/98 и описания на английском языке: www.codepile.com

Было интересно? Скажите об этом Google, чтобы чаще получать ссылки на наши новости про другое
 
 
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.

window-new
Soft
Hard
Тренды 🔥
Microsoft изменила структуру отчётности и теперь будет сообщать данные об облаке Azure, на которое приходится уже треть выручки 2 ч.
ИИ-агенты потребляют в пять раз больше токенов, чем люди, и это даёт преимущество дешёвым китайским моделям 11 ч.
Новая статья: WheelMates — без ветерка. Рецензия 20 ч.
Боевик Samson от создателя Just Cause выйдет на консолях до конца сентября после провального релиза на ПК 22 ч.
Амбициозная вампирская ролевая игра The Blood of Dawnwalker от ветеранов CD Projekt Red уже стала хитом продаж — миллион копий за два дня 24 ч.
Windows 11 будет сообщать приложениям возраст пользователя 05-09 13:38
В поглощении Hugging Face компанией Nvidia оказалось много символизма — возможно, неслучайного 05-09 13:24
Спамеры стали использовать ASCII-подмену символов — раньше так взламывали ИИ 05-09 12:21
В независимом тестировании OpenAI GPT-6 Astra оказалась почти не лучше предшественницы 05-09 12:01
Новая статья: Resonance: A Plague Tale Legacy — корабль, с которого сбежали крысы. Рецензия 05-09 00:07
RTFM-ошибка гиперскейл-уровня: инженер Google Cloud уронил часть облака, разом отключив все оптические кабели 3 мин.
CD переживают второе рождение — продажи компакт-дисков в США взлетели почти на 46 % 5 ч.
У Европы появилась своя частная ракета — Isar Aerospace со второй попытки вывела Spectrum на орбиту 5 ч.
Xiaomi настолько уверена в своей тяговой батарее, что готова менять сгоревший из-за неё автомобиль на новый 12 ч.
Выручка Foxconn на крыльях ИИ-бума в августе выросла на 52 %, и это только начало, как считают в компании 13 ч.
AMD анонсировала рабочую станцию Threadripper Halo Station с Instinct MI350P для ИИ-задач 05-09 16:36
ASUS анонсировала ИИ-серверы на чипах Intel Xeon 6 и AMD EPYC 9006 05-09 16:28
В 2027 году Apple выпустит умную камеру, которая записывает только нужные события 05-09 12:41
Бюджетные Galaxy A помогут Samsung нарастить поставки, пока конкуренты сокращают производство на фоне роста цен на память 05-09 12:17
Google, Oppo и Vivo вслед за Apple добавят два слоя стекла в складные дисплеи смартфонов 05-09 11:06