Сегодня 25 ноября 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
Тренды 🔥
Суверенный фонд Саудовской Аравии столкнулся с финансовыми трудностями после покупки доли в Electronic Arts 2 мин.
«Блокнот» в Windows 11 получил поддержку таблиц и больше ИИ-возможностей 2 ч.
Мультиплеерный экшен Spellcasters Chronicles от создателей Heavy Rain и Detroit: Become Human готовится к «бете», но только для избранных 2 ч.
Тиранид-прайм, новая операция и Кровавые Ангелы: для Warhammer 40,000: Space Marine 2 вышло крупное обновление «Утилизация» 4 ч.
Хакеры научились проникать на ПК через поддельный экран «Центра обновления Windows» 4 ч.
Появились первые намёки, во что превратятся Android и ChromeOS после слияния 5 ч.
«Стресс-тест не только серверов, но и наших мозгов с нервами»: режиссёр Escape from Tarkov подвёл итоги недели с релиза и раскрыл, что ждёт игру дальше 6 ч.
Adobe запустила раздачу годовой подписки на Photoshop Web — россияне тоже могут её получить 6 ч.
Ubisoft анонсировала дерзкий и «дико интересный» сериал Far Cry от создателей «Фарго» и «В Филадельфии всегда солнечно» 7 ч.
Конец эпохи Windows 10 спровоцировал миграцию пользователей на Linux 8 ч.
Samsung начала массовое производство 3-Гбайт чипов GDDR7 со скоростью 28 Гбит/с, и готовит более быстрые варианты 3 ч.
Huawei представила гибридный планшет MatePad Edge — 14,2" OLED, ПК-процессор и батарея на 12 900 мА·ч от $845 4 ч.
Финляндия создаст крупнейший в мире тепловой аккумулятор из целой горы песка 5 ч.
Японский конкурент TSMC начнёт строительство 1,4-нм фабрики чипов в 2027 году 5 ч.
Framework перестала продавать модули памяти из-за перекупщиков и предупредила о повышении цен 6 ч.
TSMC подала в суд на бывшего топ-менеджера, который переметнулся в Intel 6 ч.
Акции Nvidia обвалились на 4 % из-за слухов о том, что Meta нацелилась на ИИ-чипы Google 6 ч.
«Алиса, открой шторы»: «Яндекс» показал множество гаджетов для умного дома 6 ч.
Компьютеры в России вот-вот снова подорожают — закупочные цены уже выросли на 5–10 % из-за кризиса памяти 6 ч.
JBOG-массив OpenYard HG402 допускает установку восьми GPU 7 ч.