Сегодня 30 октября 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
Тренды 🔥
«Жидкое стекло» Apple можно будет заматировать: представлена нова бета iOS 26.1 12 мин.
Сервисы AWS упали второй раз за день — тысячи сайтов по всему миру снова недоступны 8 ч.
Fujitsu влила £280 млн в британское подразделение в преддверии выплат компенсаций жертвам багов в её ПО Horizon 8 ч.
Календарь релизов 20 – 26 октября: Ninja Gaiden 4, Painkiller, Dispatch и VTM – Bloodlines 2 8 ч.
В Windows сломалась аутентификация по смарт-картам после октябрьских обновлений — у Microsoft есть временное решение 9 ч.
Вместо Majesty 3: российские разработчики выпустили в Steam амбициозную фэнтезийную стратегию Lessaria: Fantasy Kingdom Sim 9 ч.
Слухи: Лана Дель Рей исполнит заглавную песню для «Джеймса Бонда», но не в кино, а в игре от создателей Hitman 10 ч.
Зов сердца: разработчики Dead Cells объяснили, почему вместо Dead Cells 2 выпустили Windblown 11 ч.
Adobe запустила фабрику ИИ-моделей, заточенных под конкретный бизнес 11 ч.
Китай обвинил США в кибератаках на Национальный центр службы времени — это угроза сетям связи, финансовым системам и не только 12 ч.
Президент США подписал соглашение с Австралией на поставку критически важных минералов на сумму $8,5 млрд 18 мин.
Новая статья: Обзор смартфона realme 15 Pro: светит, но не греется 5 ч.
Ещё одна альтернатива платформам NVIDIA — IBM объединила усилия с Groq 5 ч.
Учёные создали кибер-глаз, частично возвращающий зрение слепым людям 6 ч.
Samsung выпустила недорогой 27-дюймовый геймерский монитор Odyssey OLED G50SF c QD-OLED, 1440p и 180 Гц 6 ч.
Акции Apple обновили исторический максимум на новостях об отличных продажах iPhone 17 8 ч.
Представлен флагман iQOO 15 с чипом Snapdragon 8 Elite Gen 5 и батареей на 7000 мА·ч по цене меньше $600 9 ч.
Нечто из космоса врезалось в лобовое стекло самолёта Boeing 737 MAX компании United Airlines 10 ч.
Умные кольца Oura научатся выявлять признаки гипертонии, как последние Apple Watch 11 ч.
Дешёвая корейская термопаста оказалась вредна для процессоров и здоровья пользователей 11 ч.