Сегодня 02 декабря 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
Тренды 🔥
Календарь релизов 1 – 7 декабря: Metroid Prime 4, Marvel Cosmic Invasion и «Зайчик» 9 ч.
«Так не хочется, чтобы эта игра заканчивалась»: первый тизер последнего дополнения к Atomic Heart заинтриговал и растрогал фанатов 9 ч.
Microsoft признала, что ИИ-агенты небезопасны, но всё равно заполонит ими Windows 11» 10 ч.
Грандиозное возвращение мастера скрытности Стикса откладывается на 2026 год — дата выхода и новый трейлер Styx: Blades of Greed 10 ч.
В первый день зимы биткоин упал ниже $85 000 — пример оказался заразительным 11 ч.
Создатели «Земского собора» по многочисленным просьбам доработали боевую систему и улучшили оптимизацию — подробности крупного обновления 1.1.0 12 ч.
Состоялся релиз Astra Automation 2.0 — новой версии корпоративной платформы автоматизации IT-операций 14 ч.
В России резко вырос спрос на специалистов по общению с нейросетями 15 ч.
«Пожирает всё твоё время на протяжении многих лет»: сооснователь Rockstar спустя пять лет объяснил причину ухода из студии 16 ч.
Возвращение блудного разработчика: бывший режиссёр ремейка Splinter Cell спустя три года вновь возглавил проект, но этого никто не заметил 17 ч.
Власти Индии потребовали от поставщиков смартфонов устанавливать неудаляемое приложение для кибербезопасности 26 мин.
Новая статья: Обзор смартфона IQOO 15: время, вперед 4 ч.
Новая статья: Обзор и тест процессорного кулера PCCooler R400: малыш и его «карлссон» 6 ч.
AMD и Intel символически нарастили долю на рынке видеокарт — Nvidia всё равно держит подавляющие 92 % 6 ч.
TeamGroup предупредила: дефицит DRAM и NAND только начинается — цены будут расти весь 2026 год 6 ч.
В России автомобили Porsche стали массово глохнуть и выдавать ошибки — умельцы уже нашли решение 7 ч.
Настольная ностальгия: Sega выпустила аркадные мини-автоматы с Sonic The Hedgehog 7 ч.
Первый iPhone SE официально признан устаревшим, вместе с рядом других устройств Apple 8 ч.
Техпроцесс TSMC A16 оказался никому не нужен кроме Nvidia — Apple сразу перескочит на 1,4 нм 8 ч.
Дефицит DRAM ударил по Raspberry Pi 5 — одноплатники подорожали, но появилась бюджетная версия с 1 Гбайт 9 ч.