Сегодня 26 ноября 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
Тренды 🔥
Американский регулятор рассекретил планы Sony на версию Death Stranding 2: On the Beach для ПК 20 мин.
Учёные обнаружили, что у ИИ пока имеются проблемы с пониманием каламбуров и юмора 5 ч.
Инженеры проиграли ИИ: модель Claude Opus 4.5 справилась с заданием Anthropic лучше любого из людей 9 ч.
Голосовой режим ChatGPT встроили в чат — он стал естественнее и его можно перебивать 10 ч.
Black Forest Labs представила ИИ-генератор изображений FLUX.2 с оптимизацией для видеокарт GeForce RTX 10 ч.
«Блокнот» в Windows 11 получил поддержку таблиц и больше ИИ-возможностей 12 ч.
Мультиплеерный экшен Spellcasters Chronicles от создателей Heavy Rain и Detroit: Become Human готовится к «бете», но только для избранных 12 ч.
Тиранид-прайм, новая операция и Кровавые Ангелы: для Warhammer 40,000: Space Marine 2 вышло крупное обновление «Утилизация» 14 ч.
Хакеры научились проникать на ПК через поддельный экран «Центра обновления Windows» 14 ч.
Появились первые намёки, во что превратятся Android и ChromeOS после слияния 15 ч.
Google плетёт сети в Индийском океане: подводный интернет-кабель TalayLink свяжет Австралию и Таиланд 15 мин.
Дженсен Хуанг заявил, что чипы Nvidia на поколение опережают всю отрасль, включая ускорители Google 2 ч.
HP Inc не оправдала ожиданий по прогнозу на прибыль и вынуждена объявить о сокращении персонала 3 ч.
Планы Meta использовать ИИ-ускорители Google TPU ударили по акциям NVIDIA 9 ч.
Новая статья: Обзор маршрутизатора Netcraze Ultra (NC-1812): новое имя, новый Wi-Fi 10 ч.
Samsung начала массовое производство 3-Гбайт чипов GDDR7 со скоростью 28 Гбит/с, и готовит более быстрые варианты 13 ч.
Huawei представила гибридный планшет MatePad Edge — 14,2" OLED, ПК-процессор и батарея на 12 900 мА·ч от $845 14 ч.
Финляндия создаст крупнейший в мире тепловой аккумулятор из целой горы песка 15 ч.
Японский конкурент TSMC начнёт строительство 1,4-нм фабрики чипов в 2027 году 15 ч.
Framework перестала продавать модули памяти из-за перекупщиков и предупредила о повышении цен 16 ч.