Сегодня 01 декабря 2025
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

 
 
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.

window-new
Soft
Hard
Тренды 🔥
Значок видишь? А он есть: после обновления из Windows «пропала» иконка для входа по паролю 6 ч.
Ранний доступ экшена Into the Fire о выживании на разбушевавшемся вулканическом хребте стартует в 2026 году 7 ч.
ИИ-модель Alibaba Qwen3-VL способна уловить почти все детали двухчасового видео, лишь раз его «просмотрев» 9 ч.
Аудитория условно-бесплатного ролевого экшена Where Winds Meet выросла до 9 млн за две недели после релиза 11 ч.
Психологический хоррор The 9th Charnel о группе пропавших учёных-генетиков получил дату релиза 11 ч.
Google отозвала жалобу на Microsoft по поводу антиконкурентной практики Azure псле запуска расследования в ЕС 14 ч.
Кооперативное приключение Split Fiction получило неофициальную русскую озвучку от Mechanics VoiceOver 17 ч.
Сборник хорроров Layers of Fear: The Final Masterpiece Edition от авторов ремейка Silent Hill 2 выйдет на Nintendo Switch 2 уже 19 декабря 18 ч.
Инвесторы не спешат пугаться ИИ-пузыря — деньги в стартапы льются как прежде 19 ч.
Новая статья: Goodnight Universe — колыбельная для крошки. Рецензия 30-11 00:01
Новая статья: Компьютер месяца — декабрь 2025 года 4 ч.
Для невышедших Intel Xeon Granite Rapids-WS уже представлена материнская плата Adlink ISB-W890 формата CEB 10 ч.
Вьетнам годами не пускал китайское 5G-оборудование Huawei и ZTE, но новые пошлины США, похоже, заставили власти передумать 10 ч.
AMD случайно подтвердила подготовку Ryzen 7 9850X3D — до анонса осталось чуть больше месяца 11 ч.
Ускорители вычислений Baidu имеют все шансы стать хитом китайского рынка 20 ч.
SK hynix запустит тотальное расширение фабрик памяти DRAM, чтобы победить дефицит 20 ч.
Micron инвестирует $9,6 млрд в завод по производству памяти HBM в Японии 30-11 00:31
Первый в мире частный научный спутник успешно выведен в космос — он будет изучать звёзды в ультрафиолете 29-11 18:57
Главы технологических компаний наперебой заговорили о ЦОД в космосе 29-11 17:53
В 2027 году Intel может наладить выпуск процессоров Apple M по техпроцессу 18A-P 29-11 16:59