Сегодня 15 апреля 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

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

window-new
Soft
Hard
Тренды 🔥
«Группа Астра» представила неизменяемый режим Astra Linux Server для контейнерных сред 7 ч.
Звезда Marvel’s Spider-Man 2 взбудоражил фанатов тизером Marvel’s Spider-Man 3 8 ч.
Трилогия классических ролевых игр Gothic выйдет на консолях Xbox и PlayStation до конца ноября 8 ч.
Apple давит на блогера из-за утечки iOS 26 — требует раскрыть источники 9 ч.
Подразделение Microsoft в России признано банкротом 9 ч.
Приложение Google для настольных компьютеров теперь доступно пользователям Windows по всему миру 9 ч.
За месяц до погружения в пучины раннего доступа Subnautica 2 осталась без издателя 9 ч.
Киберпанковый боевик Replaced добрался до релиза и заслужил одобрение критиков — игра приятно удивила ценой в российском Steam 11 ч.
Starfield вышла на PS5 в неиграбельном виде, но Bethesda пообещала всё исправить 11 ч.
Microsoft объяснила, почему незаметно отказалась от возможности активации Windows 11 по телефону 11 ч.
За три года расходы Nvidia на гарантийное обслуживание взлетели в 11 раз 10 мин.
Новая статья: Обзор игрового OLED 4K-монитора MSI MAG 322UP QD-OLED E16: достаточный уровень 5 ч.
Sophia Space обкатает софт на ИИ-спутниках Kepler перед запуском собственных космических ЦОД 6 ч.
Sony представила игровой OLED-монитор Inzone M10S II с частотой до 720 Гц и ценой $1100 7 ч.
Sony выпустила полноразмерную игровую открытую гарнитуру Inzone H6 Air с пространственным звуком за $200 7 ч.
Rolls-Royce разработает малые модульные ядерные реакторы для Великобритании 9 ч.
«Медведково-2», флагманский объект РТК-ЦОД, вошёл в реестр дата-центров Минцифры России 10 ч.
Представлена серия экшн-камер GoPro Mission 1 с поддержкой съёмной оптики Micro Four Thirds 11 ч.
Энтузиаст запустил ИИ-модель на древнем мини-ЭВМ PDP-11 с процессором на 6 МГц и 64 Кбайт ОЗУ 11 ч.
Amazon поглотила спутникового оператора Globalstar за $11,57 млрд и договорилась о сотрудничестве с Apple 12 ч.