Сегодня 20 ноября 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
Тренды 🔥
За несколько часов до официального анонса THQ Nordic проговорилась о дате выхода Reanimal — кооперативного хоррора от авторов Little Nightmares 18 мин.
Спустя всего месяц Battlefield 6 вырвалась в лидеры самых продаваемых игр за 2025 год в США 48 мин.
Windows 1.0 вышла ровно 40 лет назад — ей хватало 256 Кбайт ОЗУ и одной дискеты 2 ч.
Spotify анонсировала функцию SongDNA — она расскажет о сэмплах в треке и каверах на него 2 ч.
«Открыть ворота»: грандиозная кампания «Империи бессмертных» скоро станет доступна владельцам Total War: Warhammer и Total War: Warhammer II 3 ч.
Капитализация криптовалютного рынка рухнула на триллион долларов из-за падения биткоина 3 ч.
Nvidia латает последствия октябрьского апдейта Windows 11 — драйвер GeForce Hotfix 581.94 уберёт просадки FPS 4 ч.
VK похвалилась ростом выручки на 10 % — наибольший рост показали «VK Видео» и «VK Клипы» 4 ч.
ИИ стал чаще ходить на российские сайты — поисковый трафик от нейросетей вырос в девять раз 5 ч.
Амбициозный боевик Peter Jackson's King Kong: The Official Game of the Movie в честь 20-летия получил масштабный фанатский патч 7 ч.
Leica представила камеру Q3 Monochrom исключительно для чёрно-белой съёмки — и она на $1055 дороже цветной версии 34 мин.
Redragon выпустила Impact M908 SE — игровую мышь за $33 с 18 программируемыми кнопками для поклонников MMO 2 ч.
Intel подтвердила, что представит процессоры Core Ultra 300 на выставке CES 2026 в январе 2 ч.
Nokia меняет стратегию развития, сделав ставку на ИИ, ЦОД и 6G 2 ч.
После 10 месяцев работы на конвейере BMW у человекоподобных роботов Figure 02 начали отваливаться руки 2 ч.
Nvidia зарабатывает $4,4 млн на сотрудника — Netflix и Apple тоже в топе 3 ч.
Brookfield, NVIDIA и партнёры направят $100 млрд на развитие ИИ-инфраструктуры и энергетики 4 ч.
Sunday представила похожего на лего-человечка робота Memo — он умеет загружать посудомойку и не только 4 ч.
PCIe 5.0, 14,5 Гбайт/с, до 30,72 Тбайт: Phison представила TLC SSD серий Pascari X201 и D201 5 ч.
UBTech удесятерит выпуск гуманоидных роботов в 2026-м — и хочет снизить их себестоимость до $20 000 5 ч.