ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Недокументированные возможности
Windows 3.0 и 3.1
Cправочник для программиста-практика
ALEF Systems

project
Москва,1993.
- ...dans ce pays-ci, est-ce qu'on est obligй de savoir ce qu'on montre?
- Pas plus que de savoir ce qu'on apprend.
        D.Diderot.
Зыков Никита Кириллович
Недокументированные возможности Windows 3.0 и 3.1. Справочник для программиста-практика. - М: 1993. - 124 с.
УДК 681.3
ISBN 5-86404-017-7
Справочник содержит сведения о тех функциях, структурах и сообщениях операционной оболочки Windows версий 3.0 и 3.1, которые не были описаны в официальной документации и в то же время представляют практический интерес для достаточно опытного прикладного Windows-программиста.
Справочное издание
c Н.К.Зыков, 1993.
Оформление и оригинал-макет c Н.К.Зыков, 1993.
Введение.
За последние годы Windows практически стали стандартом операционной оболочки для IBM-совместимых персональных компьютеров. В России распространение системы идет не так быстро, и тем не менее в последнее время даже у нас Windows становятся все более и более популярными. Серьезные программисты также заинтересовались этой средой и в последнее время у нас для нее появляется все больше и больше хороших программ.
Windows должны были стать альтернативой DOS (точнее, надстройкой, делающей DOS настоящей операционной системой), позволяющей писать программы, взаимодействующие с <внешним миром> средствами, предоставленными самой системой, без необходимости использования ее внутренних (недокументированных) возможностей и без прямого обращения к аппаратуре. Теоретически, такой подход позволяет писать надежные и переносимые программы, не заботясь ни о подробностях выполнения запросов программы к системе, ни даже о типе конкретной машины. На практике, хотя это и дает много преимуществ, программист почти лишается возможности оптимизировать низкоуровневое взаимодействие с внешними устройствами и, будучи практически лишен информации о системных объектах, с которыми он работает, не может организовать по-настоящему эффективное функционирование программы.
Существует и другая проблема: в любой достаточно сложной системе должны оставаться какие-то недокументированные возможности (структуры данных или функции), которые предназначены для реализации документированного взаимодействия с пользователем и программистом. В принципе, эти средства должны использоваться только ядром операционной системы и должны быть непригодны для применения где-либо еще. На практике же, многие из не описанных нигде в документации функций и структур интенсивно используются не только теми модулями ядра системы, которым они не принадлежат, но и прикладными программами фирмы Microsoft и других крупных фирм.
С появлением версии Windows 3.1 положение немного улучшилось. Несколько ранее недокументированных функций (процентов 10-20 от общего их числа) были описаны в документации в рамках стратегии Open Tools. Это в основном касалось средств для создания отладчиков и фрагментов инициализации программ, причем многие очень полезные функции остались недокументированными. Также появилась совместимая с Windows 3.0 библиотека ToolHelp, дающая некоторую информацию о состоянии системных структур, но в то же время не предоставляющая практически никаких возможностей их изменения. Средства ToolHelp достаточно удобны, однако они охватывают лишь небольшую часть внутренних структур системы и к тому же, давая довольно много информации, они не дают никакого представления о реальном виде и функционировании этих структур.
Данный справочник даст вам информацию, необходимую для того, чтобы иметь возможность обойти некоторые из этих проблем. Здесь содержатся сведения об основных недокументированных структурах, переменных и сообщениях, а также функциях, которые могут быть эффективно использованы в прикладных программах. В справочник не включены действительно внутренние функции (пригодные только для использования ядром системы), функции-<затычки>, оставшиеся от старых версий или не реализованные, а также функции, которые имеют прямые документированные аналоги. Материал, представленный в справочнике, не содержит информации о версиях Windows 1.x и 2.x. Здесь также не содержится сведений о возможностях малопригодного для использования реального режима, остававшегося в версии 3.0.
Естественно, основным источником информации для данного справочника явилась книга Эндрью Шалмана (у нас его называют <по-немецки> Шульманом) . В то же время, данная книга никоим образом не является переводом вышеупомянутого произведения. Книга Шалмана - прежде всего исследовательская работа, объясняющая программисту тонкости функционирования системы и все стороны (от юридических до философских) использования ее недокументированных возможностей (поэтому, в частности, мне кажется, что французский вариант названия этой книги -  - <За кулисами Windows> гораздо точнее английского). Данный же справочник является переработкой содержащейся в этой книге (равно как и во многих других) информации, предназначенной в основном для использования в практическом программировании.
У меня не было времени, чтобы проверить в работе все представленные в справочнике функции, и поэтому вам часто придется (вслед за мной) верить информации Шалмана. В то же время, после проверки самых <подозрительных> участков, мне удалось выявить несколько недочетов и даже ошибок в сведениях, содержащихся в . Естественно, соответствующая информация в данном справочнике исправлена. В то же время, эта книга делалась очень быстро и поэтому нет гарантии, что здесь нет недоработок или опечаток.
Пользование справочником.
Справочник предназначен прежде всего для достаточно опытных Windows-программистов, которые хотят использовать в своих программах те богатые возможности SDK этой системы, которые не были описаны в его документации. Все описания структур и функций в этой книге выполнены в стандарте языка C++, но программисты, пишущие на языках C и Pascal, также смогут использовать предоставленные здесь материалы. 
Довольно много пользы из справочника смогут извлечь хакеры (программисты-исследователи), которым недоступна книга  и специализированные сетевые конференции. Хотелось бы только надеяться, что те представители вышеупомянутого вида искусства, к которым попадет данный справочник, уже вышли из детского возраста и не будут использовать ее материалы для разного рода компьютерных хулиганств типа написания вирусов.
Структура справочника достаточно очевидна и практически не нуждается в дополнительных пояснениях. Основная его часть разбита на четыре раздела, в которых в алфавитном порядке описаны соответственно недокументированные структуры, сообщения, экспортируемые переменные и функции Windows. В приложении дается достаточно условная классификация всех этих объектов по <темам>.
Сведения о внутренних структурах приведены здесь в основном для того, чтобы дать вам представление о реальном функционировании системы, существует довольно мало программ, которым необходим прямой доступ к ним. Дескрипторы сегментов локальных хипов1 основных модулей Windows, необходимые для доступа к их локальным структурам, лучше всего получать средствами ToolHelp, но можно также использовать функции UserSeeUserDo() и GdiSeeGdiDo() (в версии 3.1), XCSToDS() (в версии 3.0), либо просто дескриптор экземпляра, возвращаемый функцией LoadLibrary(). Следует отметить, что таблица глобальных атомов (а в Windows 3.1 - также и меню) располагаются в отдельном локальном сегменте данных USER.
Возможность реального использования недокументированных средств Windows основана на том, что модули ядра системы являются на самом деле динамическими библиотеками, содержащими экспортируемые функции и переменные. SDK, DDK и Windows-библиотеки языков программирования содержат только ссылки на соответствующие объекты, уже содержащиеся в системе. При этом так называемые недокументированные функции не описаны только в файлах заголовков. Все библиотеки импорта содержат соответствующие ссылки. Таким образом, для использования любой недокументированной функции или переменной достаточно поместить прототип функции в текст программы, а переменную объявить как extern.
Хотя использование недокументированных функций Windows гораздо менее опасно, чем это пытается представить фирма Microsoft, некоторая осторожность при их использовании все же не помешает. Для структур рекомендуется (если это возможно) проверять сигнатуры, а для функций - соответствие экспортируемого имени порядковому номеру в модуле. Вообще, вместо прямого объявления прототипа соответствующей функции в тексте программы, лучше объявить указатель и получить адрес вызова функции следующей процедурой:
FARPROC RetrieveFunc(LPSTR szModule,WORD nOrdinal,
                     LPSTR szName=NULL){
  HANDLE hModule;
  if(!(hModule=GetModuleHandle(szModule)))
    if((hModule=LoadLibrary(szModule)) варианты структур легко можно создать с помощью того же препроцессора.
В любом случае рекомендуется, если есть такая возможность, использовать вместо недокументированных соответствующие документированные средства, в частности, библиотеку ToolHelp. Однако в определенных ситуациях вам не удастся этого сделать (из-за этого, собственно, и возникает необходимость в этом справочнике).
Основные области использования сведений справочника:
-       Создание асинхронных (независимых от очереди сообщений) процедур и управление асинхронными процессами.
-       Манипуляция представлением ресурсов (иконки, курсоры и т.д.) в памяти.
-       Фоновое наблюдение за изменениями в файловой системе.
-       Реализация серверов Drag&Drop.
-       Использование различных дескрипторов (HINSTANCE, HWND, HDC и тому подобных) для получения полезной информации.
- Программная реализация для Windows 3.0 многих средств SDK версии 3.1, не доступных даже через ToolHelp.
Часть I.
Внутренние структуры Windows.
ATOMTABLE
Описание:
struct ATOMTABLE{
                int nEntries;
                ATOMENTRY near *pAtoms[];
};
Поля:
nEntries        Количество позиций в таблице.
pAtoms  Адрес хэш-таблицы, содержащей ссылки на элементы цепочки структур ATOMENTRY в локальной памяти.
Комментарии:
Структура описывает хэш-таблицу атомов, создаваемую в локальной памяти вызовом функции InitAtomTable(). Элементы таблицы - это либо указатели на соответствующие структуры ATOMENTRY, либо значения NULL.
Если таблица существует, то ее адрес можно получить из структуры INSTANCE. Структура глобальной таблицы полностью аналогична этой, но ее начальный размер и, соответственно, поле nEntries всегда равны 37.
Версии: 3.0, 3.1.
ATOMENTRY
Описание:
struct ATOMENTRY{
                WORD wNext;
                WORD wRef;
                BYTE byLen;
                BYTE Buffer[1];
};
Поля:
wNext   Следующая структура ATOMENTRY в списке, или NULL для последнего элемента.
wRef    Количество обращений к атому.
byLen   Длина строки в байтах.
Buffer  Начало буфера, содержащего строку длиной wLen.
Комментарии:
ATOM - короткий указатель на эту локальную структуру. Ее описание можно найти в файле Winexp.h, входящем в комплект SDK.
Версии: 3.0, 3.1.
BITMAPOBJ
Описание:
struct BITMAPOBJ{
                GDIOBJHDR Header;
                HANDLE hmemBitmap;
                BOOL bSelected;
                HANDLE reserved;
};
Поля:
Header  Заголовок объекта (см. GDIOBJHDR).
hmemBitmap      Дескриптор блока памяти соответствующей структуры BITMAP.
bSelected       TRUE, если карта выбрана в одном из контекстов, иначе FALSE.
Комментарии:
HBITMAP - дескриптор блока памяти  этой структуры в локальном хипе GDI.
Версии: 3.0, 3.1
BRUSHOBJ
Описание:
struct BRUSHOBJ{
                GDIOBJHDR Header;
                LOGBRUSH logBrush;
                COLORREF crHatchBk;
};
Поля:
Header  Заголовок объекта (см. GDIOBJHDR).
logBrush        Соответствующая структура LOGBRUSH.
crHatchBk       Цвет фона для <штрихующей> кисти.
Комментарии:
HBRUSH - дескриптор блока памяти этой структуры в локальном хипе GDI.
Версии: 3.0, 3.1.
BURGERMASTER
Описание:
struct BURGERMASTER{
                BOOL bCheck;
                BOOL bFreeze;
                WORD wEntries;
        #ifdef MODE286
                WORD nwFirst;
                WORD nwLast;
        #else
                DWORD nwFirst;
                DWORD nwLast
        #endif
                BYTE byComp;
                BYTE byDestrLev;
        #ifdef MODE286
                WORD nwDestrBytes;
                HANDLE hTable;
                HANDLE hFree;
                WORD wDelta;
                WORD pExpand;
                WORD pStats;
        #else
                DWORD nwDestrBytes;
                WORD reserved[5];
        #endif
                WORD wLRUAcess;
        #ifdef MODE286
                WORD wLRUChain;
        #else
                DWORD dwLRUChain;
        #endif
                WORD wLRUCount;
        #ifdef MODE286
                WORD nwDestrPara;
                WORD nwDestrChain;
        #else
                DWORD nwDestrPara;
                DWORD nwDestrChain;
        #endif
                WORD wFree;
};      
Поля:
bCheck  Если TRUE, то структура не разрушена.
bFreeze Если TRUE, то структура не может быть изменена или сжата.
wEntries        Количество элементов в списке объектов глобального хипа (GLOBAL_ARENA).
nwFirst Селектор (для расширенного режима - смещение внутри сегмента BURGERMASTER) первого объекта в списке с обратной связью.
nwLast  Селектор (для расширенного режима - смещение внутри сегмента BURGERMASTER) последнего объекта в списке.
byComp  Уровень сжатия структуры.
byDestrLev      Текущий уровень разрушения структуры.
nwDestrBytes    Текущее число недействительных байт таблицы.
hTable  Дескриптор заголовка списка таблиц дескрипторов.
hFree   Дескриптор заголовка списка таблиц свободных дескрипторов.
wDelta  Количество дескрипторов, выделяемых по каждому запросу.
pExpand Адрес для процедур обработки дескрипторов.
pStats  Адрес статистических таблиц.
wLRUAccess      Доступ к списку LRU на уровне прерываний.
wLRUChain       Адрес первого дескриптора в списке LRU.
dwLRUChain      Смещение внутри BURGERMASTER первого дескриптора из списка LRU.
wLRUCount       Количество элементов в списке LRU.
nwDestrPara     Количество параграфов для разрушимого кода.
nwDestrReserve  Ограничитель разрушимого кода.
wFree   Количество свободных блоков.
Комментарии:
Структура определяет состояние глобальной памяти (хипа).
Основные (для программиста-практика) поля этой структуры - nwFirst и nwLast, адресующие начало и конец двунаправленного списка информационных блоков объектов глобального хипа (GLOBAL_ARENA), соответствующих MCB DOS.
Селектор этой структуры возвращается функцией GlobalMasterHandle(). 
По возможности рекомендуется вместо этой структуры использовать соответствующие средства ToolHelp.
Версии: 3.0, 3.1.
CLASS
Описание:
struct CLASS{
                HANDLE hNext;
                WORD wSign;
                ATOM atomClass;
                HANDLE hDCE;
                WORD wNumWin;
                WNDCLASS wndClass;
                WORD wData[1];
};
Поля:
hNext   Адрес следующей структуры CLASS в сегменте данных USER.
wSign   Сигнатура 'NK'.
atomCls Атом в сегменте данных USER, содержащий имя класса.
hDCE    Если для окон класса установлено CS_CLASSDC, то это дескриптор соответствующей структуры DCE, иначе NULL.
wNumWin Текущее количество окон этого класса.
wndClass        Копия соответствующей структуры WNDCLASS с обнуленными полями lpszMenuName и lpszClassName.
wData   Дополнительные данные экземпляра окна.
Комментарии:
Структура адресуется полем hClass структуры WND и описывает класс окна.
Версии: 3.0, 3.1.
CURSOR
Описание:
struct CURSOR{
                CURSORICONINFO ciiHeader;
                BYTE BitmapBits[1];
};
Поля:
ciiHeader       Информационный заголовок.
BitmapBits      Монохромная битовая матрица, задающая изображение курсора.
Комментарии:
HCURSOR - глобальный дескриптор этой структуры.
Версии: 3.0, 3.1.
CURSORICONINFO
Описание:
struct CURSORICONINFO{
                POINT pntHotSpot;
                WORD wWidth;
                WORD wHeight;
                WORD wBmSize;
                BYTE byPlanes;
                BYTE byBitsPix;
};
Поля:
pntHotSpot      Точка-указатель (hotspot) для курсора.
wWidth  Ширина битовой карты в пикселах.
wHeight Высота битовой карты в пикселах.
wBmSize Размер битовой карты в байтах.
byPlanes        Количество битовых плоскостей в карте. Для курсора всегда 1.
byBitsPix       Количество бит на пиксел в плоскостях. Для курсора всегда 1.
Комментарии:
Эта структура - единый заголовок представления в памяти ресурсов иконки и курсора, отличающаяся от соответствующих заголовков в дисковых файлах.
Версии: 3.0, 3.1.
DC
Описание:
struct DC{
                GDIOBJHDR Header;
                BYTE byFlags;
                BYTE reserved;
                HANDLE hMetaFile;
                HRGN hrgnClip;
                HANDLE hPDevice;
                HPEN hPen;
                HBRUSH hBrush;
                HFONT hFont;
                HBITMAP hBitmap;
                HPALETTE hPal;
                HANDLE hDevice;
                HRGN hrgnRaoClip;
                HANDLE hGDIInfo;
                HANDLE hPPen;
                HANDLE hPBrush;
                HANDLE reserv;
                HANDLE hPFont;
                LPVOID lpDevice;
                WORD pLDevice;
                WORD pRaoClip;
                WORD pPDeviceBlock;
                WORD pPPen;
                WORD pPBrush;
                WORD reserv2;
                LPVOID lpFont;
                int reserved2[2];
                WORD wROP2;
                WORD wBkMode;
                DWORD dwBkColor;
                DWORD dwTextColor;
                int nTBreakExtra;
                int nBreakExtra;
                WORD wBreakErr;
                int nBreakRem;
                int nBreakCount;
                int nCharExtra;
                COLORREF crLBkColor;
                COLORREF crTextColor;
                POINT ptLCursorPos;
                POINT ptWndOrg;
                POINT ptWndExt;
                POINT ptVportOrg;
                POINT ptVportExt;
                POINT reserved3;
                WORD wMapMode;
                WORD reserved4;
                WORD wRelAbs;
                WORD wPolyFillMode;
                WORD wStretchBltMode;
                BYTE byPlanes;
                BYTE byBitsPix;
                WORD wPenWidth;
                WORD reserv3;
                WORD wTextAlign;
                DWORD dwMapperFlags;
                POINT ptBrushOrg;
                POINT ptFontAspect;
                HANDLE hFontWeights;
                WORD wDCSaveLevel;
                WORD reserved5;
                HRGN hVisRgn;
                POINT ptDCOrg;
                FARPROC lpfnPrint;
                ATOM atomDCLog;
                ATOM atomDCPhys;
                ATOM atomDCFile;
                DWORD reserved6;
        #ifdef WIN30
                WORD reserved7;
                RECT reserved8;
        #else
                RECT reserved7;
                RECT rectLVB;
                LPVOID reserved8[2];
        #endif
                WORD wDCGlobalFlags;
        #ifdef WIN31B
                HDC hDCNext;
        #endif
};
Поля:
Header  Заголовок DC как GDI-объекта.
byFlags Битовые флаги. Установленный бит 2 означает, что VisRgn изменился и требуется пересчет и (возможно) перерисовка DC.
hMetaFile       Если на DC проигрывается метафайл, то это его дескриптор.
hrgnClip        Прямоугольная область отсечения DC.
hPDevice        Дескриптор информационной структуры PDEVICE, документированной в DDK.
hPen    <Перо>, выбранное в контексте.
hBrush  <Кисть>, выбранная в контексте.
hFont   Шрифт, выбранный в контексте.
hBitmap Битовая карта, выбранная в контексте или NULL.
hPal    Текущая палитра контекста или NULL.
hDevice Дескриптор структуры DEVICE в локальном хипе GDI, содержимое которой неизвестно.
hrgnRaoClip     Видимая часть текущей области отсечения.
hGDIInfo        Дескриптор соответствующей структуры GDIINFO, документированной в DDK.
hPPen   Дескриптор физического <пера> (для драйверов устройств).
hPBrush Дескриптор физической <кисти>.
hPFont  Дескриптор физического шрифта (возвращается функцией GetPhysicalFontHandle()).
lpPDevice       Адрес структуры, на которую ссылается dc.hPDevice.
pLDevice        Результат LocalLock(dc.hPDevice).
pRaoClip        Результат LocalLock(dc.hrgnRaoClip).
pPGDIInfo       Результат LocalLock(dc.hGDIInfo).
pPPen   Результат LocalLock(dc.hPPen).
pPBrush Результат LocalLock(dc.hPBrush).
lpPFont Адрес структуры, на которую ссылается dc.hPFont.
wROP2   Текущий режим отрисовки, задаваемый SetROP2().
wBkMode Текущий режим заполнения фона.
dwBkColor       Внутреннее (для драйвера) представление текущего цвета фона.
dwTextColor     Внутреннее представление текущего цвета символов текста.
nTBreakExtra    Величина, устанавливаемая параметром nBreakExtra функции SetTextJustification().
nBreakExtra     Количество пикселов выравнивания для вывода через TextOut(). Вычисляется как округленное частное полей nTBreakExtra и nBreakCount.
wBreakErr       Код ошибки, возвращаемый, если параметр nBreakCount функции SetTextJustification() установлен в 0.
nBreakRem       Остаток от деления nTBreakExtra на nBreakCount.
nBreakCount     Величина, устанавливаемая параметром nBreakCount функции SetTextJustification().
nCharExtra      Величина, устанавливаемая параметром nCharExtra функции SetCharacterExtra().
crBkColor       Логический цвет фона.
crTextColor     Логический цвет символов.
ptLCursorPos    Координаты текущей позиции пера.
ptWndOrg        Начало координат окна.
ptWndExt        Ширина и высота окна.
ptVportOrg      Начало координат области вывода.
ptVportExt      Ширина и высота области вывода.
wMapMode        Текущий режим преобразования координат.
wRelAbs Режим задания координат устройства (абсолютные/относительные).
wPolyFillMode   Режим заполнения многоугольников.
wStretchBltMode Тип сжатия для функции StretchBlt().
byPlans Количество битовых плоскостей для последней выбранной в контексте битовой карты.
byBitsPix       Количество бит плоскости на пиксел для последней выбранной в контексте битовой карты.
wPenWidth       Толщина текущего <пера>.
wTextAlign      Флаги выравнивания текста.
dwMapperFlags   Параметры преобразования шрифтов.
ptBrushOrg      Координаты начальной точки для текущей кисти.
ptFontAspect    Растяжение шрифта по горизонтали и по вертикали.
hFontWeights    Жирность шрифта. Часто игнорируется.
wDCSaveLevel    Количество вызовов SaveDC(), не скомпенсированных RestoreDC().
hVisRgn Видимая область DC.
ptDCOrg Начало координат DC.
lpfnPrint       Точка входа для драйвера принтера.
atomDCLog       Локальный атом GDI, содержащий логическое имя устройства, на котором выделен DC.
atomDCPhys      Локальный атом GDI, содержащий физическое имя соответствующего устройства.
atomDCFile      Атом, содержащий имя файла, куда перенаправлена печать, либо NULL.
rectLVB Область DC, нуждающаяся в обновлении.
wDCGlobalFlags  Если бит 0 установлен, DC нуждается в обновлении.
hDCNext Следующий DC в списке.
Комментарии:
Структура локального хипа GDI, на которую указывает HDC. Вряд ли найдется Windows-программист, которому надо объяснять, что это такое.
Версии: 3.0, 3.1.
DCE
Описание:
struct DCE{
                HANDLE hDCENext;
                HWND hWndCurr;
                HDC hDC;
                BYTE byFlags;
                BYTE byInUse;
                BYTE byDirty;
                BYTE reserved;
                POINT ptOrigin;
                HWND hwndTop;
                HRGN hVisRgn;
};
Поля:
hDCENext        Дескриптор следующей структуры DCE.
hWndCurr        Окно, использующее DC, или NULL.
hDC     Дескриптор DC,  обслуживаемого структурой.
byFlags Бит 1 установлен, когда DC обслуживает рабочую область окно, бит 2 - все окно.
byInUse 0, если DCE свободна.
byDirty 1, если требуется перерисовка части DC.
ptOrigin        Начало координат DC.
hwndTop Окно верхнего уровня - предок hwndCurr.
hVisRgn Видимая область окна.
Комментарии:
Структура служит для организации связной цепочки DC в локальном хипе USER.
Версии: 3.0, 3.1.
DCSAVE
Комментарии:
DCSAVE - подмножество структуры DC, используемое при сохранении/восстановлении состояния (SaveDC()/RestoreDC(), GetDCState()/SetDCState()). Структура состоит из полей DC начиная с Header и по wDCLocks и поля ptDCOrg.
Версии: 3.0, 3.1.
DRAGINFO
Описание:
struct DRAGINFO{
                HWND hwndSource;
                HANDLE reserved;
                WORD wFlags;
                WORD pList;
                HANDLE hOfstruct;
                POINT ptCoord;
                DWORD reserved2;
};
Поля:
hwndSource      Окно, из которого начато перетаскивание (Drag).
wFlags  Тип перемещаемых объектов.
pList   Указатель в сегменте данных приложения-источника на список имен перемещаемых объектов, разделенных пробелами.
hOfstruct       Если перемещается файл, расширение которого имеет привязанную программу в файле Win.ini, то это дескриптор соответствующей структуры OFSTRUCT, иначе NULL.
ptCoord Позиция объекта на поверхности окна клиента.
Комментарии:
Структура используется сообщениями протокола Drag&Drop.
wFlags может иметь следующие значения:
1 (DRAGOBJ_PROGRAM): Имя файла, расширение которого указано в разделе  Win.ini.
2 (DRAGOBJ_DATA): Имя непривязанного файла данных.
3 (DRAGOBJ_DIRECTORY): Имя подкаталога.
4 (DRAGOBJ_MULTIPLE): Список файлов разных типов.
Если окно-сервер и окно-клиент принадлежат разным программам или экземплярам программы, то также устанавливается также старший бит wFlags (wFlags|=0x8000, что в данном случае эквивалентно wFlags+=0x8000).
Версии: 3.0, 3.1.
DROPINFO
Описание:
struct DROPINFO{
                WORD wOfsFirst;
                POINT ptDrop;
                BOOL bClient;
                BYTE byBuffer[1];
};
Поля:
wOfsFirst       Смещение chBuffer от начала структуры.
ptDrop  Точка рабочей области, в которой был произведен <сброс> (Drop).
bClient TRUE, если <сброс> был произведен в рабочей области, иначе FALSE.
byBuffer        ASCIIZ-буфер, содержащий разделенный пробелами список имен перемещаемых объектов.
Комментарии:
DROPINFO - та самая глобальная <внутренняя структура>, дескриптор которой передается в wParam с сообщением WM_DROPFILES.
Версии: 3.1.
FONTOBJ 
Описание:
struct FONTOBJ{
                GDIOBJHDR Header;
                LOGFONT logfont;
};
Поля:
Header  Заголовок шрифта как объекта GDI.
logfont Соответствующая структура LOGFONT.
Комментарии:
HFONT - дескриптор этой структуры в локальном хипе GDI.
Версии: 3.0, 3.1.
GDIOBJHDR
Описание:
struct GDIOBJHDR{
                HANDLE hNext;
                WORD wType;
                DWORD dwNumber;
                WORD reserved;
        #ifdef WIN31B
                WORD wSelCount;
                HANDLE hOwner;
        #endif
};
Поля:
hNext   Следующий элемент в списке объектов.
wType   Тип объекта и некоторые флаги.
dwCount Порядковый номер объекта в общем списке.
wSelCount       Количество раз, которое объект был выбран в контексте устройства.
hOwner  Владелец объекта. Поле позволяет Windows проверять, освобождены ли выделенные объекты к моменту завершения задачи.
Комментарии:
Эта структура - общий тип заголовка для объектов GDI. Конкретный тип объекта можно определить, замаскировав 13 и 15 биты поля wType (gdiobjhdr.wType &= 0xafff) следующим образом:
Значение для версии     
3.0     3.1             Тип объекта
1               'GO'            Карандаш (PEN)
2               'HO'            Кисть (BRUSH)
3               'IO'            Шрифт (FONT)
4               'JO'            Палитра (PALETTE)
5               'KO'            Битовая карта (BITMAP)
6               'LO'            Область (REGION)
7               'MO'            Контекст устройства (DC)
8               'NO'            Неактивный контекст (Disabled DC)
9               'OO'            MetaDC (?)
10      'PO'            Метафайл (METAFILE)
11      'QO'            Контекст метафайла в памяти (Metafile DC)
Бит 15 wType установлен, если объект выбран в одном из контекстов устройств, бит 13 устанавливается Windows 3.1, когда объект помечается задачей как <собственный> функцией MakeObjectPrivate().
Версии: 3.0, 3.1.
GLOBAL_ARENA
Описание:
struct GLOBAL_ARENA{
        #ifdef MODE386
                DWORD nwPrev;
                DWORD nwNext;
                DWORD dwBase;
                DWORD dwSize;
                HANDLE hThis;
                HANDLE hOwner;
        #endif
                BYTE byLocks;
        #ifdef MODE286
                HANDLE hOwner;
                WORD wSize;
        #else
                BYTE byPageLocks;
        #endif
                BYTE byFlags;
        #ifdef MODE286
                WORD nwPrev;
                WORD nwNext;
                HANDLE hThis;
                WORD nwLRUPrev;
                WORD nwLRUNext;
        #else
                BYTE byReqSels;
                DWORD nwLRUPrev;
                DWORD nwLRUNext;
        #endif
};
Поля:
nwPrev  Селектор предыдущей структуры в общем списке структур GLOBAL_ARENA. Первый и последний селекторы указывают сами на себя.
nwNext  Селектор следующей структуры в списке.
dwBase  База сегмента памяти, соответствующего данной структуре.
dwSize  Размер блока в байтах.
hThis   Дескриптор блока памяти, который описывает данная структура. Если блок фиксирован, то младший бит дескриптора равен единице.
hOwner  Дескриптор владельца блока (модуль, задача или PDB). Специальные значения этого поля: 0 для свободного блока, -1 для <независимого> блока (владелец - сам блок), -3 для блока, содержащего структуру BURGERMASTER, -4 для физически внешнего блока,   -7 для временного блока.
byPageLocks     Количество страничных блокировок функцией GlobalPageLock().
byFlags Третий бит установлен для блока DGROUP (сегмент данных по умолчанию экземпляра задачи), четвертый - для сбрасываемого блока.
nwLRUPrev       Предыдущий селектор в цепочке LRU1.
nwLRUNext       Следующий селектор в LRU-цепочке.
byReqSels       Количество необходимых селекторов для huge (бульших 64K) блоков.
Комментарии:
GLOBAL_ARENA играет в Windows роль описателя блока глобальной памяти, что очень близко к роли MCB для DOS.
В стандартном (286) режиме блок памяти, описываемый структурой, физически располагается сразу за ней, то есть его базовый адрес равен адресу его GLOBAL_ARENA плюс 16.
Адрес начала и конца цепочки этих структур можно извлечь из структуры BURGERMASTER.
По возможности рекомендуется вместо этой структуры использовать соответствующие средства ToolHelp.
Версии: 3.0, 3.1.
ICON
Описание:
struct ICON{
                CURSORICONINFO ciiHeader;
                BYTE BitmapBits[1];
};
Поля:
ciiHeader       Информационный заголовок.
BitmapBits      Битовая матрица, задающая изображение иконки.
Комментарии:
HICON - глобальный дескриптор этой структуры.
Версии: 3.0, 3.1.
INSTANCE
Описание:
struct INSTANCE{
                BOOL bDoesntExist;
                DWORD dwOldSSSP;
                WORD pLocalHeap;
                WORD pAtomTable;
                WORD pStackTop;
                WORD pStackMin;
                WORD pStackBottom;
};
Поля:
bDoesntExist    FALSE, если эта структура присутствует в сегменте данных.
dwOldSSSP       В этом поле сохраняется старый адрес стека при его переключении функцией SwitchStackTo().
pLocalHeap      Указатель на соответствующую структуру LOCAL_HEAP. При отсутствии у модуля локального хипа здесь может содержаться случайное значение, так что желательно всегда проверять сигнатуру структуры.
pAtomTable      Указатель на соответствующую структуру ATOMTABLE, либо 0 в случае ее отсутствия.
pStackBottom    Указатель на вершину стека.
pStackMin       Указатель на конец использованной части стека. Общий размер этой части равен (pStackBottom-pStackMin).
pStackTop       Указатель на вершину стека.
Комментарии:
Дескриптор экземпляра программы, передаваемый ей как аргумент hInstance функции WinMain(), содержит селектор сегмента данных экземпляра по умолчанию.
В первых шестнадцати байтах этот сегмент может содержать описанную структуру. Поля bDoesntExist позволяет проверить ее действительное наличие.
Версии:  3.0, 3.1.
LOCAL_ARENA
Описание:
struct LOCAL_ARENA{
                WORD pPrev;
                WORD pNext;
                union{
                        struct{
                                WORD wSize;
                                WORD pPrev;
                                WORD pNext;
                        }free;
                        struct{
                                WORD wEntries;
                                WORD pFirst;
                                WORD pFirstFree;
                        }first;
                        WORD wMovReserv;
                };
};
Поля:
pPrev   Последний бит установлен, если блок не свободный, предпоследний - если блок перемещаем. Замаскировав два последних бита(pPrev&=(~3)), можно получить указатель на предыдущий блок. Для первого блока - поле указывает само на себя.
pNext   Следующий блок в списке. Последний блок указывает сам на себя.
free.wSize      Размер свободного блока.
free.pPrev      Указатель на предыдущий элемент в списке свободных блоков.
free.pNext      Указатель на предыдущий свободный блок.
first.wEntries  Количество элементов в списке блоков локальной памяти.
first.pFirst    Указатель на первый элемент в списке, то есть на себя.
first.pFirstFree        Указатель на первый элемент в списке свободных блоков.
wMovReserv      Сразу за этим полем начинается область данных для перемещаемого (LMEM_MOVEABLE) блока памяти. Назначение его точно не известно.
Комментарии:
Структура описывает заголовок локального блока памяти. Первый блок в списке использует поля подструктуры first, все свободные блоки - поля free. В остальных (неперемещаемых) блоках область данных начинается сразу за полем pNext.
Блоки в цепочке расположены последовательно, так что размер блока можно вычислить посчитав расстояние от начала области данных (конец структуры) до заголовка следующего блока, на который указывает поле pNext.
По возможности рекомендуется вместо этой структуры использовать соответствующие средства ToolHelp.
Версии:  3.0, 3.1.
LOCAL_HEAP
Описание:
struct LOCAL_HEAP{
                BOOL bValid;
                BOOL bFreeze;
                WORD wEntries;
        #ifdef MODE286
                WORD nwFirst;
                WORD nwLast;
        #else
                DWORD nwFirst;
                DWORD neLast;
        #endif
                BYTE byComp;
                BYTE byDestrLevel;
        #ifdef MODE286
                WORD nwDestrBytes;
        #else
                DWORD nwDestrBytes;
        #endif
                struct{
                        WORD wEntries;
                        struct{
                                WORD pArenaMov;
                                BYTE byFlags;
                                BYTE byLocks;
                        }Blocks[1];
                }NEAR *pMovList;
                WORD pMovAvail;
                WORD wMovDelta;
                WORD pfnExpand;
                WORD pStatistics;
                FARPROC lpfnLocalNotify;
                WORD reserved;
                WORD wDSIncr;
                WORD wMinHeap;
                WORD wSign;
};
Поля:
bValid  TRUE, если структура не разрушена и может использоваться.
bFreeze TRUE, если структура не должна быть сжата.
wEntries        Количество элементов в списке объектов локального хипа.
nwFirst Короткий указатель на первую структуру LOCAL_ARENA в списке с обратной связью.
nwLast  Короткий указатель на последний элемент в списке структур LOCAL_ARENA.
byComp  Уровень сжатия структуры.
byDestrLevel    Текущий уровень разрушения структуры.
nwDestrBytes    Количество разрушенных байт.
pMovList        Указатель на таблицу, описывающую перемещаемые блоки локального хипа. Если таких блоков в хипе нет, поле содержит NULL.
Таблица перемещаемых блоков:
wEntries        Количество элементов таблицы.
Blocks  Начало таблицы описаний блоков.
Элементы таблицы:
pArenaMov       Указатель на соответствующий блок памяти.
byFlags Флаги типа памяти.
byLocks Счетчик блокировок, 0 для неиспользуемого блока.
pMovAvail       Указатель на первый свободный элемент в таблице перемещаемых блоков.
wMovDelta       Количество элементов в таблице перемещаемых блоков, выделяемых по запросу.
pfnExpand       Указатель на функцию распаковки структуры.
pStatistics     Указатель на статистическую таблицу.
lpfnLocalNotify Дальний указатель на процедуру-наблюдатель хипа, устанавливаемую функцией LocalNotify(). Это реликт версий Windows 2.x.
wDSIncr Минимальный инкремент размера сегмента данных.
wMinHeap        Минимальный размер хипа.
wSign   Сигнатура 'LH'.
Комментарии:
Структура определяет состояние локального хипа. Дескриптор этой структуры содержится в поле pLocalHeap структуры INSTANCE.
Перемещаемые локальные блоки в Windows обрабатываются специальным образом. Когда память выделяется функцией LocalAlloc() с установленным флагом LMEM_MOVEABLE, возвращается не обычный дескриптор, а короткий указатель на <свежевыделенный> элемент таблицы перемещаемых блоков (естественно, этот указатель спокойно может быть передан в качестве аргумента функции LocalLock()). При этом в заголовке (LOCAL_ARENA) этого блока памяти маскируется бит 2 поля pPrev.
По возможности рекомендуется вместо этой структуры использовать соответствующие средства ToolHelp.
Версии: 3.0, 3.1.
MENU
Описание:
struct MENU{
        #ifdef WIN31
                HMENU hmenuNext;
        #endif
                WORD reserved;
        #ifdef WIN30
                WORD wCurrSel;
                WORD reserved2;
                WORD wTotalSize;
        #else
                WORD wSign;
                HANDLE hTaskQueue;
        #endif
                WORD wWidth;
                WORD wHeight;
                WORD wItems;
                HWND hwndOwner;
        #ifdef WIN30
                MENUITEM Items[1];
        #else
                HANDLE hItems;
                WORD reserved2;
        #endif
};
Поля:
hMenuNext       Дескриптор следующего меню в общем списке.
wCurrSel        Порядковый номер выбранного элемента меню, либо -1.
wTotalSize      Общий размер в байтах меню со всеми соответствующими структурами MENUITEM.
wSign   Сигнатура 'NK'.
hTaskQueue      Структура TASK_QUEUE задачи, которой принадлежит меню.
wWidth  Ширина в пикселах всей рамки меню.
wHeight Высота в пикселах рамки меню.
wItems  Количество элементов в меню (количество минус один в версии Windows 3.0).
hwndOwner       Окно-владелец списка.
hItems  Дескриптор локального блока памяти, содержащего соответствующий массив структур MENUITEM.
Комментарии:
HMENU - локальный дескриптор (в версии 3.0 - короткий указатель) в локальной области данных USER для этой структуры. Вряд ли структура может иметь практическое применение в прикладной программе.
Версии: 3.0, 3.1.
MENUITEM
Описание:
struct MENUITEM{
                WORD wFlags;
                WORD wCommand;
                RECT rectItem;
                WORD wTab;
                HANDLE hCheckBmp;
                HANDLE hUnchBmp;
                HANDLE hContents;
                WORD wUlStart;
                WORD wUlLen;
                WORD wTextLen;
};
Поля:
wFlags  Флаги MF_... для данного пункта.
wCommand        Идентификатор (команда) пункта меню, или дескриптор popup-подменю, открываемого данным пунктом.
rectItem        Прямоугольник (в экранных координатах), занимаемый данным пунктом.
wTab    Текущая позиция табуляции пункта.
hCheckBmp       Дескриптор битовой карты <галочки>, используемой для отметки пункта меню.
hUnchBmp        Дескриптор битовой карты для отметки пункта с атрибутом MF_UNCHECKED. Обычно NULL.
hContents       Либо атом, содержащий текст пункта меню, либо дескриптор соответствующей битовой карты.
wUlStart        Абсцисса (в пикселах) начала подчеркивания для буквы, соответствующей <горячей клавише>.
wUlLen  Длина (в пикселах) подчеркивания.
wTextLen        Длина текста пункта меню.
Комментарии:
Структура описывает конкретный пункт меню из списка, ссылка на который содержится в соответствующей структуре MENU.
Версии: 3.0, 3.1.
MODULE
Описание:
struct MODULE{
                WORD wSign;
                WORD wLoads;
                struct{
                        WORD wFirstOrd;
                        WORD wLastOrd;
                        struct{
                                BYTE byType;
                                BYTE byFlags;
                                BYTE bySegNum;
                                WORD wOffs;
                        }Entry[1];
                }NEAR *EntriesTab;
                WORD wNext;
                struct SGMTAB{
                        WORD wOfs;
                        WORD wLen;
                        WORD wFlags;
                        WORD wLenMem;
                        WORD wSel;
                }NEAR *pDGroup[1];
                struct{
                        BYTE byLen;
                        BYTE byFlag;
                        WORD reserved;
                        WORD wDate;
                        WORD wTime;
                        BYTE Name[1];
                }NEAR *FileInfo;
                WORD wFlags;
                WORD wDGroupOrd;
                WORD wHeapSize;
                WORD wStackSize;
                LPVOID lpInit;
                LPVOID lpStack;
                WORD wSegCount;
                WORD wRefEntries;
                WORD wStatTab;
                SGMTAB NEAR *SegTab;
                struct{
                        WORD wAlign;
                        struct{
                                WORD wType;
                                WORD wEntries;
                                FARPROC lpfnContr;
                                struct{
                                        WORD wOfs;
                                        WORD wLen;
                                        WORD wFlags;
                                        WORD wId;
                                        HANDLE hSeg;
                                        WORD wInUse;
                                }Resource[1];
                        }ResType[1];
                }NEAR *ResTab;
                WORD pResNames;
                WORD pRefTab;
                WORD pImpNames;
                DWORD dwStatTab;
                WORD wMovEntries;
                WORD wSelAlign;
                BOOL bTrueType;
                BYTE byOS;
                BYTE byFlags2;
                WORD pImpNames2;
                WORD reserved;
                WORD reserved2;
                WORD wVer;
};
Поля:
wSign   Сигнатура 'NE'.
wLoads  Количество загруженных экземпляров модуля. Когда это поле уменьшается до нуля, структура удаляется из памяти.
EntriesTab      Таблица входов для модуля (см. ниже).
wNext   Селектор следующего модуля в списке. Дескриптор первого модуля содержится в поле hFirstModule структуры THHOOK.
pDGroup[1]      Короткая ссылка на первый элемент таблицы структур SGMTAB (описания сегментов) для DGROUP модуля.
Структура SGMTAB:
wOfs    Смещение сегмента в файле, сдвинутое на wSelAlign бит вправо.
wLen    Длина сегмента на диске.
wFlags  Флаги типа памяти сегмента. Значения установленных бит:
0 (0x0001) - сегмент данных,
4 (0x0010) - перемещаемый,
5 (0x0020) - разделяемый,
6 (0x0040) - сегмент PRELOAD,
7 (0x0080) - только для чтения,
8 (0x0100) - подстраиваемый,
12 (0x1000) - сбрасываемый.
wLenMem Начальная длина сегмента в памяти (0 соответствует 64K).
wSel    Селектор сегмента.
FileInfo        Ссылка на информационную структуру файла модуля.
Информация о файле:
byLen   Длина этой информационной структуры.
byFlag  Бит 1 установленъ в версии 3.0, если модуль загружен до Program Manager.
wDate   Дата в формате MS DOS.
wTime   Время в формате MS DOS.
Name[1] Первый байт ASCIIZ-строки, содержащей имя файла.
wFlags  Информационные флаги модуля. Значения отдельных бит:
15 (0x8000) - установлен для DLL,
11 (0x0800) - приложение с внутренним загрузчиком,
8 и 9 (0x0300) - программа использует для вывода на экран средства API Windows,
6 (0x0040) - внутреннее выделение памяти,
4 (0x0010) - программа использует LIM EMS 3.2,
1 (0x0002) - каждый экземпляр модуля в памяти имеет собственный DGROUP (обычная задача),
0 (0x0001) - DGROUP общий для всех экземпляров (DLL).
wDGroupOrg      Номер логического сегмента для DGROUP.
wHeapSize       Начальный размер локального хипа.
wStackSize      Начальный размер стека.
lpInit  Начальный логический указатель для CS:IP.
lpStack Начальный логический указатель для SS:SP.
wSegCount       Количество элементов в SegTab.
wRefEntries     Количество элементов в таблице ссылок модуля.
wStatTab        Длина таблицы нерезидентных имен.
SegTab  Таблица структур SEGTAB (см. выше), описывающих сегменты модуля.
ResTab  Таблица ресурсов.
Заголовок:
wAlign  Количество бит для сдвига влево значений полей Resource[n].wOfs и Resource[n].wLen.
ResType[1]      Первый элемент таблицы типов.
Таблица типов:
wType   Тип ресурсов, таблицу которых содержит данный элемент. Если старший бит установлен, то остальные (wType&=0x7FFF) содержат одну из констант RT_...
wEntries        Количество элементов в таблице ресурсов данного типа.
lpfnContr       Адрес соответствующей функции контроля ресурсов.
Resource[1]     Первый элемент таблицы ресурсов данного типа.
Таблица ресурсов данного типа:
wOfs    Смещение ресурса в файле, сдвинутое на wAlign бит вправо.
wLen    Длина ресурса в файле, сдвинутая на wAlign бит вправо.
wFlags  Флаги типа блока памяти ресурса. Значения отдельных бит:
12 (0x1000) - сбрасываемый,
6 (0x0040) - предварительная загрузка (preload),
5 (0x0020) - только для чтения,
4 (0x0010) - перемещаемый,
2 (0x0004) - загруженный в память.
wId     Идентификатор ресурса.
hSeg    Дескриптор сегмента памяти, содержащей ресурс.
wUse    Счетчик использования ресурса.
pResNames       Короткий указатель на таблицу резидентных имен. Это последовательность паскаль-строк (первый байт содержит длину следующей за ним строки). На первый байт за концом таблицы указывает pRefTab.
pRefTab Указатель на таблицу ссылок модуля. Таблица содержит последовательность слов, содержащих дескрипторы модулей, логические номера которых являются индексами в этой таблице.
pImpNames       Указатель на нулевой байт перед таблицей импортируемых имен. Формат аналогичен pResNames.
dwStatTab       Смещение в соответствующем NE-файле таблицы нерезидентных имен.
wMovEntries     Количество перемещаемых входов.
wSelAlign       Степень двойки, на которую нужно умножить значение поля wOffs соответствующей структуры SEGTAB, чтобы получить смещение сегмента в файле. Чаще всего содержит 4 (wOffs*=16) или 9 (wOffs*=512).
bTrueType       TRUE, если модуль содержит TrueType-шрифты.
byOS    Идентификатор операционной системы, для которой создан модуль: 0 для неизвестной системы, 1 для MS OS/2, 2 - Windows, 3 - европейский DOS4 (?), 4 - WIN32.
byFlags2        Дополнительные информационные флаги. Значения отдельных бит:
0 (0x01) - используются длинные имена файлов,
1 (0x02) - задача Windows 2.x, которая может выполняться в защищенном режиме,
2 (0x04) - задача Windows 2.x, поддерживающая векторные шрифты,
3 (0x08) - в файле модуля есть последовательно загружаемые сегменты.
pImpNames2      Соответствует pImpNames, за исключением некоторых экзотических случаев (Windows 3.0 beta).
wVer    Версия Windows, для которой скомпилирован модуль в формате GetVersion().
Комментарии:
Дескриптор модуля (HMODULE), используемый многими функциями Windows, указывает на эту структуру, которая является <идеализированным> вариантом заголовка файла NE.
Версии: 3.0, 3.1.
PALETTEOBJ
Описание:
struct PALETTEOBJ{
                GDIOBJHDR Header;
                LOGPALETTE logPalette;
};
Поля:
Header  Заголовок объекта (см. GDIOBJHDR).
logPalette      Соответствующая структура LOGPALETTE.
Комментарии:
HPALETTE - дескриптор блока памяти  этой структуры в локальном хипе GDI.
Версии: 3.0, 3.1
PENOBJ
Описание:
struct PENOBJ{
                GDIOBJHDR Header;
                LOGPEN logPen;
};
Поля:
Header  Заголовок объекта (см. GDIOBJHDR).
logPen  Соответствующая структура LOGPEN.
Комментарии:
HPEN - дескриптор блока памяти  этой структуры в локальном хипе GDI.
Версии: 3.0, 3.1
SELTAB
Описание:
struct SELTAB{
                DWORD dwArenaOffs[1];
};
Поля:
dwArenaOffs[1]  Первый элемент таблицы смещений структур GLOBAL_ARENA.
Комментарии:
Таблица позволяет для любого селектора узнать 32-битное смещение соответствующей структуры GLOBAL_ARENA внутри сегмента BURGERMASTER. Значение селектора с тремя замаскированными младшими битами деленное на два является индексом в данной таблице.
Таблица расположена в сегменте BURGERMASTER. Ее размер и смещение в сегменте в версии 3.1 можно получить соответственно из полей wSelTabLen и dwSelTabStart структуры THHOOK. В Windows 3.0 эти переменные расположены в сегменте данных KERNEL со смещениями соответственно 324h и 326h.
Версии: 3.0, 3.1, только расширенный (386) режим.
TASK_QUEUE
Описание:
struct TASK_QUEUE{
                WORD wNext;
                HANDLE hOwner;
                WORD wMsgSize;
                WORD wWaitMsgs;
                WORD wNextMsg;
                WORD wNextAvail;
                WORD wQueueEnd;
                DWORD dwTime;
                DWORD dwPos;
                WORD reserved;
        #ifdef WIN31
                DWORD dwExtra;
        #endif
                DWORD reserved2;
                DWORD dwLParam;
                WORD wParam;
                WORD wMsg;
                HANDLE hWnd;
                BOOL bPostQMsg;
                WORD wExitCode;
        #ifdef WIN30
                HANDLE hInst;
        #endif
                HANDLE hInSend;
                HANDLE hNextReply;
                HANDLE hNextServe;
        #ifdef WIN30
                WORD wQueueState;
                WORD wQueueFlags;
        #else
                WORD wQueueFlags;
                WORD wQueueState;
        #endif
                BYTE Msgs[1];
};
Поля:
wNext   Селектор следующей структуры TASK_QUEUE в общем списке.
hOwner  Дескриптор задачи-владельца данной структуры.
wMsgSize        Размер одного сообщения в данной очереди.
wWaitMsgs       Количество сообщений в очереди, ожидающих обработки.
wNextMsg        Смещение первого в очереди сообщения для обработки от начала сегмента очереди.
wNextAvail      Смещение ближайшей доступной ячейки для помещения нового сообщения в очередь.
wQueueEnd       Смещение первого байта за концом очереди сообщений.
dwTime  Это значение возвращает GetMessageTime().
dwPos   Это значение возвращает GetMessagePos().
dwExtra Это значение возвращает GetMessageExtraInfo().
dwLParam         LParam последнего вызова SendMessage().
wParam  wParam последнего вызова SendMessage().
wMsg    Последнее посланное SendMessage() сообщение.
hWnd    Окно, которому было послано последнее сообщение функцией SendMessage().
bPostQMsg       TRUE после посылки PostQuitMessage().
wExitCode       Код возврата PostQuitMessage().
hInst   Дескриптор экземпляра для задачи.
hInSend Дескриптор структуры TASK_QUEUE задачи, вызвавшей InSendMessage().
hNextReply      Дескриптор структуры TASK_QUEUE последней задачи, пославшей сообщение текущей задаче функцией SendMessage(). Пославшая сообщение задача после обработки восстанавливает предыдущее значение этого поля.
hNextServe      Предыдущее значение поля hNextReply структуры TASK_QUEUE задачи, которой текущей задачей было послано сообщение функцией SendMessage(). Таким образом, при серии вызовов этой функции образуется очередь LIFO1 структур TASK_QUEUE, связанных через это и предыдущее поле.
wQueueState     Комбинация флагов QS_..., описывающих текущее состояние очереди. В Windows 3.0 эти флаги не документированы и их значения отличаются от используемых в версии 3.1. Флаг QS_MOUSE там имеет значение 1, QS_KEY - 2, QS_POSTMESSAGE - 4, QS_TIMER - 8, QS_PAINT - 0x10 и QS_SENDMESSAGE - 0x40.
wQueueFlags     Поле соответствует wQueueState, но не сбрасывается в 0 после вызова функций GetQueueStatus() или GetInputStste() для задачи.
Msgs[1] Начало буфера для сообщений. По умолчанию буфер может содержать 8 сообщений для локальной и 120 для иситемной очереди. Однако эти значения могут быть изменены соответственно ключами DefaultQueueSize= и TypeAhead= секции [Windows] файла Win.ini. Поле является таблицей (точнее, кольцевым буфером) структур соответственно MSG для локальной и EVENTMSG для системной очереди.
Комментарии:
Структура описывает организацию очередей сообщений Windows. Как следует из структуры, система посылает сообщения не окнам, а задачам, которые уже занимаются их распределением.
Система содержит одну специальную <системную> очередь сообщений, не входящую в общий список и не принадлежащую никаким задачам (поля wNext и hOwner не определены), в которую помещаются аппаратные сообщения от внешних устройств и к которой обращаются все задачи.
Очередь располагается в дополнительном (не DGROUP) сегменте данных USER со смещением 2 (версия 3.0) или 0 (3.1).
Версии: 3.0, 3.1.
TDB
Описание:
struct TDB{
                WORD wNext;
                LPVOID lpStack;
                WORD wSysMsgs;
                WORD wPriority;
                WORD reserved;
                WORD wTask;
                WORD reserved2[3];
                WORD wFldcw;
                WORD wType;
                WORD reserved3;
                WORD wVer;
                HANDLE hInst;
                HANDLE hModule;
                WORD wTaskQueue;
                WORD wParent;
                WORD reserved4;
                LPPROC lpfnSidHandler;
                LPPROC reserved5[2];
                LPPROC lpfnInt0;
                LPPROC lpfnInt2;
                LPPROC lpfnInt4;
                LPPROC lpfnInt6;
                LPPROC lpfnInt7;
                LPPROC lpfnInt3Eh;
                LPPROC lpfnInt75h;
                DWORD dwCompat;
                WORD reserved6[7];
                WORD wPDB;
                LPVOID lpDTA;
                BYTE byDrive;
                BYTE Path[43];
                HANDLE hDirected;
                WORD reserved7[2];
                WORD wCode;
                THUNKS ThnkFirst;
                BYTE Name[8];
                WORD wSign;
                BYTE PDB[256];
};
Поля:
wNext   Селектор следующей структуры TDB в системном списке,  NULL для последней задачи. Селектор первой структуре списка возвращается в старшем слове DWORD возврата функции GetCurrentTask().
lpStack Текущие SS:SP задачи.
wSysMsgs        Текущее количество необработанных сообщений в системной очереди, касающихся данной задачи.
wPriority       Приоритет данной задачи. Значения находятся в интервале от -32 до 15. Минимальное значение соответствует максимальному приоритету (список задач сортируется по этому полю), причем значения, бульшие нуля практически блокируют задачу.
wTask   Селектор данной структуры. Может использоваться для контроля.
wFldcw  Текущее слово состояния сопроцессора для задачи.
wType   Специальное значение типа задачи: 1 для DOS, 8 для OS/2 1.x и 16 для Win32s под Windows 3.1.
wVer    Версия Windows, для которой скомпилирована задача.
hInst   Дескриптор экземпляра для задачи.
hModule Дескриптор модуля задачи.
hTaskQueue      Селектор сегмента соответствующей структуры TASK_QUEUE.
wParent Дескриптор TDB задачи, запустившей данную.
lpfnSigHandler  Адрес обработчика Ctrl-Break задачи.
lpfnInt*        Адреса обработчиков соответствующих прерываний для данной задачи.
dwCompat        <Флаги совместимости> задачи.
wPDB    Селектор PDB задачи.
lpDTA   Адрес DTA (Disk Transfer Area) задачи.
byDrive Текущий номер дисковода с установленным старшим битом (A=0x80).
Path    Текущий каталог для задачи.
hDirected       Дескриптор задачи, которой было передано управление функцией DirectedYield().
wCode   Дубликат селектора сегмента кода задачи.
ThnkFirst       Первый (часто единственный) элемент таблицы точек входа экспортируемых процедур задачи, созданных функцией MakeProcInstance().
Name    Имя модуля (обычно соответствует имени исполнияемого файла).
wSign   Сигнатура 'TD'.
PDB     PDB (PSP защищенного режима) задачи.
Комментарии:
Дескриптор задачи (HTASK) указывает на эту глобальную структуру. Каждый экземпляр задачи имеет собственную структуру TDB.
Структура содержит жизненно важную для системы информацию и вряд ли сильно изменится в будущих версиях.
При использовании задачи рекомендуется проверять равенство количества задач в списке и значения, возвращаемого функцией GetNumTasks().
Версии: 3.0, 3.1.
THUNKS
Описание:
struct THUNKS{
                WORD wNext;
                WORD wSign;
                WORD reserved;
                WORD wAvail;
                BYTE Thunks[56];
};
Поля:
wNext   Адрес следующей структуры THUNKS в списке, первый элемент которого содержится в соответствующей структуре TDB.
wSign   Сигнатура 'PT'.
wAvail  Смещение от начала поля wSign ближайшей доступной ячейки для новой точки входа экспортируемой процедуры. Если поле содержит 0, то ячейку следует искать дальше по списку структур.
Thunks  Буфер для семи восьмибитных фрагментов кода - точек входа в процедуры, возвращаемых функцией MakeProcInstance().
Комментарии:
Стурктура описывает элемент определенного для каждой задачи списка <контейнеров> для точек входа в экспортируемые процедуры, создаваемых функцией MakeProcInstance().
Формат процедуры входа описан в документации и предназначен для помещения в регистр DS селектора сегмента данных по умолчанию программы. Это продиктовано тем, что каждый экземпляр задачи (в отличие от DLL) имеет свой собственный сегмент данных, но код для всех экземпляров общий и поэтому оказывается сложным использование экспортируемых процедур без динамического создания специальных точек входа.
Решение этой проблемы реализовано компилятором Borland C++ введением установки Smart Callbacks, позволяющей не использовать MakeProcInstance(). Был использован тот факт, что регистр SS при входе в любую процедуру Windows уже содержит адрес сегмента данных программы по умолчанию. Таким образом установка при входе DS равным SS решает проблему.
Версии: 3.0, 3.1.
THHOOK
Описание:
struct THHOOK{
                HANDLE hBM;
                WORD wBM;
                HANDLE hFirstMod;
                WORD reserved;
                WORD wTopPDB;
                WORD wFirstPDB;
                WORD reserved2;
                HANDLE hFirstTask;
                HANDLE hCurTask;
                WORD reserved3;
                HANDLE hLock;
        #ifdef WIN31
                WORD wSelTabLen;
                DWORD dwSelTabStart;
                BYTE reserved4[220];
        #else
                BYTE reserved4[357];
        #endif
                FARPROC lpfnCdrNotify;
                HANDLE hTaskFileCdr;
};
Поля:
hBM     Дескриптор структуры BURGERMASTER.
wBM     Селектор сегмента структуры BURGERMASTER.
hFirstMod       Дескриптор первого модуля в системном списке.
wTopPDB PDB текущей задачи.
wFirstPDB       Дескриптор первой PDB в системе.
hFirstTask      Дескриптор первой задачи в системном списке.
hCurTask        Дескриптор текущей задачи.
hLock   Дескриптор заблокированной в системе задачи или 0, если такой нет.
wSelTabLen      Длина системной структуры SELTAB.
dwSelTabStart   Смещение начала структуры SELTAB внутри сегмента BURGERMASTER.
lpfnCdrNotify   Адрес функции оповещения об изменениях в файловой системе.
hTaskFileCdr    Задача, вызвавшая функцию FileCdr().
Комментарии:
Функция содержит важную информацию об организации системы. Ее адрес в Windows 3.1 содержит экспортируемая переменная THHook. В версии 3.0 адрес структуры не экспортировался, но она была доступна в сегменте данных по умолчанию KERNEL по смещению 0x10.
Версии: 3.0, 3.1.
WND
Описание:
struct WND{
                HWND hwndNext;
                HWND hwndChild;
        #ifdef WIN31
                HWND hwndParent;
                HWND hwndOwner;
                RECT rectWindow;
                RECT rectClient;
                HANDLE hQueue;
                HRGN hrgnUpdate;
        #endif
                HANDLE hClass;
        #ifdef WIN31
                HANDLE hInstance;
                FARPROC lpfnWndProc;
                DWORD reserved;
                DWORD dwStyle;
                DWORD dwExStyle;
                HANDLE hControl;
                HANDLE reserved2[3];
        #else
                HANDLE reserved;
        #endif
                HWND hwndActive;
        #ifdef WIN31
                HMENU hSysMenu;
        #else
                HANDLE reserved2;
                HANDLE hQueue;
                HRGN hrgnUpdate;
                HANDLE hDCE;
                HMENU hSysMenu;
                HWND hwndOwner;
                RECT rectWindow;
                RECT rectClient;
                HPALETTE hPal;
                WORD reserved3;
                DWORD dwExStyle;
                DWORD dwStyle;
                HANDLE hControl;
                HANDLE reserved4;
                HWND hwndParent;
                HANDLE hInstance;
                FARPROC lpfnWndProc;
        #endif
                WORD wExtra[1];
};
Поля:
hwndNext        Следующее окно с цепочке окон данного иерархического уровня.
hwndChild       Первое окно в списке дочерних окон.
hwndParent      Дескриптор родительского окна.
hwndOwner       Дескриптор окна-владельца.
rectWindow      Положение окна в экранных координатах.
rectClient      Положение рабочей области окна в экранных координатах.
hQueue  Глобальный дескриптор структуры TASK_QUEUE задачи, которой принадлежит окно.
hrgnUpdate      Суммарная область обновления для окна.
hClass  Дескриптор структуры CLASS, соответствующей данному окну.
hInstance       Экземпляр модуля, которому принадлежит окно.
lpfnWndProc     Адрес оконной процедуры.
dwStyle Основные флаги стиля окна (WS_...).
dwExStyle       Дополнительные флаги стиля окна (WS_EX...). Стиль WS_EX_TOPMOST (0x8L), позволяющий окну в любом состоянии находиться поверх других окон, не имеющих этого стиля документированный в версии 3.1, может использоваться и под Windows 3.0. Бит 3 этого поля должен быть установлен, чтобы окно могло получать сообщение WM_BEGINGRAG.
hControl        Для управляющих окон (кнопок, списков и т.д.) - их идентификатор, для обычного окна - дескриптор меню или NULL в случае его отсутствия.
hwndActive      Значение, возвращаемое для окна функцией GetLastActivePopup().
hSysMenu        Дескриптор копии или (для клиентов MDI) <оригинала> системного меню окна.
hPal    Дескриптор логической палитры для использования с окном, или NULL.
wExtra  Начало области дополнительных данных для окна.
Комментарии:
HWND - дескриптор этой структуры в локальном хипе USER.
Версии: 3.0, 3.1.
Часть II.
Сообщения Windows.
WM_ACTIVATESHELLWINDOW
Значение:
0x44
Комментарии:
Это сообщение посылается для уведомления функций-наблюдателей при активизации окна оболочки (Shell). Windows регистрирует функцией RegisterWindowsMessage() и часто использует вместо данного сообщение с именем 1 .
Версии: 3.1.
WM_ALTTABACTIVE
Значение:
0x29
Комментарии:
Посылается некоторым типам диалоговых окон при попытке передачи управления другой задаче нажатием на Alt-Tab.
Версии: 3.0, 3.1.
WM_BEGINDRAG
Значение:
0x22c
Комментарии:
Посылается списком (List box) родительским окнам с установленным битом 3 в расширенном описании стиля, когда пользователь перемещает <подсветку>.
Обратите внимание, что бит 3 стиля может быть установлен только непосредственно в поле dwExStyle соответствующей структуры WND.
Версии: 3.0, 3.1.
WM_DRAGLOOP
Значение:
0x22d
Параметры:
wParam  Содержит 1, если окно, над которым находится курсор, может принять перемещаемый объект, 0 в противном случае.
lParam  Дальний указатель на структуру DRAGINFO, содержащую информацию об операции.
Комментарии:
Сообщение посылается функцией DragObject() вызвавшему ее серверу Drag&Drop чтобы информировать его о процессе перемещения объекта.
Версии: 3.0, 3.1.
WM_DRAGMOVE
Значение:
0x22f
Параметры:
lParam  Дальний указатель на структуру DRAGINFO, содержащую информацию об операции.
Комментарии:
Сообщение посылается функцией DragObject() клиенту Drag&Drop, сообщившему ей, что он может принять объект, пока курсор перемещается над ним и кнопка мыши не отпущена.
Версии: 3.0, 3.1.
WM_DRAGSELECT
Значение:
0x22e
Параметры:
wParam  0, если курсор покидает окно, 1, если входит обратно.
lParam  В старшем слове - дескриптор структуры DRAGINFO, содержащей информацию об операции.
Комментарии:
Сообщение посылается функцией DragObject() клиенту Drag&Drop, сообщившему ей, что он может принять объект, когда курсор покидает видимую область окна или попадает в нее.
Версии: 3.0, 3.1.
WM_DROPOBJECT
Значение:
0x22a
Параметры:
wParam  Дескриптор окна сервера Drap&Drop.
lParam  Дальний указатель на структуру DRAGINFO, содержащую информацию об операции.
Комментарии:
Сообщение посылается функцией DragObject() клиенту Drag&Drop, сообщившему ей, что он может принять объект, когда объект <сбрасывается> (Drop) в окно.
Значение, возвращаемое оконной процедурой клиента, полностью соответствует возврату функции DragObject().
Версии: 3.0, 3.1.
WM_ENTERMENULOOP
Значение:
0x211
Комментарии:
Сообщение посылается окну при вызове его системного меню.
Версии: 3.0, 3.1.
WM_ENTERSIZEMOVE
Значение:
0x231
Комментарии:
Сообщение посылается окну, когда начинается его перемещение или изменение размера.
Версии: 3.0, 3.1.
WM_EXITMENULOOP
Значение:
0x212
Комментарии:
Сообщение посылается окну при выходе из его системного меню.
Версии: 3.0, 3.1.
WM_EXITSIZEMOVE
Значение:
0x232
Комментарии:
Сообщение посылается окну, когда заканчивается операция перемещения или изменения размеров окна.
Сообщение не вызывается, если операция производилась с клавиатуры и в результате ни размер, ни позиция окна не изменились.
Версии: 3.0, 3.1.
WM_GETHOTKEY
Значение:
0x33
Комментарии:
Оконная функция после обработки сообщения возвращает слово, младший байт которого содержит код клавиши, а старший - состояние клавиш-переключателей для <горячей клавиши>, активизирующей окно, которому послано данное сообщение.
Версии: 3.0,3.1.
WM_ISACTIVEICON
Значение:
0x35
Комментарии:
Сообщение посылается иконкам - клиентам MDI, чтобы определить их статус. Процедура по умолчанию после обработки возвращает TRUE, если иконка активна, или FALSE если окно не минимизирована или неактивно.
Версии: 3.0, 3.1.
WM_LBTRACKPOINT
Значение:
0x131
Параметры:
wParam  Номер элемента, выбранного в списке.
lParam  Структура POINT, содержащая координаты курсора мыши относительно левого верхнего угла списка в момент выбора элемента.
Комментарии:
Сообщение посылается родительскому окну окном списка при выборе одного из его элементов.
Версии: 3.0, 3.1.
WM_OTHERWINDOWCREATED
Значение:
0x42
Параметры:
wParam   Дескриптор созданного окна.
Комментарии:
Это сообщение посылается по цепочке родительских окон, когда создается дочернее окно. Windows регистрирует функцией RegisterWindowsMessage() и часто использует вместо данного сообщение с именем .
Версии: 3.1.
WM_OTHERWINDOWDESTROYED
Значение:
0x43
Параметры:
wParam   Дескриптор уничтожаемого окна.
Комментарии:
Это сообщение посылается по цепочке родительских окон, когда уничтожается дочернее окно. Windows регистрирует функцией RegisterWindowsMessage() и часто использует вместо данного сообщение с именем .
Версии: 3.1.
WM_PAINTICON
Значение:
0x26
Комментарии:
Сообщение посылается минимизированным окнам, имеющим иконку класса, когда необходима перерисовка иконки.
Версии: 3.0, 3.1.
WM_QUERYDROPOBJECT
Значение:
0x22b
Параметры:
wParam  0, если курсор находится над рабочей областью окна, иначе 1.
lParam  Дальний указатель на структуру DRAGINFO, содержащую информацию об операции.
Комментарии:
Сообщение посылается функцией DragObject() окну, над которым находится перемещаемый объект, чтобы узнать, может ли оно принять этот объект. В случае возможности приема, оконная процедура должна после обработки возвратить TRUE.
Версии: 3.0, 3.1.
WM_SETHOTKEY
Значение:
0x32
Параметры:
wParam  Значение аналогично возврату оконной функции после обработки WM_GETHOTKEY.
Комментарии:
Сообщение устанавливает <горячую клавишу> для активизации окна, которому передается это сообщение.
Оконная функция после обработки может возвращать следующие значения: 2, елси клавиша уже используется другим окном; 1 при нормальной обработке; 0 - неверный дескриптор окна; -1 - несуществующий код клавиши.
Версии: 3.0, 3.1.
WM_SETVISIBLE
Значение:
0x9
Параметры:
wParam  TRUE, если окно становится видимым, FALSE - если прячется.
Комментарии:
Функция ShowWindow() посылает окну сообщение перед тем, как спрятать или восстановить его.
Версии: 3.0.
WM_SYSTIMER
Значение:
0x118
Комментарии:
Сообщение полностью аналогично WM_TIMER, но посылается, если таймер установлен без указания процедуры обработки функцией SetSystemTimer().
Версии: 3.0, 3.1.
Часть III.
Экспортируемые переменные.
__0000H
Описание:
WORD __0000H;
Адрес: KERNEL.183
Комментарии:
__0000H - селектор защищенного режима, указывающий на сегмент физической памяти размером 64K байт с базовым адресом 0000:0000.
Вопреки официальной документации, этот селектор (как и любые другие) может быть использован не только в ассемблерной подпрограмме.
Версии: 3.0, 3.1.
__0040H
Описание:
WORD __0040H;
Адрес: KERNEL.193
Комментарии:
__0040H - селектор защищенного режима, указывающий на сегмент физической памяти размером 0x2ff байт по адресу 0040:0000. Это единственный <прозрачный> селектор под Windows - его значение (в версии 3.1 - значение его внутреннего синонима) равно также 40h.
В любом случае этим селектором надо пользоваться с большой осторожностью - по крайней мере под Windows 3.0 его <поведение> не всегда корректно.
Версии: 3.0, 3.1.
__ROMBIOS
Описание:
WORD __ROMBIOS;
Адрес: KERNEL.173
Комментарии:
Это селектор, указывающий на физический сегмент размером 64K по адресу F000:0000.
Версии: 3.0, 3.1.
__WINFLAGS
Описание:
WORD __WINFLAGS;
Адрес: KERNEL.178
Комментарии:
Значение переменной аналогично возвращаемому функцией GetWinFlags(), кроме некоторых экзотических случаев с ROM Windows.
Версии: 3.0, 3.1.
fTrapping0
Описание:
BOOL fTrapping0;
Адрес: GDI.355.
Комментарии:
Если переменная установлена в TRUE, то системная ошибка <деление на ноль> обрабатывается внутри GDI, если FALSE - то обработка идет по нормальной цепочке.
Версии: 3.0, 3.1.
THHook
Описание:
THOOK FAR *THHook;
Адрес: KERNEL.322
Комментарии:
Переменная содержит адрес системной информационной структуры THHOOK.
Версии: 3.1.
Часть IV.
Функции Windows.
AllocAlias
Описание:
WORD FAR PASCAL AllocAlias(WORD wSel);
Адрес: KERNEL.172
Аргументы:
wSel            Селектор кода в защищенном режиме.
Возвращаемое значение:
Селектор данных, указывающий на тот же сегмент, что и wSel, но доступный и для записи, и для чтения.
Комментарии:
Функция позволяет создавать самомодифицирующийся код в защищенном режиме. Это требует некоторых мер предосторожности. Программа, использующая эту функцию, не должна позволять запускать одновременно несколько своих копий. На все время использования возвращаемого значения сегмент кода wSel должен быть зафиксирован в памяти функцией GlobalPageLock(). После использования селектор должен быть освобожден вызовом FreeSelector().
Версии: 3.0, 3.1
AllocCStoDSAlias
Описание:
WORD FAR PASCAL AllocCStoDSAlias(WORD wSel);
Адрес: KERNEL.170
Комментарии:
Функция полностью аналогична функции AllocAlias().
Версии: 3.0, 3.1 
AllocSelectorArray
Описание:
WORD FAR PASCAL AllocSelectorArray(WORD wNum);
Адрес: KERNEL.206
Аргументы:
wNum    Необходимое количество селекторов.
Возвращаемое значение:
Селектор первого дескриптора из таблицы последовательных дескрипторов сегментов.
Комментарии:
Функция избавляет вас от необходимости многократного вызова функции AllocSelector(). Расстояние между селекторами в таблице определяется документированной константой __AHINCR. Каждый селектор должен быть освобожден отдельным вызовом FreeSelector().
Версии: 3.0, 3.1.
BroadcastMessage
Описание:
void FAR PASCAL BroadcastMessage(HWND hWnd,       WORD wMessage, WORD wParam, DWORD lParam);
Адрес: USER.355.
Аргументы:
hWnd                    Окно, вызывающее функцию.
wMessage                Код сообщения.
wParam, lParam  Дополнительные данные.
Комментарии:
Аналогична вызову PostMessage(0xFFFF,wMessage,wParam,lParam).
Сообщения WM_WININICHANGE и WM_DEVMODECHANGE обрабатываются функцией особым образом. Перед посылкой этих сообщений в lParam вместо адреса строки из Win.ini подставляется дескриптор блока памяти, в котором она находится.
Версии: 3.0, 3.1.
CalcChildScroll
Описание:
void FAR PASCAL CalcChildScroll(HWND hWnd, WORD wScroll);
Адрес: USER.462
Аргументы:
hWnd            Родительское окно MDI.
wScroll         Комбинация флагов SB_HORZ и SB_VERT.
Комментарии:
Инициализирует или убирает полосы прокрутки главного окна приложения MDI, согласуясь с перемещением дочерних окон и изменениями размера материнского окна. wScroll определяет направление (горизонтальное и/или вертикальное) полос, для которых проводится проверка.
Версии: 3.0, 3.1.
CascadeChildWindows
Описание:
void FAR PASCAL CascadeChildWindows(HWND hWnd
#ifdef WIN31
        ,WORD wAct
#endif
);
Адрес: USER.198
Аргументы:
hWnd            Окно, подокна которого должны быть каскадированы.
wAct            Значение MDITITLE_SKIPDISABLED заставляет функцию не перемещать неактивные окна, любое другое - игнорируется.
Комментарии:
Позволяет каскадировать дочерние окна в не-MDI-приложениях, в том числе и для всей рабочей области окна вызовом CascadeChildWindows(GetDesktopWindow(), 0).
Обратите внимание, что количество аргументов функции зависит от версии Windows. Неправильное задание аргументов приводит  к общей ошибке защиты.
Версии: 3.0, 3.1.
ControlPanelInfo
Описание:
void FAR PASCAL ControlPanelInfo(int nType,       WORD wData, LPSTR lpBuffer);
Адрес: USER.273 
Аргументы:
nType                   Команда Панели управления.
wData, lpBuffer Передаваемые или получаемые данные.
Комментарии:
Функция позволяет программам получать или изменять некоторые из параметров, устанавливаемых через Панель управления (Control panel).
В версии Windows 3.1 вместо нее рекомендуется использовать дающую больше возможностей документированную функцию SystemParametersInfo().
Действия функции определяются значениями параметра nType:
1 (CPI_GETBEEP): Если опция <системные звуковые сигналы> неактивна, то lpBuffer устанавливается в NULL, в противном случае - в произвольный ненулевой псевдоуказатель. wData не используется.
2 (CPI_SETBEEP): Ненулевое значение wData включает поддержку звука, ненулевое - отключает. lpBuffer не используется.
3 (CPI_GETMOUSE): lpBuffer при вызове должен указывать на буфер из трех слов (WORD w1,w2,w3), которые устанавливаются функцией в соответствие с одним из семи возможных значений скорости перемещения мыши (0?n?6) следующим образом:
if(n==0) w1=w2=w3=0;
if(n>=1 && n<=3){ w1=13-(3*n); w2=0; w3=1; }
if(n>=4 && n<=6){ w1=4; w2=24-(3*n); w3=2; }
wData не используется.
4 (CPI_SETMOUSE): Скорость мыши устанавливается в соответствие с содержимым буфера, на который указывает lpBuffer, значения в котором надо установить аналогично CPI_GETMOUSE. wData не используется.
5 (CPI_GETBORDER): lpBuffer должен быть адресом слова, в которое будет помещено текущее значение толщины рамок окон в пикселах. wData не используется.
6 (CPI_SETBORDER): wData определяет новую толщину рамок окон в пикселах (от 1 до 50). lpBuffer не используется.
10 (CPI_GETKEYBOARDSPEED): lpBuffer должен быть адресом слова, в которое будет записано текущее значение скорости повтора для клавиатуры. wData не используется.
11 (CPI_SETKEYBOARDSPEED): wData определяет новую скорость  повтора для клавиатуры (от 1 до 32). lpBuffer не используется.
12 (CPI_LANGDRIVER): Загружает DLL поддержки языка, на ASCIIZ-имя которой указывает lpBuffer. wData не используется.
13 (CPI_ICONSPACING): Если lpBuffer не NULL, то функция считает, что он указывает на слово, в которое надо поместить текущее расстояние между иконками в пикселах. В противном случае, из wData берется новое значение для этого расстояния.
Версии: 3.0, 3.1.
CreateSystemTimer
Описание:
WORD CreateSystemTimer(WORD wRate,             FARPROC lpfnCallback);
Адрес: SYSTEM.2
Аргументы:
wRate   Интервал в миллисекундах, с которым должна вызываться функция таймера. Минимальный возможный интервал для IBM-совместимых машин составляет около 55 мс.
lpfnCallback    Дальний указатель на устанавливаемую callback-функцию таймера, которая должна находиться в фиксированном (неперемещаемом и несбрасываемом) сегменте.
Возвращаемое значение:
Дескриптор таймера, который будет использоваться при работе с ним и для его освобождения. Если свободных таймеров больше нет (всего в SYSTEM их восемь), то возвращается 0.
Комментарии:
Функция устанавливает асинхронный таймер, другими словами, его процедура (lpfnCallback) вызывается напрямую, в обход очереди сообщений.
Вызов процедуры блокируется при работе полноэкранного нефонового сеанса DOS.
Процедура таймера вызывается непосредственно из обработчика прерывания 8, поэтому рабочие регистры (в том числе DS) там не определены и для доступа к данным программы вам надо перезагружать DS. Многие функции API Windows (кроме простейших типа MessageBeep() или GetCurrentTask()) не могут быть вызваны из обработчика, однако гарантирована возможность вызова оттуда функции PostMessage().
Лучше всего использовать процедуру для абсолютных задержек через изменение значений volatile-переменных, проверяемых в псевдобесконечных циклах.
Версии: 3.0, 3.1.
Death
Описание:
void FAR PASCAL Death(HDC hDC);
Адрес: GDI.121
Аргументы:
hDC     Контекст устройства для всей рабочей поверхности дисплея.
Комментарии:
Функция отключает графический драйвер и переводит экран в текстовый режим по умолчанию (обычно Mode 3 BIOS).
Версии: 3.0, 3.1.
DeletePathName
Описание:
WORD FAR PASCAL DeletePathName(LPSTR lpPathName);
Адрес: KERNEL.76
Аргументы:
lpPathName      Полный путь с именем файла.
Возвращаемое значение:
1, если файл не найден или его нельзя удалить.
Комментарии:
Удаляет файл, имя которого содержится в lpPathName.
Версии: 3.0, 3.1.
DiagOutput
Описание:
void FAR PASCAL DiagOutput(LPSTR lpMsg);
Адрес: KERNEL .340
Аргументы:
lpMsg   Информационная строка.
Комментарии:
Если Windows были запущены с параметром /B, то строка lpMsg записывается в отладочный файл BOOTLOG.TXT.
Версии: 3.1.
DiagQuery
Описание:
BOOL FAR PASCAL DiagQuery();
Адрес: KERNEL.339
Возвращаемое значение:
TRUE, если Windows были запущены с параметром /B, иначе FALSE.
Версии: 3.1.
DirectedYield
Описание:
void FAR PASCAL DirectedYield(HANDLE);
Адрес: KERNEL.150
Комментарии:
Эта функция документирована в Windows 3.1, однако ей можно пользоваться и в версии 3.0.
Версии: 3.0, 3.1
DirectResAlloc
Описание:
HANDLE FAR PASCAL DirectResAlloc(HANDLE hInstance, WORD wUnknown, WORD wSize);
Адрес: KERNEL.168
Аргументы:
hInstance       Экземпляр, вызывающий функцию.
wUnknown        Назначение неизвестно, должен быть установлен в 0x10.
wSize   Размер необходимого блока.
Возвращаемое значение:
Дескриптор глобального блока памяти, ассоциированного с модулем, экземпляр которого описывает hInstance.
Комментарии:
Созданный функцией блок памяти может быть использован для создания ресурсов <на лету>, путем копирования данных в этот разделяемый блок.
Функция полностью аналогична вызову функции GlobalAlloc(GMEM_DDESHARE, DWORD(wSize)).
Версии: 3.0, 3.1.
DisableDOS
Описание:
void FAR PASCAL DisableDOS();
Адрес: KERNEL.42
Комментарии:
Используется при выходе из Windows. Восстанавливает вектора прерываний, переустановленные Windows, чем делает невозможным обращение к диску, запуск новых программ и другие операции, связанные с обращением к DOS.
Версии: 3.0.
DisableKernel
Описание:
void DisableKernel();
Адрес: KERNEL.125
Комментарии:
Функция полностью аналогична DisableDOS(), но в отличие от нее не имеет симметричной функции восстановления.
Версии: 3.0, 3.1.
DisableOEMLayer
Описание:
void FAR PASCAL DisableOEMLayer();
Адрес: USER.4
Комментарии:
Отключает все драйверы ввода-вывода, таймера и сети и восстанавливает исходный режим экрана, стирая его содержимое. Практически, программа оказывается на уровне DOS, хотя и остается в защищенном режиме.
Версии: 3.0, 3.1.
DisableSystemTimers
Описание:
void FAR PASCAL DisableSystemTimers();
Адрес: SYSTEM.5
Комментарии:
Восстанавливает старый вектор INT 8, что заставляет <остановиться> все системные часы.
Версии: 3.0, 3.1.
DOS3Call
Описание:
void FAR DOS3Call();
Адрес: KERNEL.125
Комментарии:
Функция документирована, но в документации указано, что она может быть вызвана только из ассемблерной процедуры, что вообще говоря неверно.
Версии: 3.0, 3.1.
DoSignal
Описание:
void FAR PASCAL DoSignal();
Адрес: KERNEL.139
Комментарии:
Windows-эквивалент прерывания 1Bh, который непосредственно вызывает обработчик Ctrl-Break окна, имеющего фокус ввода.
Версии: 3.0, 3.1.
DragDetect
Описание:
BOOL FAR PASCAL DragDetect(HWND hWnd,          LPPOINT lpPoint);
Адрес: USER.465
Аргументы:
hWnd    Дескриптор вызывающего окна.
lpPoint Точка, в которой проверяется начало <перетаскивания> (Drag).
Возвращаемое значение:
TRUE, если началось <перетаскивание>, FALSE в противном случае.
Комментарии:
Функция может быть вызвана из обработчика WM_LBUTTONDOWN для определения начала перемещения объекта из точки.
Версии: 3.0, 3.1.
DragObject
Описание:
DWORD FAR PASCAL DragObject(HWND hwndScope,       HWND hwndObj, WORD wType, WORD wOfstruct,     PSTR szList, HANDLE hDragCursor);
Адрес: USER.464
Аргументы:
hwndScope       Окно, в рамках которого возможно перемещение объекта. Для снятия всех ограничений это должен быть результат GetDesktopWindow().
hwndObj Окно, из которого производится перемещение.
wType   Тип перемещаемого объекта (см. поле wFlags структуры DRAGINFO).
hOfstruct       Дескриптор глобальной структуры OFSTRUCT.
szList  Список имен перемещаемых объектов, разделенных пробелами.
hDragCursor     Дескриптор курсора или иконки, служащей курсором при перемещении. Любая иконка автоматически преобразуется в черно-белую.
Возвращаемое значение:
Для версии 3.0: 1, если перемещение прошло успешно; 0, если файл не принят клиентом.
Для версии 3.1: 0x544e5250L, если объект принят менеджером печати, 0x454c4946L, если объект принят другой программой; 1, если объект не принят клиентом.
Комментарии:
Функция полностью реализует серверную часть протокола Drag & Drop. Обычно она вызывается из обработчика WM_LBUTTONDOWN, после того как начало <перетаскивания> определено функцией DragDetect(). Функция берет на себя посылку нужных сообщений соответствующим окнам и контроль курсора во время перемещения.
Надо отметить, что File Manager при работе в качестве сервера Drag&Drop помещает в szList имена файлов (но не каталогов), не указывая полного пути к ним. Клиенты должны для получения имени каталога, из которого перемещаются файлы, использовать функцию GetWindowText() для окна сервера, дескриптор которого передается в структуре DRAGINFO, либо (для Windows 3.1) использовать документированную функцию DragQueryFile(). Если серверу необходимо сохранить совместимость с File Manager, он должен использовать эти же соглашения и форматы заголовков.
Версии: 3.0, 3.1.
DumpIcon
Описание:
DWORD FAR PASCAL DumpIcon(CURSORICONINFO FAR * lpInfo, WORD FAR * lpLen, LPSTR FAR * lpXORBits, LPSTR FAR * lpANDBits);
Адрес: USER.459
Аргументы:
lpInfo  Указатель на информационную структуру для иконки, дамп которой нужно получить.
lpLen   Указатель на слово, содержащее длину структуры CURSORICONINFO.
lpXORBits       Адрес двойного слова, в которое функция записывает указатель на битовую маску XOR иконки.
lpANDBits       Адрес двойного слова, в которое функция записывает указатель на битовую маску AND иконки.
Возвращаемое значение:
0 в случае неуспеха, иначе в младшем слове - размер в байтах одной битовой плоскости, в старшем - размер в байтах всей карты.
Комментарии:
Функция дает возможность получить дамп иконки (в том числе и курсора), информация о которой содержится в lpInfo.
Версии: 3.0,3.1.
EnableDOS
Описание:
void FAR PASCAL EnableDOS();
Адрес: KERNEL.41
Комментарии:
Функция устанавливает (или восстанавливает, аннулируя действие DisableDOS()) вектора некоторых прерываний на внутренние обработчики Windows, что, в частности, позволяет Windows-программам обращение через DOS к диску и запуск новых процессов.
Версии: 3.0.
EnableKernel
Описание:
void FAR PASCAL EnableKernel();
Адрес:KERNEL.124 
Комментарии:
Функция полностью аналогична EnableDOS().
Версии: 3.0.
EnableOEMLayer
Описание:
void FAR PASCAL EnableOEMLayer();
Адрес: USER.3
Комментарии:
Восстанавливает все драйверы и менеджер сообщений, замороженные функцией DisableOEMLayer(), а также восстанавливает стандартный графический режим и перерисовывает всю рабочую поверхность.
Версии: 3.0, 3.1.
EnableSystemTimers
Описание:
void EnableSystemTimers();
Адрес: SYSTEM.4
Комментарии:
Устанавливает на внутренний обработчик Windows вектор прерывания 8, чем запускает системные часы Windows и все связанные с ними логические таймеры.
Версии: 3.0, 3.1.
EndMenu
Описание:
void FAR PASCAL EndMenu();
Адрес: USER.187
Комментарии:
Если в момент вызова функции было активно меню одного из окон, то это меню принудительно <закрывается>, при этом сообщения WM_COMMAND не посылается.
Версии: 3.0, 3.1.
ExcludeVisRect
Описание:
int FAR PASCAL ExcludeVisRect(HDC hDC,LPRECT lpRect);
Адрес: GDI.73.
Аргументы:
hDC     Рабочий контекст устройства.
lpRect  Исключаемый прямоугольник.
Возвращаемое значение:
Тип полученной области.
Комментарии:
Исключает из видимой области (зоны, жестко ограничивающей возможность вывода на DC) прямоугольник lpRect путем непосредственного изменения поля hVisRgn соответствующей структуры DC.
Версии: 3.0, 3.1.
ExitKernel
Описание:
void FAR PASCAL ExitKernel(WORD wAction,          WORD wRetCode);
Адрес: KERNEL.2
Аргументы:
wAction Определяет действия, выполняемые функцией.
wRetCode        Код возврата из Windows.
Комментарии:
Функция используется для немедленного безусловного выхода из Windows и (возможно) их перезапуска.
Если wAction равно нулю, то происходит выход в DOS со значением возврата wRetCode; при значении 0x42 происходит перезапуск Windows, 0x43 - перезапуск всей машины.
Версии: 3.0, 3.1.
FarGetOwner
Описание:
WORD FAR PASCAL FarGetOwner(HANDLE hMem);
Адрес: KERNEL.404
Аргументы:
hMem    Дескриптор глобального блока памяти.
Возвращаемое значение:
Если блок разделяемый - дескриптор модуля владельца, иначе - его PDB.
Комментарии:
Функция позволяет определить, какой процесс является владельцем данного блока глобальной памяти.
Имя этой функции не экспортируется, подключать ее надо только по адресу в модуле.
Версии: 3.1.
FarSetOwner
Описание:
void FAR PASCAL FarSetOwner(HANDLE hMem,          WORD wOwnerPDB);
Адрес: KERNEL.403
Аргументы:
hMem    Дескриптор глобального блока памяти.
wOwnerPDB       PDB нового владельца блока.
Комментарии:
Функция позволяет изменить владельца глобального блока памяти. Обратите внимание, что если этот блок явно не освобожден, то он освобождается только после завершения как исходного, так и нового процесса-владельца.
Имя этой функции не экспортируется, подключать ее надо только по адресу в модуле.
Версии: 3.1.
FastWindowFrame
Описание:
BOOL FAR PASCAL FastWindowFrame(HDC hDC,        LPRECT lpRect, int xWidth, int yWidth,       DWORD dwROP);
Адрес: GDI.400
Аргументы:
hDC     Рабочий контекст устройства.
lpRect  Прямоугольник, ограничиваемый рамкой на DC.
xWidth  Толщина в пикселах вертикальных линий рамки.
yWidth  Толщина в пикселах горизонтальных линий рамки.
dwROP   Код растровой отрисовки (одна из констант, используемых в качестве последнего аргумента функций BitBlt() и StretchBlt()).
Возвращаемое значение:
FALSE, если рамка не может быть нарисована, иначе TRUE.
Комментарии:
Функция позволяет быстро отрисовывать на растровых устройствах рамки с толщиной больше одного пиксела. Windows использует эту функцию, когда рисует рамки при передвижении или изменении размеров окон.
Версии: 3.0, 3.1.
FileCdr
Описание:
DWORD FAR PASCAL FileCdr(FARPROC lpfnNotify);
Адрес: KERNEL.130
Аргументы:
lpfnNotify      Функция, которая будет вызываться при любом изменении в файловой системе.
Возвращаемое значение:
Если установка callback-функции прошла успешно, то младшее слово возвращаемого значения ненулевое.
В версии 3.1, если в качестве аргумента передано -1L, возвращается адрес предыдущего обработчика или NULL, если такового не оказалось.
Комментарии:
Эта функция используется File Manager для установки функции-наблюдателя, обновляющей информацию о файловой системе в окнах программы.
Установленная callback-функция вызывается из обработчика прерывания 21h после обработки запросов, связанных с манипуляциями с файлами или каталогами.
Функция позволяет изменять уже установленный обработчик только той же задаче, которая изначально его установила, сохраняя ее hTask. Таким образом, если File Manager уже активен, функция не даст вам возможности установить новый обработчик изменений и вернет в младшем слове DWORD возврата ноль.
Однако, это препятствие достаточно легко обходимо: как hTask установившей обработчик задачи, так и адрес самого обработчика хранятся соответственно в полях hTaskFileCdr и lpfnCdrNotify структуры THHOOK, которая полностью доступна для записи. Это позволяет не только устанавливать свою функцию-наблюдателя вне зависимости от текущего состояния системы, но и включать свои обработчики в общую цепочку, сохраняя старый адрес lpfnCdrNotify и передавая на него управление после завершения обработки текущих изменений.
Прототип функции-обработчика должен быть следующим:
void CALLBACK CdrNotify(WORD wAction, LPSTR lpszPath)
lpszPath - полный путь к файлу или каталогу, с которым происходят изменения.
wAction - код конкретного действия, на которое отвечает функция. Этот код -  содержимое регистра AX при вызове одной из следующих функций DOS:
0x3c    Создание файла.
0x39    Создание каталога.
0x3a    Удаление каталога.
0x41    Удаление файла.
0x43    Получение/установка атрибутов файла.
0x56    Переименование файла/каталога.
0x57    Установка даты/времени файла.
0x5a    Создать временный файл.
0x5b    Создать новый файл.
0x6c    Расширенное открытие файла.
Версии: 3.0, 3.1.
FillWindow
Описание:
void FAR PASCAL FillWindow(HWND hwndParent,       HWND hWnd, HDC hDC, HANDLE hBrush);
Адрес: USER.324
Аргументы:
hwndParent      Материнское окно, либо NULL.
hWnd    Закрашиваемое окно.
hDC     Рабочий контекст окна.
hBrush  Дескриптор кисти для закрашивания, или одна из констант CTLCOLOR_...
Комментарии:
Функция закрашивает окно hWnd кистью hBrush, либо, если hwndParent не NULL (и только в этом случае),- стандартными цветами элемента, специфицированного константой CTLCOLOR_...
Версии: 3.0, 3.1.
FlushCachedFileHandle
Описание:
void FAR PASCAL FlushCachedFileHandle(                  HANDLE hModule);
Адрес: KERNEL.319
Аргументы:
hModule Модуль, имеющий открытые файлы.
Комментарии:
Функция закрывает все файлы, открытые в hModule и находящиеся во внутреннем кэше KERNEL, и удаляет ссылки на них.
Версии: 3.0, 3.1.
GdiSeeGdiDo
Описание:
DWORD FAR PASCAL GdiSeeGdiDo(WORD wAction,              WORD wParam1, WORD reserved, WORD wParam2);
Адрес: GDI.452
Аргументы:
wAction         Номер запроса к GDI.
wParam1, wParam2                Данные, передаваемые с запросом.
Возвращаемое значение:
Если значение wAction не поддерживается функцией, то возвращается -1, иначе значение зависит от конкретного запроса.
Комментарии:
Функция дает возможность работы с локальным хипом GDI. Допустимы следующие запросы:
1 (GSGD_LOCALALLOC): GDI выделяет память в своем локальном хипе  вызовом LocalAlloc(wParam1, wParam2) и возвращает дескриптор блока в младшем слове.
2 (GSGD_LOCALFREE): GDI освобождает блок памяти в своем локальном хипе вызовом LocalFree(wParam1) и возвращает 0 в случае успеха.
3 (GSGD_LOCALCOMPACT): Функция создает непрерывный свободный блок в локальном хипе GDI, размеры которого передаются в wParam2 и возвращает максимально возможный размер такого блока.
0x103 (GSGD_LOCALHEAP): GDI возвращает в младшем слове дескриптор своего локального хипа, который может быть использован для доступа к внутренним структурам GDI и выделенным запросом GSGD_LOCALALLOC этой функции блокам памяти.
Версии: 3.1.
Get80x87SaveSize
Описание:
WORD Get80x87SaveSize();
Адрес: SYSTEM.7
Возвращаемое значение:
Требуемый размер буфера для сохранения состояния сопроцессора или 0 в случае его отсутствия.
Версии: 3.0, 3.1.
GetAppCompatFlags
Описание:
DWORD FAR PASCAL GetAppCompatFlags(HANDLE hTask);
Адрес: KERNEL.354
Аргументы:
hTask   Задача, исполняемый файл которой был скомпилирован для Windows 3.0.
Возвращаемое значение:
<Флаги совместимости> для задачи, либо 0, если флаги не определены либо если задача предназначена для версии 3.1.
Комментарии:
<Флаги совместимости> введены в Windows 3.1 для устранения конфликтов с приложениями, написанными для предыдущей версии системы. Их значения устанавливаются в секции [Compatibility] файла Win.ini; они описаны в некоторых изданиях, комментирующих содержимое этого файла.
Версии: 3.1.
GetClipRgn
Описание:
HRGN FAR PASCAL GetClipRgn(HDC hDC);
Адрес: GDI.173
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Текущая область отсечения на DC.
Версии: 3.0, 3.1.
GetCodeHandle
Описание:
DWORD FAR PASCAL GetCodeHandle(LPVOID lpProc);
Адрес: KERNEL.93
Аргументы:
lpProc  Вопреки сказанному в документации это может быть не только дальний указатель на экземпляр процедуры, но и двойное слово, созданное операцией MK_FP(hModule,wSeg), где wSeg - логический номер сегмента в модуле hModule.
Возвращаемое значение:
Младшее слово содержит дескриптор соответствующего сегмента (это WORD возврата, описанный в документации), старшее же содержит селектор этого сегмента.
Комментарии:
Если логический сегмент, переданный в параметре не найден в памяти, то он подгружается с диска.
Версии: 3.0, 3.1.
GetControlBrush
Описание:
HBRUSH FAR PASCAL GetControlBrush(HWND hWnd, HDC hDC, WORD wType);
Адрес: USER.326
Аргументы:
hWnd    Окно-владелец управляющего элемента.
hDC     Рабочий контекст устройства.
wType   Тип управляющего элемента - одна из констант CTLCOLOR_...
Возвращаемое значение:
Кисть, используемая при отрисовке соответствующего типа управляющих элементов.
Версии: 3.0, 3.1.
GetCurLogFont
Описание:
HFONT FAR PASCAL GetCurLogFont(HDC hDC);
Адрес: GDI.411
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Текущий выбранный в контексте шрифт.
Версии: 3.0, 3.1.
GetCurrentPDB
Описание:
DWORD FAR PASCAL GetCurrentPDB();
Адрес: KERNEL.37
Возвращаемое значение:
Вопреки документации, функция возвращает не WORD, а DWORD, младшее слово которого содержит значение, описанное в документации, а старшее - собственную PDB текущей задачи.
Версии: 3.0, 3.1.
GetCurrentTask
Описание:
DWORD FAR PASCAL GetCurrentTask();
Адрес: KERNEL.36
Возвращаемое значение:
Вопреки документации, функция возвращает не WORD, а DWORD, младшее слово которого содержит значение, описанное в документации, а старшее - дескриптор первой структуры TDB в общем списке.
Версии: 3.0, 3.1.
GetDCState
Описание:
HANDLE FAR PASCAL GetDCState(HDC hDC);
Адрес: GDI.179
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Дескриптор структуры DCSAVE, в которой сохраняется текущее состояние DC.
Комментарии:
Функция вообще говоря аналогична SaveDC(), но отличается от нее тем, что не включает структуру DCSAVE в общий <стек> и не изменяет поле wDCSaveLevel соответствующей структуры DC. Восстановить состояние контекста в этом случае можно вызовом SetDCState(), используя значение, возвращаемое этой функцией.
Версии: 3.0, 3.1.
GetExePtr
Описание:
WORD FAR PASCAL GetExePtr(HANDLE h);
Адрес: KERNEL.133
Аргументы:
h       Дескриптор блока глобальной памяти или экземпляра задачи, либо селектор.
Возвращаемое значение:
Дескриптор модуля, соответствующего h.
Комментарии:
Если как аргумент передается дескриптор модуля, то он без изменений возвращается функцией.
Большинство функций KERNEL, требующих дескриптор модуля в качестве аргумента, преобразуют его, используя алгоритм этой функции, и таким образом могут принимать также и дескриптор экземпляра (HINSTANCE).
Версии: 3.0, 3.1.
GetExeVersion
Описание:
WORD FAR PASCAL GetExeVersion();
Адрес: KERNEL.105
Возвращаемое значение:
Версия Windows, для которой скомпилирован исполняемый файл текущей задачи. Формат возврата функции такой же, как и у GetVersion().
Версии: 3.0, 3.1.
GetExpWinVer
Описание:
WORD FAR PASCAL GetExpWinVer(HANDLE hModule);
Адрес: KERNEL.167
Аргументы:
hModule Модуль, версия которого выясняется.
Возвращаемое значение:
Минимальная версия Windows, под которой может исполняться модуль, причем версия находится в старшем байте возвращаемого значения, а модификация - в младшем (например, для Windows 3.1 - 0x30a).
Версии: 3.0, 3.1.
GetFilePortName
Описание:
WORD FAR PASCAL GetFilePortName(LPOFSTRUCT lpOfstr);
Адрес: USER.343
Аргументы:
lpOfstr Указатель на структуру OFSTRUCT, куда функция запишет свой результат.
Возвращаемое значение:
-3, если пользователь отменил запрос (кнопкой  или Esc); 1 в противном случае.
Комментарии:
Функция выводит на экран стандартное диалоговое окно <печать в файл> и ждет ввода пользователя. Если файл, назначенный для вывода уже существует, то функция предупреждает об этом пользователя, выводя соответствующее окно сообщения.
Если запрос не отменен, то выбор пользователя возвращается в структуру, на которую указывает lpOfstruct.
Версии: 3.0, 3.1.
GetFreeMemInfo
Описание:
DWORD FAR PASCAL GetFreeMemInfo();
Адрес: KERNEL.316
Возвращаемое значение:
В младшем слове - количество незаблокированных четырехкилобайтных страниц в системе, в старшем - количество свободных страниц.
Версии: 3.1, только расширенный (386) режим.
GetHeapSpaces
Описание:
DWORD FAR PASCAL GetHeapSpaces(HANDLE hInst);
Адрес: KERNEL.138
Аргументы:
hInst   Дескриптор модуля или экземпляра, информацию о ресурсах которого должна вернуть функция.
Возвращаемое значение:
В старшем слове - общий размер в байтах локального хипа hInst, в младшем - размер свободной области хипа.
Комментарии:
Функция не учитывает некоторых деталей распределения ресурсов в Windows 3.1 и поэтому в этой версии для определения общего количества свободных ресурсов системы (процент свободного пространства в локальных хипах GDI и USER) лучше использовать документированную функцию GetFreeSystemResources().
Версии: 3.0, 3.1.
GetIconId
Описание:
WORD FAR PASCAL GetIconId(HANDLE hResource,      DWORD dwResType);
Адрес: USER.455
Аргументы:
hResource       Дескриптор курсора или иконки.
dwResType       Уточнение типа ресурса: 1 для курсора и 3 для иконки.
Возвращаемое значение:
Идентификатор ресурса, соответствующего hResource, в файле.
Версии: 3.1.
GetInternalWindowPos
Описание:
WORD FAR PASCAL GetInternalWindowPos(HWND hWnd, LPRECT lpRectWnd, LPPOINT lpPointIcon);
Адрес: USER.460
Аргументы:
hWnd    Окно, расположение которого выясняется.
lpRectWnd       Указатель на структуру RECT, в которую функция записывает текущее расположение окна.
lpPointIcon     Указатель на структуру POINT, в которую возвращается положение окна в минимизированном виде.
Возвращаемое значение:
Текущее состояние окна: одна из документированных констант SW_...
Комментарии:
В версии 3.1 появилась соответствующая документированная функция GetWindowPlacement(), однако она оказалась несколько громоздкой, и к тому же не совсем корректно работающей в некоторых ситуациях, так что ее использование вместо данной функции не всегда оправдано.  Надо отметить, что данная функция присутствует (и по-прежнему не документирована) в Windows NT.
Версии: 3.0, 3.1.
GetLpErrMode
Описание:
LPBYTE GetLpErrMode();
Адрес: KERNEL.99
Возвращаемое значение:
Адрес внутренней переменной KERNEL, которая устанавливается в 1 при обработке критической ошибки по int 24h.
Версии: 3.0, 3.1.
GetModuleHandle
Описание:
DWORD FAR PASCAL GetModuleHandle(LPVOID lpModName);
Адрес: KERNEL.47
Аргументы:
lpModName       Либо указатель на имя модуля, либо двойное слово, созданное операцией MK_FP(0,h), что делает вызов функции аналогичным вызову GetExePtr(h).
Возвращаемое значение:
Вопреки документации, функция возвращает не WORD, а DWORD, младшее слово которого содержит значение, описанное в документации, а старшее - дескриптор первого модуля в системном списке (обычно это KERNEL).
Версии: 3.0, 3.1.
GetMouseEventProc
Описание:
FARPROC FAR PASCAL GetMouseEventProc();
Адрес: USER.337
Возвращаемое значение:
Адрес асинхронной процедуры, отвечающей на перемещения и нажатия кнопок мыши.
Комментарии:
Процедуру можно использовать для программной имитации действий мыши без непосредственной посылки сообщений.
Информация о манипуляциях с мышью передается функции через регистры: AX содержит комбинацию флагов ME_..., BX - горизонтальное и CX - вертикальное перемещение мыши с момента последнего вызова функции системой. BX и CX определены, если в AX установлен флаг ME_MOVE. DX должен содержать значение 2.
Версии: 3.0, 3.1.
GetNextQueueWindow
Описание:
HANDLE FAR PASCAL GetNextQueueWindow(HWND hWnd,   BOOL bToTop);
Адрес: USER.274
Аргументы:
hWnd    Окно, от которого ведется отсчет.
bToTop  TRUE, если  требуется ближайшее сверху окно, FALSE - ближайшее снизу.
Возвращаемое значение:
Дескриптор одного из двух соседних с hWnd в Z-иерархии окон.
Версии: 3.0.
GetPhysicalFontHandle
Описание:
HANDLE FAR PASCAL GetPhysicalFontHandle(HDC hDC);
Адрес: GDI.352
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Дескриптор модуля, содержащего текущий выбранный в контексте шрифт.
Версии: 3.0, 3.1.
GetQueueStatus
Описание:
WORD FAR PASCAL GetQueueStatus();
Адрес: USER.334
Возвращаемое значение:
Текущее состояние очереди сообщений. Значение берется из поля wQueueState структуры TASK_QUEUE.
Версии: 3.0, 3.1.
GetRelAbs
Описание:
int FAR PASCAL GetRelAbs(HDC hDC);
Адрес: GDI.86
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
1, если используются абсолютные координаты; 2 - относительные; 0 - если hDC равен NULL.
Комментарии:
Функция определяет текущее поведение функций LineTo() и Polyline(): абсолютные координаты отсчитываются от начала координат контекста, относительные - от текущей позиции пера.
Версии: 3.0, 3.1.
GetSelectorBase
Описание:
DWORD FAR PASCAL GetSelectorBase(WORD);
Адрес: KERNEL.196
Комментарии:
Функция документирована только в Windows 3.1, но она существует и может быть вызвана также и в версии 3.0.
Версии: 3.0, 3.1.
GetSelectorLimit
Описание:
DWORD FAR PASCAL GetSelectorLimit(WORD);
Адрес: KERNEL.188
Комментарии:
Функция документирована только в Windows 3.1, но она существует и может быть вызвана также и в версии 3.0.
Версии: 3.0, 3.1.
GetSetKernelDOSProc
Описание:
FARPROC FAR PASCAL GetSetKernelDOSProc(        FARPROC lpfnDOSProc);
Адрес: KERNEL.311
Аргументы:

lpfnDOSProc     Новый адрес для внутреннего обработчика int 21h KERNEL.
Возвращаемое значение:
Старый адрес обработчика.
Комментарии:
Функция позволяет перехватывать обращения к функциям DOS3Call() и NoHookDosCall(), которые непосредственно не инициируют прерываний.
Версии: 3.1.
GetTaskDS
Описание:
WORD FAR PASCAL GetTaskDS();
Адрес: KERNEL.155
Возвращаемое значение:
Дескриптор сегмента данных по умолчанию для текущей программы.
Комментарии:
Эту функцию имеет смысл использовать только в драйверах и обработчиках прерываний или асинхронных событий (таких, как процедура, устанавливаемая функцией CreateSystemTimer()): в обычных программах этот дескриптор содержится в параметре, передаваемом функции WinMain() под именем hInstance.
Версии: 3.0, 3.1.
GetTaskQueue
Описание:
WORD FAR PASCAL GetTaskQueue(HANDLE hTask);
Адрес: KERNEL.35
Аргументы:
hTask   Дескриптор задачи, 0 для текущей.
Возвращаемое значение:
Дескриптор структуры TASK_QUEUE указанной задачи.
Версии: 3.0, 3.1.
GetTaskQueueDS
Описание:
void FAR PASCAL GetTaskQueueDS();
Адрес: KERNEL.118
Комментарии:
Функция помещает селектор структуры TASK_QUEUE, соответствующей текущей задаче, в регистр DS. После использования значение регистра должно быть восстановлено.
Версии: 3.0, 3.1.
GetTaskQueueES
Описание:
void FAR PASCAL GetTaskQueueES();
Адрес: KERNEL.119
Комментарии:
Функция аналогична GetTaskQueueDS(), но в отличие от нее помещает результат, как видно из названия, не в DS, а в ES.
Версии: 3.0, 3.1.
GetTimerResolution
Описание:
DWORD FAR PASCAL GetTimerResolution();
Адрес: USER.14
Возвращаемое значение:
Согласно документации - разрешение таймера (в микросекундах между прерываниями).
Комментарии:
Функция документирована в Windows 3.1, но может вызваться и в версии 3.0. Для IBM-совместимых машин функция возвращает 1000, то есть одно прерывание в миллисекунду, что мягко говоря не слишком близко к истине.
Версии: 3.0, 3.1.
GlobalFreeAll
Описание:
void FAR PASCAL GlobalFreeAll(WORD wPDB);
Адрес: KERNEL.26
Аргументы:
wPDB    PDB задачи (0 - текущий).
Комментарии:
Функция освобождает всю память (кроме разделяемых блоков), выделенную задачей в глобальном хипе.
Версии: 3.0, 3.1.
GlobalHandleNoRIP
Описание:
DWORD FAR PASCAL GlobalHandleNoRIP(WORD wMem);
Адрес: KERNEL.159
Аргументы:
wMem    Селектор глобальной памяти.
Возвращаемое значение:
Соответствующий wMem дескриптор.
Комментарии:
Функция отличается от GlobalHandle() тем, что в случае передачи некорректного параметра не завершает вызвавшую программу, инициируя общую системную ошибку, а просто возвращает ноль.
Версии: 3.0, 3.1.
GlobalMasterHandle
Описание:
DWORD FAR PASCAL GlobalMasterHandle();
Адрес: KERNEL.28
Возвращаемое значение:
В старшем слове - селектор структуры BURGERMASTER, в младшем - ее дескриптор.
Версии: 3.0, 3.1.
IconSize
Описание:
DWORD FAR PASCAL IconSize();
Адрес: USER.86
Возвращаемое значение:
В старшем слове - ширина и в младшем - высота иконок в пикселах на текущем экране.
Версии: 3.0, 3.1.
InitAtomTable
Описание:
WORD FAR PASCAL InitAtomTable(int nSize);
Комментарии:
Вопреки документации, функция возвращает не просто BOOL, а WORD, который содержит короткий указатель на созданную структуру ATOMTABLE либо 0 в случае неудачи.
Версии: 3.0, 3.1.
InquireVisRgn
Описание:
HRGN FAR PASCAL InquireVisRgn(HDC hDC);
Адрес: GDI.131
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Текущая видимая область контекста.
Версии: 3.0, 3.1.
IntersectVisRect
Описание:
int FAR PASCAL IntersectVisRect(HDC hDC, int nLeft, int nTop, int nRight, int nBottom);
Адрес: GDI.98
Аргументы:
hDC     Рабочий контекст устройства.
nLeft,nTop      Левый верхний угол прямоугольника.
nRight, nBottom Правый нижний угол прямоугольника.
Возвращаемое значение:
Тип полученной области.
Комментарии:
Функция создает новую видимую область из пересечения старой области и заданного прямоугольника.
Версии: 3.0.
IsBadReadPtr
Описание:
BOOL FAR PASCAL IsBadReadPtr(BYTE FAR * lpBuf,    WORD wLen);
Адрес: KERNEL.334
Аргументы:
lpBuf   Адрес проверяемого буфера.
wLen    Длина буфера.
Возвращаемое значение:
FALSE, если весь буфер доступен для чтения.
Версии: 3.1.
IsBadStringPtr
Описание:
BOOL FAR PASCAL IsBadStringPtr(LPSTR lpszBuffer);
Адрес: KERNEL.337
Аргументы:
lpszBuf Адрес проверяемой строки.
Возвращаемое значение:
FALSE, если lpszBuf является полностью доступной для чтения ASCIIZ-строкой. Длина строки не может превышать 64 килобайта.
Версии: 3.1.
IsBadWritePtr
Описание:
BOOL FAR PASCAL IsBadWritePtr(BYTE FAR * lpBuf,    WORD wLen);
Адрес: KERNEL.334
Аргументы:
lpBuf   Адрес проверяемого буфера.
wLen    Длина буфера.
Возвращаемое значение:
FALSE, если весь буфер доступен для записи.
Версии: 3.1.
IsDCCurrentPalette
Описание:
BOOL FAR PASCAL IsDCCurrentPalette(HDC hDC);
Адрес: GDI.412
Аргументы:
hDC     Проверяемый контекст устройства.
Возвращаемое значение:
TRUE, если hDC использует ту же палитру по умолчанию, что и рабочая поверхность (фон) экрана.
Версии: 3.0, 3.1.
IsDCDirty
Описание:
BOOL FAR PASCAL IsDCDirty(HDC hDC, LPRECT lpInvRect);
Адрес: GDI.169
Аргументы:
hDC     Проверяемый контекст устройства.
lpInvRect       Указатель на структуру RECT, в которую функция в случае необходимости помещает координаты прямоугольника на hDC, требующий перерисовки.
Возвращаемое значение:
Функция предполагает, что вызвавшая ее функция возьмет на себя заботу о перерисовке hDC и уничтожает информацию о необходимости перерисовки.
Версии: 3.0, 3.1.
IsGDIObject
Описание:
BOOL FAR PASCAL IsGDIObject(HANDLE hObject);
Адрес: GDI.462
Аргументы:
hObject Дескриптор проверяемого объекта.
Возвращаемое значение:
TRUE, если hObject указывает на один из объектов, содержащихся в локальном хипе GDI.
Версии: 3.1.
IsROMFile
Описание:
BOOL FAR PASCAL IsROMFile(HANDLE hFile);
Адрес: KERNEL.326
Аргументы:
hFile   Дескриптор проверяемого файла.
Возвращаемое значение:
TRUE, если hFile находится в ROM-памяти.
Комментарии:
Функция работает только в ROM Windows, в обычной системе она всегда возвращает FALSE.
Версии: 3.1.
IsROMModule
Описание:
BOOL FAR PASCAL IsROMModule(HANDLE hModule);
Адрес: KERNEL.323.
Аргументы:
hModule Дескриптор проверяемого модуля.
Комментарии:
Функция аналогична IsROMFile().
Версии: 3.1.
IsSharedSelector
Описание:
BOOL FAR PASCAL IsSharedSelector(WORD wSel);
Адрес: KERNEL.345
Аргументы:
wSel    Проверяемый селектор.
Возвращаемое значение:
TRUE, если селектор принадлежит DLL.
Версии: 3.0, 3.1.
IsTaskLocked
Описание:
WORD FAR PASCAL IsTaskLocked();
Адрес: KERNEL.122
Возвращаемое значение:
Дескриптор заблокированной в системе задачи, либо 0, если такой не существует.
Комментарии:
Функция определяет, является ли текущая задача единственной исполняющейся в системе (заблокированной). Блокировка может производиться функциями LockCurrentTask() и LockInput().
Версии: 3.0, 3.1.
IsUserIdle
Описание:
BOOL FAR PASCAL IsUserIdle();
Адрес: USER.59
Возвращаемое значение:
TRUE, когда весь ввод с клавиатуры и мыши к моменту вызова функции уже обработан (пользователь неактивен).
Комментарии:
IsUserIdle() - одна из тех функций, которые могут вызываться из обработчика CreateSystemTimer().
Версии: 3.0, 3.1.
IsValidMetaFile
Описание:
BOOL FAR PASCAL IsValidMetaFile(HANDLE hMetaFile);
Адрес: GDI.410
Аргументы:
hMetaFile       Дескриптор проверяемого метафайла.
Возвращаемое значение:
TRUE, если аргумент - действительный дескриптор метафайла.
Версии: 3.0, 3.1.
IsWinOldAppTask
Описание:
BOOL IsWinOldAppTask(HANDLE hTask);
Адрес: KERNEL.158
Аргументы:
hTask   Дескриптор проверяемой задачи.
Возвращаемое значение:
TRUE, если hTask - дескриптор задачи окна DOS.
Версии: 3.0, 3.1.
Keybd_Event
Описание:
void Keybd_Event();
Адрес: USER.289
Комментарии:
Эта функция непосредственно вызывается обработчиком клавиатурного прерывания 9 и занимается отправкой соответствующих сообщений.
Информация о событиях передается через регистры: AX - виртуальный код клавиши, BX - код зоны OEM, BH для расширенного кода клавиши.
Функция может быть использована для физической имитации ввода с клавиатуры.
Версии: 3.1.
KillSystemTimer
Описание:
WORD KillSystemTimer(WORD wTimer);
Адрес: SYSTEM.3
Аргументы:
wTimer  Дескриптор таймера. Это значение возвращается функцией CreateSystemTimer().
Возвращаемое значение:
0 в случае успеха, иначе wTimer.
Комментарии:
Функция освобождает соответствующий системный таймер.
В версии Windows 3.0 существует функция USER, экспортируемая под тем же именем. В версии 3.1 она переименована в BEAR182().
Версии: 3.0, 3.1.
KillSystemTimer
Описание:
BOOL FAR PASCAL KillSystemTimer(HWND hWindow,     WORD wTimer);
Адрес: USER.182
Аргументы:
hWindow Окно-владелец таймера.
wTimer  Дескриптор таймера.
Возвращаемое значение:
TRUE в случае успеха.
Комментарии:
Функция уничтожает таймер, созданный функцией SetSystemTimer().
В версии 3.1 функция экспортируется под именем Bear182(), поэтому рекомендуется подключать ее не указывая имени.
Версии: 3.0, 3.1.
LoadCursorIconHandler
Описание:
HANDLE FAR PASCAL LoadCursorIconHandler(HANDLE hMem, HANDLE hInstance, WORD wResId);
Адрес: USER.336
Аргументы:
hMem    Блок глобальной памяти для ресурса, или NULL.
hInstance       Экземпляр программы, в исполняемом файле которой содержится ресурс.
wResId  Идентификатор ресурса в файле.
Возвращаемое значение:
Дескриптор загруженной иконки или курсора.
Комментарии:
Функция загружает из файла, соответствующего hInstance, шестнадцатицветную битовую карту <старого формата>, которая загружается в hMem и, если тип ресурса - курсор, преобразуется в монохромную. Если hMem установлен в NULL, то функция сама выделяет нужный блок; если размер выделенного блока недостаточен, то функция выделяет дополнительную память для hMem.
Версии: 3.0, 3.1.
LoadDIBCursorHandler
Описание:
HANDLE FAR PASCAL LoadDIBCursorHandler(HANDLE hMem, HANDLE hInstance, WORD wResId);
Адрес: USER.356
Комментарии:
Функция отличается от LoadCursorIconHandler() только тем, что работает с форматом DIB и не загружает иконки.
Версии: 3.0, 3.1.
LoadDIBIconHandler
Описание:
HANDLE FAR PASCAL LoadDIBIconHandler(HANDLE hMem, HANDLE hInstance, WORD wResId);
Адрес: USER.357
Комментарии:
Функция аналогична LoadDIBCursorHandler(), но работает с иконками.
Версии: 3.0, 3.1.
LoadIconHandler
Описание:
HICON FAR PASCAL LoadIconHandler(HANDLE hResource, BOOL bDIB);
Адрес: USER.456
Аргументы:
hResource       Ресурс, содержащий битовую карту.
bDIB    TRUE, если битовая карта представлена в формате DIB.
Возвращаемое значение:
Дескриптор иконки, полученной преобразованием hResource.
Комментарии:
Функция позволяет преобразовывать битовые карты (в том числе задающие изображение иконок в любом формате в стандартную 16-цветную иконку.
Версии: 3.0, 3.1.
LocalCountFree
Описание:
WORD FAR PASCAL LocalCountFree();
Адрес: KERNEL.161
Возвращаемое значение:
Размер в байтах свободной области в текущем локальном хипе.
Комментарии:
Текущим считается хип, селектор сегмента данных которого загружен в регистр DS на момент вызова функции. Таким образом, функция позволяет определить размер свободного пространства в хипе любой программы, загрузив ее hInstance в регистр DS, хотя при наличии функции GetHeapSpaces() необходимость таких манипуляций сомнительна.
Версии: 3.0, 3.1.
LocalHandlerDelta
Описание:
int FAR PASCAL LocalHandlerDelta(int nNewDelta);
Адрес: KERNEL.310
Аргументы:
nNewDelta       Новое значение инкремента для таблицы перемещаемых блоков локальной памяти.
Возвращаемое значение:
Старое значение инкремента.
Комментарии:
Функция позволяет изменять значение поля wMovDelta текущей структуры LOCAL_HEAP.
Версии: 3.1.
LocalHeapSize
Описание:
WORD FAR PASCAL LocalHeapSize();
Адрес: KERNEL.162
Возвращаемое значение:
Размер в байтах текущего локального хипа.
Версии: 3.0, 3.1.
LocalNotify
Описание:
FARPROC FAR PASCAL LocalNotify(FARPROC lpfnNotify);
Адрес: KERNEL.14
Аргументы:
lpfnNotify      Новый адрес для функции-обработчика сообщений локального хипа.
Возвращаемое значение:
Адрес старого обработчика.
Комментарии:
Эта функция - реликт версий 2.x - сейчас ей трудно придумать применение. Если вас интересуют подробности, то обратитесь к документации по SDK 2.x - там эта функция достаточно подробно описана.
Версии: 3.0, 3.1.
LockCurrentTask
Описание:
void FAR PASCAL LockCurrentTask(BOOL bNeedLock);
Адрес: KERNEL.33
Аргументы:
bNeedLock       TRUE, если задача должна быть заблокирована в системе, FALSE, если блокировка должна быть снята.
Комментарии:
Функция позволяет блокировать текущую задачу, то есть делать ее единственной исполняющейся в системе. Другие задачи замораживаются и не получают никаких сообщений.
Если на момент вызова функции в системе есть задачи DOS, исполняемые в фоновом режиме, то эти задачи не приостанавливаются, но пользователь теряет возможность переключения на них.
Версии: 3.0, 3.1.
LockMyTask
Описание:
void FAR PASCAL LockMyTask(BOOL bNeedLock);
Адрес: USER.276
Комментарии:
Функция аналогична LockCurrentTask(), но обрабатывает еще и состояние системной очереди сообщений.
Версии: 3.0, 3.1.
LongPtrAdd
Описание:
void FAR PASCAL LongPtrAdd(LPVOID lpPtr,DWORD dwAdd);
Адрес: KERNEL.180
Аргументы:
lpPtr   Модифицируемый дальний указатель.
dwAdd   Прибавляемая к адресу величина.
Возвращаемое значение:
Функция изменяет базовый адрес селектора сегмента, в который указывает lpPtr, увеличивая его на dwAdd.
Версии: 3.0, 3.1.
LookupMenuHandle
Описание:
HMENU FAR PASCAL LookupMenuHandle(HMENU hMenu,     int nId);
Адрес: USER.217
Аргументы:
hMenu   Меню верхнего уровня, с которого начинается поиск.
nId     Искомый идентификатор (команда).
Возвращаемое значение:
Дескриптор меню или подменю, в котором найден элемент, соответствующий nId.
Версии: 3.0, 3.1.
MakeObjectPrivate
Описание:
BOOL FAR PASCAL MakeObjectPrivate(HANDLE hObject, BOOL bPrivate);
Адрес: GDI.463
Аргументы:
hObject Один из объектов GDI.
bPrivate        TRUE, если объект надо пометить как <собственный>, FALSE, если надо снять пометку.
Возвращаемое значение:
TRUE, если объект уже был помечен.
Комментарии:
Функция помечает hObject как <принадлежащий> задаче, устанавливая бит 13 в поле wType его заголовка (см. GDIOBJHDR), что делает объект <невидимым> для других задач.
Информация о задаче-владельце в объект не записывается, что позволяет предположить, что функция введена только для повышения безопасности работы с объектом на время его использования в конкретном контексте.
Версии: 3.1.
NoHookDOSCall   
Описание:
void FAR PASCAL NoHookDOSCall()
Адрес: KERNEL.101
Комментарии:
Функция практически аналогична DOS3Call(), за исключением того, что она перед обращением к обработчику int 21h не вызывает функцию WriteOutProfiles(), но зато сохраняет на время обработки регистр DS.
Версии: 3.0, 3.1.
OffsetVigRgn
Описание:
int FAR PASCAL OffsetVisRgn(HDC hDC, int nOffsX,   int nOffsY);
Адрес: GDI.102
Аргументы:
hDC     Рабочий контекст устройства.
nOffsX  Расстояние, на которое область перемещается по горизонтали.
nOffsY  Расстояние, на которое область перемещается по вертикали.
Возвращаемое значение:
Тип перемещенной области.
Комментарии:
Функция перемещает видимую область hDC.
Версии: 3.0, 3.1.
PaintRect
Описание:
void FAR PASCAL PaintRect(HWND hwndParent, HWND hWnd, HBRUSH hBrush, LPRECT lpRect);
Адрес: USER.325
Аргументы:
hwndParent      Дескриптор родительского окна.
hWnd    Рабочее окно.
hDC     Рабочий контекст устройства.
hBrush  Кисть для закраски.
lpRect  Закрашиваемый прямоугольник.
Комментарии:
Функция закрашивает прямоугольник на hWnd, на координаты которого на hDC указывает lpRect. Кисть для закраски задается hBrush. Если hwndParent не равно NULL, то hBrush может содержать одну из констант CTLCOLOR_..., задающую один из стандартных цветов управляющих подокон.
Версии: 3.0, 3.1.
PrestoChangoSelector
Описание:
WORD FAR PASCAL PrestoChangoSelector(WORD wSource, WORD wDest);
Адрес: KERNEL.177
Аргументы:
wSource Исходный селектор.
wDest   Изменяемая копия wSource, созданная AllocSelector().
Возвращаемое значение:
wDest после изменения или 0 в случае неуспеха.
Комментарии:
Функция инвертирует признак <код/данные> wSelDest, что позволяет писать в область кода и <исполнять> данные.
В версии 3.1 появилась функция ChangeSelector(), которая была документирована еще в версии 3.0 (уникальный случай), хотя там она еще не экспортировалась. Единственное отличие данной функции от нее - проверка параметров здесь не производится.
Эта функция описана в Borland C++ 3.x вместо ChangeSelector(), что не совсем корректно.
Версии: 3.0, 3.1.
RCos
Описание:
int FAR PASCAL RCos(int nRadius, int nAngle);
Адрес: GDI.177
Аргументы:
nRadius Масштабный коэффицент.
nAngle  Угол в десятых градуса.
Возвращаемое значение:
Округленное до целого точное значение rcossymbol 97 \f "Symbol"¶§, где r - nRadius, а symbol 97 \f "Symbol"¶§ - nAngle/10.
Комментарии:
Функция позволяет быстро (в целых числах) выполнять распространенную тригонометрическую операцию.
Версии: 3.0.
RealizeDefaultPalette
Описание:
int FAR PASCAL RealizeDefaultPalette(HDC hDC);
Адрес: GDI.365
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Количество входов логической палитры по умолчанию, соответствующих различным элементам системной палитры.
Комментарии:
Функция восстанавливает палитру по умолчанию для hDC и приводит ее в соответствие с системной (реализует).
Версии: 3.0, 3.1.
RegisterPTrace
Описание:
void FAR PASCAL RegisterPTrace(FARPROC lpfnNotify);
Адрес: KERNEL.202
Аргументы:
lpfnNotify      Функция-обработчик системных событий.
Комментарии:
Функция устанавливает Callback-процедуру без параметров и возвращаемого значения. Передача NULL в lpfnNotify отменяет обработку соответствующих событий.
Информация о событиях передается функции через регистры, причем код типа события передается в AH. Обрабатываются следующие коды:
0: KERNEL требует вывода одного символа отладочной информации, на который указывает DS:DX.
1: KERNEL ждет от программы ввода символа для обработки ошибки (Abort/Retry/Ignore - a/i/n). Обычная реакция - запрос пользователю. Символ должен быть возвращен в AL.
0xd: Текущая задача завершается.
0xe: Текущая задача была только что запущена.
0x12: KERNEL требует вывод строки отладочной информации, адрес которой передается в ES:SI (DS:SI в версии 3.0).
0x50: Определяется (загружается) новый сегмент. BX содержит порядковый номер сегмента в файле модуля, CX - селектор сегмента, DX - дескриптор экземпляра модуля, которому принадлежит сегмент, SI - флаги памяти сегмента, ES:(E)DI указывает на имя модуля.
0x52: Освобождается один из сегментов. BX содержит освобожденный селектор.
0x59: Загружается задача. CX:BX содержит адрес ее точки входа.
0x62: Задача завершается. SP+6 указывает на код завершения.
0x63: Прерывание программы по Ctrl-Alt-SysReq.
0x64: Загружается DLL. SI содержит дескриптор модуля библиотеки, CX:BX указывает на точку входа.
0x65: Выгружен из памяти последний экземпляр модуля, дескриптор которого содержится в ES.
По возможности вместо данной функции рекомендуется использовать соответствующие средства ToolHelp.
Версии: 3.0, 3.1.
RepaintScreen
Описание:
void FAR PASCAL RepaintScreen();
Адрес: USER.275
Комментарии:
Функция заставляет перерисоваться все видимые на экране окна (включая минимизированные и рабочую поверхность).
Версии: 3.0, 3.1.
Restore80x87State
Описание:
void Restore80x87State(LPVOID lpState);
Адрес: SYSTEM.9
Аргументы:
lpState Указатель на буфер данных о сопроцессоре, размер которого (обычно 94 байта) возвращается функцией Get80x87SaveSize().
Комментарии:
Функция восстанавливает состояние сопроцессора, сохраненное функцией Save80x87SaveState().
Версии: 3.0, 3.1.
RestoreVisRgn
Описание:
WORD FAR PASCAL RestoreVisRgn(HDC hDC);
Адрес: GDI.130
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Тип восстановленной области.
Комментарии:
Функция восстанавливает из <стека> конфигурацию видимой области hDC, предварительно сохраненную функцией SaveVisRgn().
Версии: 3.0, 3.1.
Resurrection
Описание:
void FAR PASCAL Resurrection(HDC hDC, WORD reserv1, WORD reserv2, WORD reserv3, WORD reserv4,     WORD reserv5, WORD reserv6);
Адрес: GDI.122
Аргументы:
hDC     Контекст устройства рабочей поверхности экрана.
Комментарии:
Функция восстанавливает работу графического драйвера Windows, прерванную функцией Death() и переводит экран в стандартный графический режим.
Версии: 3.0, 3.1.
RSin
Описание:
int FAR PASCAL RSin(int nRadius, int nAngle);
Адрес: GDI.178
Аргументы:
nRadius Масштабный коэффицент (гипотенуза).
nAngle  Угол в десятых градуса.
Возвращаемое значение:
Аналогично RCos(), но вычисляется (как следует из названия) синус угла.
Версии: 3.0.
Save80x87State
Описание:
void Save80x87State(LPVOID lpBuffer);
Адрес: SYSTEM.8
Аргументы:
lpState Буфер данных сопроцессора.
Комментарии:
Функция сохраняет в буфере, на который указывает lpState и размер которого (обычно 94 байта) можно узнать, вызвав функцию Get80x87SaveSize(). Действие функции аналогично инструкции сопроцессора fsave.
Версии: 3.0, 3.1.
SaveVisRgn
Описание:
HRGN FAR PASCAL SaveVisRgn(HDC hDC);
Адрес: GDI.129
Аргументы:
hDC     Рабочий контекст устройства.
Возвращаемое значение:
Сохраненная копия области.
Комментарии:
Функция сохраняет в <стеке> конфигурацию видимой области hDC.
Версии: 3.0, 3.1.
ScrollChildren
Описание:
void FAR PASCAL ScrollChildren(HWND hWnd, WORD wMsg, WORD wSB, DWORD reserved);
Адрес: USER.463
Аргументы:
hWnd    Материнское окно MDI.
wMsg    Одно из сообщений прокрутки.
wSB     Одна из констант SB_..., описывающая полосу прокрутки, соответствующую wMsg.
Комментарии:
Функция перемещает дочерние окна сервера MDI в ответ на прокрутку, осуществленную пользователем.
Версии: 3.0, 3.1.
SelectorAccessRights
Описание:
WORD FAR PASCAL SelectorAcessRights(WORD wSel,    BOOL bSet, WORD wAccRights);
Адрес: KERNEL.196
Аргументы:
wSel    Селектор, права доступа которого проверяются или изменяются.
bSet    Если TRUE, то права доступа wSel устанавливаются в соответствие с wAccRights, иначе права доступа возвращаются функцией.
wAccRights      Поле игнорируется, если bSet==TRUE, иначе это комбинация битовых флагов, определяющих новые права доступа для wSel. Значения отдельных бит:
0 (0x0001) - к сегменту был доступ,
1 (0x0002) - установлен для доступных для записи данных или доступного для чтения кода,
2 (0x0004) - если установлен этот бит и бит 1, то данные в сегмент записываются от верхней границы к нижней (стек),
3 (0x0008) - установлен для кода,
4 (0x0010) - установлен для селектора, не принадлежащего системе,
15 (0x8000) - если установлен, сегмент выравнивается на границу параграфа, иначе - выравнивания не происходит.
Возвращаемое значение:
Если bSet==FALSE, то формат возвращаемого слова аналогичен формату поля wAccRights.
Комментарии:
Функция позволяет узнать или изменить системные права доступа любого сегмента.
Следует обратит внимание, что проверка wSel на действительность проводится не всегда, так что при передаче в неверного значения селектора результаты не определены.
Версии: 3.0, 3.1.
SelectVisRgn
Описание:
int FAR PASCAL SelectVisRgn(HDC hDC, HRGN hRgn);
Адрес: GDI.105
Аргументы:
hDC     Рабочий контекст устройства.
hRgn    Выбираемая область на hDC.
Возвращаемое значение:
Тип выбранной области.
Комментарии:
Функция жестко устанавливает видимую область на hDC.
Версии: 3.0, 3.1.
SetDCOrg
Описание:
POINT FAR PASCAL SetDCOrg(HDC hDC, WORD wOrgX,    WORD wOrgY);
Адрес: GDI.117
Аргументы:
hDC     Изменяемый контекст устройства.
wOrgX, wOrgY    Новое начало координат на hDC.
Возвращаемое значение:
Предыдущее значение начала координат контекста.
Комментарии:
Проверки действительности hDC не проводится, поэтому передача неверного параметра имеет непредсказуемые последствия.
Версии: 3.0, 3.1.
SetDCState
Описание:
void FAR PASCAL SetDCState(HDC hDC, HANDLE hDCSave);
Адрес: GDI.180
Аргументы:
hDC     Рабочий контекст устройства.
hDCSave Дескриптор структуры DCSAVE, возвращенный функцией GetDCState().
Комментарии:
Функция позволяет восстанавливать состояние контекста устройства в обход <стека> SaveDC()/RestoreDC().
Версии: 3.0, 3.1.
SetDCStatus
Описание:
BOOL FAR PASCAL SetDCStatus(HDC hDC, BOOL bInval, LPRECT lpRect);
Адрес: GDI.170
Аргументы:
hDC     Рабочий контекст устройства.
bInval  Если TRUE, то lpRect должен указывать на координаты прямоугольника, который объявляется на hDC <нуждающимся в перерисовке>, если же этот указатель равен NULL, то используется прямоугольник от последней операции обновления DC. Если же данное поле содержит FALSE, то в буфер, на который указывает lpRect, функция помещает координаты текущего прямоугольника для перерисовки, после чего система считает, что DC в обновлении больше не нуждается.
lpRect  Адрес структуры RECT для прямоугольника обновления.
Возвращаемое значение:
TRUE, если DC нуждался в обновлении на момент вызова функции.
Версии: 3.0, 3.1.
SetDeskPattern
Описание:
BOOL FAR PASCAL SetDeskPattern();
Адрес: USER.279
Возвращаемое значение:
TRUE в случае успеха.
Комментарии:
Если в файле Win.ini определена штриховка для фона рабочей области окна по умолчанию, то она устанавливается в качестве текущей.
В Windows 3.1 функция экспортируется под именем OldSetDeskPattern(), и все ее возможности реализуются функцией SystemParametersInfo().
Версии: 3.0, 3.1.
SetDeskWallpaper
Описание:
BOOL FAR PASCAL SetDeskWallpaper(LPSTR lpszBmp);
Адрес: USER.285
Аргументы:
lpszBmp Файл битовой карты <обоев> рабочей области окна.
Возвращаемое значение:
TRUE в случае успеха.
Комментарии:
Функция загружает из файла и устанавливает в качестве текущих <обоев> рисунок, содержащийся в lpszBmp. Если значение параметра равно -1L, то загружаются <обои>, по умолчанию, определенные в файле Win.ini. В любом случае, ни перерисовки фона, ни изменения файлов инициализации не производится.
В Windows 3.1 функция экспортируется под именем Bear285(), и все ее возможности реализуются функцией SystemParametersInfo().
Версии: 3.0, 3.1.
SetEventHook
Описание:
void FAR PASCAL SetEventHook(FARPROC);
Адрес: USER.321
Комментарии:
Функция документирована только в Windows 3.1, но она существует и может быть вызвана также и в версии 3.0.
Версии: 3.0, 3.1.
SetGridGranularity
Описание:
void FAR PASCAL SetGridGranularity(int nCell);
Адрес: USER.284
Аргументы:
nCell   Разрешение (в ячейках по 8 пикселов) решетки выравнивания расположения окон на рабочей поверхности или 0 для отмены выравнивания.
Комментарии:
Для ускорения отображения окон, Windows может выравнивать их границы по решетке с разрешением, кратным 8 пикселам.
В версии Windows 3.1 возможности этой функции реализованы одной из операций SystemParametersInfo().
Версии: 3.0.
SetInternalWindowPos
Описание:
void FAR PASCAL SetInternalWindowPos(HWND hWnd,   WORD wState, LPRECT lpRectWnd,             LPPOINT lpPointIcon);
Адрес: USER.461
Аргументы:
hWnd    Рабочее окно.
wState  Новое состояние окна: одна из констант SW_...
lpRectWnd       Новые координаты окна на рабочей поверхности. Если NULL, сохраняются текущие.
lpPointIcon     Новые координаты для минимизированного окна. Если NULL, сохраняются текущие.
Комментарии:
Функция предоставляет возможности, аналогичные средствам функции SetWindowPlacement() в версии 3.1, но в то же время несколько более удобна и поддерживается также Windows 3.0.
Версии: 3.0, 3.1.
SetObjectOwner
Описание:
HANDLE FAR PASCAL SetObjectOwner(HANDLE hObject, HANDLE hTask);
Адрес: GDI.461
Аргументы:
hObject Дескриптор одного из объектов GDI.
hTask   Задача - новый владелец hObject.
Возвращаемое значение:
Предыдущая задача-владелец hObject, или NULL в случае неудачи.
Комментарии:
Функция инициализирует поле hOwner заголовка hObject в отладочной версии Windows 3.1, чем устанавливает владельца для соответствующего объекта и позволяет освобождать ресурсы при завершении задачи.
Версии: 3.1b.
SetPriority
Описание:
void FAR PASCAL SetPriority(HANDLE hTask,         WORD wPrior);
Адрес: KERNEL.32
Аргументы:
hTask   Изменяемая задача, 0 для текущей.
wPrior  Новый приоритет для задачи.
Комментарии:
Функция изменяет поле wPriority соответствующей структуры TASK, что изменяет приоритет исполнения hTask и положение соответствующей структуры TDB в системном списке.
Версии: 3.0, 3.1.
SetRelAbs
Описание:
int FAR PASCAL SetRelAbs(HDC hDC, int nRelAbs);
Адрес: GDI.5
Аргументы:
hDC     Рабочий контекст устройства.
nRelAbs Текущий режим преобразования координат: 1, если используются абсолютные координаты, 2 - относительные.
Возвращаемое значение:
Предыдущее значение режима преобразования, или 0, если hDC недействителен.
Комментарии:
Функция устанавливает текущее поведение функций LineTo() и Polyline(): абсолютные координаты отсчитываются от начала координат контекста, относительные - от текущей позиции пера.
Версии: 3.0, 3.1.
SetSelectorBase
Описание:
WORD FAR PASCAL SetSelectorBase(WORD, DWORD);
Адрес: KERNEL.187
Комментарии:
Функция документирована только в Windows 3.1, но она существует и может быть вызвана также и в версии 3.0.
Версии: 3.0, 3.1.
SetSelectorLimit
Описание:
WORD FAR PASCAL SetSelectorLimit(WORD, DWORD);
Адрес: KERNEL.189
Комментарии:
Функция документирована только в Windows 3.1, но она существует и может быть вызвана также и в версии 3.0.
Версии: 3.0, 3.1.
SetSigHandler
Описание:
void FAR PASCAL SetSigHandler(FARPROC lpfnHandler, FARPROC FAR *lplpfnOldHandler,                BOOL FAR *lpbOldInst, WORD wInst, WORD reserv);
Адрес: KERNEL.140
Аргументы:
lpfnHandler     Новый обработчик Ctrl-Break.
lplpfnOldHandler        Адрес буфера для старого адреса обработчика.
lpbOldInst      В буфер помещается TRUE, если старый обработчик был обработчиком по умолчанию.
wInst   2, если устанавливается новый обработчик, 0, если восстанавливается обработчик по умолчанию.
reserv  Зарезервирован, должен равняться 1.
Комментарии:
Функция позволяет текущей задаче устанавливать собственный обработчик для реакции на нажатие Ctrl-Break или имитацию данного события функцией DoSignal(), и одновременно узнавать адрес старого обработчика.
Версии: 3.0, 3.1.
SetSystemMenu
Описание:
BOOL FAR PASCAL SetSystemMenu(HWND hWnd,HMENU hMenu);
Адрес: USER.280
Аргументы:
hWnd    Окно-клиент MDI.
hMenu   Новое системное меню для окна.
Возвращаемое значение:
TRUE в случае успеха.
Комментарии:
Функция позволяет менять системное меню только для окон-клиентов MDI.
Версии: 3.0, 3.1.
SetSystemTimer
Описание:
WORD FAR PASCAL SetSystemTimer(HWND hWnd,          int nIDEvent, WORD wElapse, FARPROC lpTimerProc);
Адрес: USER.11
Комментарии:
Функция аналогична соответствующей документированной функции SetTimer(), но позволяет устанавливать таймеры уже после того, как ресурсы, доступные функции SetTimer(), кончаются. Вместо сообщение WM_TIMER функция использует для оповещения окон недокументированное сообщение WM_SYSTIMER.
Функция позволяет использовать таймеры, зарезервированные системой для использования в режиме максимальной загрузки, поэтому она должна использоваться только в случае крайней необходимости.
В версии 3.1 функция экспортируется под именем Bear11(), поэтому рекомендуется подключать ее не указывая имени.
Версии: 3.0, 3.1.
SetTaskQueue
Описание:
HANDLE SetTaskQueue(HANDLE hTask, HANDLE hQueue);
Адрес: KERNEL.34
Аргументы:
hTask   Изменяемая задача.
hQueue  Дескриптор структуры TASK_QUEUE.
Возвращаемое значение:
Дескриптор структуры TASK_QUEUE, ассоциированной с hTask до вызова функции.
Комментарии:
Функция позволяет ассоциировать с hTask структуру TASK_QUEUE, на которую указывает hQueue.
Версии: 3.0, 3.1.
ShrinkGDIHeap
Описание:
void FAR ShrinkGDIHeap();
Адрес: GDI.354
Комментарии:
Функция сокращает размер локального хипа GDI до минимпльно возможного размера, оставляя в то же время свободным не меньше килобайта.
Версии: 3.0, 3.1.
SnapWindow
Описание:
BOOL FAR PASCAL SnapWindow(HWND hWnd);
Адрес: USER.281
Аргументы:
hWnd    Копирукмое окно.
Возвращаемое значение:
TRUE в случае успеха.
Комментарии:
Функция сохраняет в Clipboard битовую карту, содержащую текущий образ части экрана, ограниченной рамкой окна hWnd.
Версии: 3.0.
SwitchToThisWindow
Описание:
void FAR PASCAL SwitchToThisWindow(HWND hWnd,     BOOL bRestore);
Адрес: USER.172
Аргументы:
hWnd    Окно, на которое необходимо переключиться.
bRestore        TRUE, если размеры минимизированного hWnd необходимо восстановить.
Комментарии:
Функция активизирует hWnd, передает ему фокус ввода, перерисовывает и, если необходимо, переводит из минимизированного в нормальное состояние.
Версии: 3.0, 3.1.
SysErrorBox
Описание:
int FAR PASCAL SysErrorBox(LPSTR lpszMsg,        LPSTR lpszTitle, WORD wButton1, WORD wButton2, WORD wButton3);
Адрес: USER.320
Аргументы:
lpszMessage     Выдаваемое сообщение об ошибке.
lpszTitle       Заголовок сообщения.
wButton1         Тип левой кнопки (1).
wButton2         Тип средней кнопки (2).
wButton3         Тип правой кнопки (3).
Возвращаемое значение:
Номер кнопки, нажатой пользователем.
Комментарии:
Функция выводит на экран специальное окно сообщения о системной ошибке, содержащее от одной до трех кнопок с предопределенными надписями. Возможны следующие типы кнопок: 1 - , 2 - , 3 - , 4 - , 5 - , 6 - , 7 - . Если установлен старший бит значения типа, то кнопка становится кнопкой по умолчанию.
Функция реализована на очень низком уровне - она сохраняет работоспособность практически при любом состоянии системы, но в то же время при передаче неверных параметров может полностью вывести систему из строя.
Версии: 3.0, 3.1.
TileChildWindows
Описание:
void FAR PASCAL TileChildWindows(HWND hWnd
#ifdef WIN31
        ,WORD wAct
#endif
);
Адрес: USER.199
Аргументы:
hWnd            Окно, подокна которого должны быть переупорядочены.
wAct            Значение MDITITLE_SKIPDISABLED заставляет функцию не перемещать неактивные окна, MDITITLE_HORIZONTAL и MDITITLE_VERTICAL задают приоритет соответственно горизонтального или вертикального взаимного расположения окон, любое другое - игнорируется.
Комментарии:
Позволяет располагать в виде мозаики дочерние окна в не-MDI-приложениях, в том числе и для всей рабочей области окна вызовом TileChildWindows(GetDesktopWindow(), 0).
Обратите внимание, что количество аргументов функции зависит от версии Windows. Неправильное задание аргументов приводит  к общей ошибке защиты.
Версии: 3.0, 3.1.
UnicodeToAnsi
Описание:
int UnicodeToAnsi(LPSTR lpszUnicode, LPSTR lpszAnsi);
Адрес: GDI.467
Аргументы:
lpszUnicode     Строка двухбайтных символов в стандарте Unicode. Длина строки не должна превышать 64K.
lpszAnsi        Буфер для преобразованной строки.
Возвращаемое значение:
Длина преобразованной строки в символах.
Комментарии:
Функция позволяет преобразовывать строки из формата Unicode в стандартный ANSI.
Версии: 3.1.
UserSeeUserDo
Описание:
DWORD FAR PASCAL UserSeeUserDo(WORD wAction,        WORD wParam1, WORD reserved, WORD wParam2);
Адрес: GDI.452
Аргументы:
wAction         Номер запроса к USER.
wParam1, wParam2                Данные, передаваемые с запросом.
Возвращаемое значение:
Если значение wAction не поддерживается функцией, то возвращается -1, иначе значение зависит от конкретного запроса.
Комментарии:
Функция дает возможность работы с локальным хипом USER. Допустимы следующие запросы:
1 (USUD_LOCALALLOC): USER выделяет память в своем локальном хипе  вызовом LocalAlloc(wParam1, wParam2) и возвращает дескриптор блока в младшем слове.
2 (USUD_LOCALFREE): USER освобождает блок памяти в своем локальном хипе вызовом LocalFree(wParam1) и возвращает 0 в случае успеха.
3 (USUD_LOCALCOMPACT): Функция создает непрерывный свободный блок в локальном хипе USER, размеры которого передаются в wParam2 и возвращает максимально возможный размер такого блока.
4 (USUD_LOCALHEAP): USER возвращает в младшем слове дескриптор своего локального хипа, который может быть использован для доступа к внутренним структурам USER и выделенным запросом USUD_LOCALALLOC этой функции блокам памяти.
5 (USUD_FIRSTCLASS): USER возвращает в младшем слове дескриптор первой структуры CLASS в системном стеке.
Версии: 3.1.
WinExec
Описание:
WORD FAR PASCAL WinExec(LPSTR,int);
Комментарии:
Функция документирована, но в документации не сказано, что возвращаемое значение, большее 32 является дескриптором экземпляра (HINSTANCE) запущенной задачи.
Версии: 3.0, 3.1.
WriteOutProfiles
Описание:
vois FAR PASCAL WriteOutProfiles();
Адрес: KERNEL.315
Комментарии:
Эта функция сбрасывает на диск кэш-буфер изменений в файлах инициализации.
Версии: 3.0, 3.1.
XCStoDS
Описание:
WORD FAR PASCAL XCStoDS();
Адрес: USER.315
Возвращаемое значение:
Селектор сегмента данных USER по умолчанию.
Комментарии:
USER является владельцем рабочей области экрана, и поэтому результат, аналогичный возвращаемому этой функцией, можно получить, вызвав GetWindowWord(GetDesktopWindow(),GWW_HINSTANCE).
Версии: 3.0.
Литература
1.      Schulman A., Maxey D., Pietrek M. Les Coulisses de Windows (Undocumented Windows) // Editions Addison-Wesley France. Paris, 1992. 702 p.
2.      Bar J., Bauder I. Le Grand Livre de la Programmation Windows 3.1 // Data Becker GmbH, Dьsseldorf; Micro Application. Paris, 1992. 908 p.
3.      Borland C++ 3.0 Programmer's guide // Borland International. US, CA, 1991. 467 p.
4.      Borland C++ 3.1 Windows API online documentation // Borland International, US, CA, 1992.
5.      Справочник Windows 3.0 для программистов // ППИ НЦ. Москва, 1991. 457 с.
6.      Гладков С.А., Фролов Г.В. Программирование в Microsoft Windows. // М, 1992. 603 с.
7.      Turbo Assembler 3.0. Quick reference Guide // US, CA, 1991, 148 p.
8.      Shulman A., Michels R.J. et al. Undocumented DOS // Addison-Wesley Publishing Company, Inc. Paris, 1991. 681 p.
9.      Борковский А.Б., Зайчик Б.И., Боровикова Л.И. Словарь по программированию // <Русский язык>, Москва, 1991.
10.     Шулман Э. Недокументированные функции Windows // PC Magazine/Russian Edition, No. 3, 1992, P. 114-123, No. 4, 1992, P. 97-105.
11.     Дункан Р. Библиотека ToolHelp для Windows 3.1 // PC Magazine/Russian Edition, No. 5, 1992, P. 98-103, No. 7, 1992, P. 113-120, No. 8, 1992, P. 106-111.
12.     Зубанов Ф. Microsoft Windows: открываем тайны // Компьютер пресс № 6, 1992, с. 4-14, № 7, 1992, с. 55-61.
Приложение.
Список функций, структур, переменных и сообщений по типам.
Управление селекторами
__0000H
__0040H
__ROMBIOS
AllocAlias
AllocCStoDSAlias
AllocSelectorArray
IsSharedSelector
PrestoChangoSelector
SelectorAcessRights
SELTAB
SetSelectorBase
SetSelectorLimit

Управление окнами
CalcChildScroll
CascadeChildWindows
CLASS
FillWindow
GetInternalWindowPos
GetNextQueueWindow
ScrollChildren
SetInternalWindowPos
SwitchToThisWindow
TileChildWindows
WND
WM_BEGINDRAG
WM_ENTERSIZEMOVE
WM_EXITSIZEMOVE
WM_ISACTIVEICON
WM_LBTRACKPOINT
WM_PAINTICON
WM_SETVISIBLE
WM_ACTIVATESHELLWINDOW
WM_OTHERWINDOWCREATED
WM_OTHERWINDOWDESTROYEDОбщая информация и управление системой
ATOMTABLE
ATOMENTRY
ControlPanelInfo
DeletePathName
ExitKernel
FileCdr
FlushCachedFileHandle
Get80x87SaveSize
GetAppCompatFlags
GetCodeHandle
GetExePtr
GetSelectorBase
GetSelectorLimit
GlobalMasterHandle
IsROMFile
IsROMModule
IsUserIdle
IsValidMetaFile
RCos
RSin
THHOOK
THHook
Save80x87SaveState
SetDeskPattern
SetDeskWallPaper
SetGridGranularity
UnicodeToAnsi
Системные вызовы
BroadcastMessage
DisableDOS
DisableKernel
EnableDOS
EnableKernel
DOS3Call
DoSignal
fTrapping0
GetFilePortName
GetLpErrMode
GetMouseEventProc
GetSetKernelDOSProc
Keybd_Event
NoHookDOSCall
Restore80x87SaveState
SetEventHook
SetSigHandler
SysErrorBox
THUNKS
WriteOutProfiles
WM_ALTTABACTIVE
Работа с таймерами
CreateSystemTimer
DisableSystemTimers
EnableSystemTimers
GetTimerResolution
KillSystemTimer
SetSystemTimer
WM_SYSTIMER
Общее управление графическим устройством
Death
DisableOEMLayer
EnableOEMLayer
IconSize
RepaintScreen
Resurrection
Отладка
DiagOutput
DiagQuery
RegisterPTrace
Управление задачами
DirectedYield
GdiSeeGdiDo
GetCurrentPDB
GetCurrentTask
GetExeVersion
GetExpWinVer
GetModuleHandle
GetQueueStatus
GetTaskDS
GetTaskQueue
GetTaskQueueDS
GetTaskQueueES
INSTANCE
IsTaskLocked
IsWinOldAppTask
LockCurrentTask
LockMyTask
MODULE
SetTaskQueue
TASK_QUEUE
TDB
UserSeeUserDo
WinExec
WM_GETHOTKEY
WM_SETHOTKEY
XCSToDS
Работа с ресурсами
BITMAPOBJ
BRUSHOBJ
CURSOR
CURSORICONINFO
DirectResAlloc
DumpIcon
FONTOBJ
GetIconId
GDIOBJHDR
ICON
IsGDIObject
LoadCursorIconHandler
LoadDIBCursorHandler
LoadDIBIconHandler
LoadIconHandler
MakeObjectPrivate
PALETTEOBJ
PENOBJ
SetObjectOwner
Протокол Drag&Drop
DragDetect
DRAGINFO
DragObject
DROPINFO
WM_DRAGLOOP
WM_DRAGMOVE
WM_DRAGSELECT
WM_DROPOBJECT
WM_QUERYDROPOBJECT
Работа с меню
EndMenu
LookupMenuHandle
MENU
MENUITEM
SetSystemMenu

WM_EXITMENULOOP
WM_ENTERMENULOOP
Работа с контекстом устройства и графика
DC
DCE
DCSAVE
ExcludeVisRect
FastWindowFrame
GetClipRgn
GetControlBrush
GetCurLogFont
GetDCState
GetPhysicalFontHandle
GetRelAbs
IntersectVisRect
IsDCCurrentPalette
IsDCDirtyOffsetVisRgn
PaintRect
RealizeDefaultPalette
RestoreVisRgn
SaveVisRgn
SelectVisRgn
SetDCOrg
SetDCState
SetDCStatus
SetRelAbs
SnapWindow
Работа с памятью
__WINFLAGS
BURGERMASTER
FarGetOwner
FarSetOwner
GetFreeMemInfo
GetHeapSpaces
GLOBAL_ARENA
GlobalFreeAll
GlobalHandleNoRIP
InitAtomTable
IsBadReadPtr
IsBadStringPtr
IsBadWritePtr
LOCAL_ARENA
LOCAL_HEAP
LocalCountFree
LocalHandlerDelta
LocalHeapSize
LocalNotify
LongPtrAdd
ShrinkGDIHeap
Оглавление
toc \o "1-3" ¶Введение.        3
Пользование справочником.       5
Часть I.        8
ATOMTABLE       8
ATOMENTRY       8
BITMAPOBJ       9
BRUSHOBJ        9
BURGERMASTER    10
CLASS   11
CURSOR  12
CURSORICONINFO  13
DC      13
DCE     17
DCSAVE  18
DRAGINFO        18
DROPINFO        19
FONTOBJ 19
GDIOBJHDR       20
GLOBAL_ARENA    21
ICON    22
INSTANCE        23
LOCAL_ARENA     23
LOCAL_HEAP      25
MENU    26
MENUITEM        28
MODULE  28
PALETTEOBJ      33
PENOBJ  33
SELTAB  34
TASK_QUEUE      34
TDB     36
THUNKS  39
THHOOK  40
WND     41
Часть II.       43
WM_ACTIVATESHELLWINDOW  43
WM_ALTTABACTIVE 43
WM_BEGINDRAG    43
WM_DRAGLOOP     44
WM_DRAGMOVE     44
WM_DRAGSELECT   44
WM_DROPOBJECT   45
WM_ENTERMENULOOP        45
WM_ENTERSIZEMOVE        46
WM_EXITMENULOOP 46
WM_EXITSIZEMOVE 46
WM_GETHOTKEY    46
WM_ISACTIVEICON 47
WM_LBTRACKPOINT 47
WM_OTHERWINDOWCREATED   47
WM_OTHERWINDOWDESTROYED 48
WM_PAINTICON    48
WM_QUERYDROPOBJECT      48
WM_SETHOTKEY    49
WM_SETVISIBLE   49
WM_SYSTIMER     50
Часть III.      51
__0000H 51
__0040H 51
__ROMBIOS       51
__WINFLAGS      52
fTrapping0      52
THHook  52
Часть IV.       54
AllocAlias      54
AllocCStoDSAlias        54
AllocSelectorArray      55
BroadcastMessage        55
CalcChildScroll 56
CascadeChildWindows     56
ControlPanelInfo        57
CreateSystemTimer       58
Death   59
DeletePathName  59
DiagOutput      60
DiagQuery       60
DirectedYield   60
DirectResAlloc  61
DisableDOS      61
DisableKernel   62
DisableOEMLayer 62
DisableSystemTimers     62
DOS3Call        63
DoSignal        63
DragDetect      63
DragObject      64
DumpIcon        65
EnableDOS       65
EnableKernel    66
EnableOEMLayer  66
EnableSystemTimers      66
EndMenu 67
ExcludeVisRect  67
ExitKernel      68
FarGetOwner     68
FarSetOwner     69
FastWindowFrame 69
FileCdr 70
FillWindow      71
FlushCachedFileHandle   72
GdiSeeGdiDo     72
Get80x87SaveSize        73
GetAppCompatFlags       73
GetClipRgn      74
GetCodeHandle   74
GetControlBrush 74
GetCurLogFont   75
GetCurrentPDB   75
GetCurrentTask  76
GetDCState      76
GetExePtr       76
GetExeVersion   77
GetExpWinVer    77
GetFilePortName 78
GetFreeMemInfo  78
GetHeapSpaces   79
GetIconId       79
GetInternalWindowPos    80
GetLpErrMode    80
GetModuleHandle 81
GetMouseEventProc       81
GetNextQueueWindow      82
GetPhysicalFontHandle   82
GetQueueStatus  82
GetRelAbs       83
GetSelectorBase 83
GetSelectorLimit        83
GetSetKernelDOSProc     84
GetTaskDS       84
GetTaskQueue    85
GetTaskQueueDS  85
GetTaskQueueES  85
GetTimerResolution      86
GlobalFreeAll   86
GlobalHandleNoRIP       86
GlobalMasterHandle      87
IconSize        87
InitAtomTable   87
InquireVisRgn   88
IntersectVisRect        88
IsBadReadPtr    89
IsBadStringPtr  89
IsBadWritePtr   89
IsDCCurrentPalette      90
IsDCDirty       90
IsGDIObject     90
IsROMFile       91
IsROMModule     91
IsSharedSelector        92
IsTaskLocked    92
IsUserIdle      92
IsValidMetaFile 93
IsWinOldAppTask 93
Keybd_Event     93
KillSystemTimer 94
KillSystemTimer 94
LoadCursorIconHandler   95
LoadDIBCursorHandler    95
LoadDIBIconHandler      96
LoadIconHandler 96
LocalCountFree  97
LocalHandlerDelta       97
LocalHeapSize   97
LocalNotify     98
LockCurrentTask 98
LockMyTask      99
LongPtrAdd      99
LookupMenuHandle        99
MakeObjectPrivate       100
NoHookDOSCall   100
OffsetVigRgn    101
PaintRect       101
PrestoChangoSelector    102
RCos    102
RealizeDefaultPalette   103
RegisterPTrace  103
RepaintScreen   104
Restore80x87State       105
RestoreVisRgn   105
Resurrection    105
RSin    106
Save80x87State  106
SaveVisRgn      107
ScrollChildren  107
SelectorAccessRights    107
SelectVisRgn    108
SetDCOrg        109
SetDCState      109
SetDCStatus     110
SetDeskPattern  110
SetDeskWallpaper        111
SetEventHook    111
SetGridGranularity      112
SetInternalWindowPos    112
SetObjectOwner  113
SetPriority     113
SetRelAbs       114
SetSelectorBase 114
SetSelectorLimit        114
SetSigHandler   115
SetSystemMenu   115
SetSystemTimer  116
SetTaskQueue    116
ShrinkGDIHeap   117
SnapWindow      117
SwitchToThisWindow      117
SysErrorBox     118
TileChildWindows        119
UnicodeToAnsi   119
UserSeeUserDo   120
WinExec 121
WriteOutProfiles        121
XCStoDS 121
Литература      122
Приложение.     123
§
1 В русскоязычной литературе встречаются аналогичные названия <куча> и <локальная область памяти>.
Last recently used: дескрипторы тех структур GLOBAL_ARENA, к которым недавно обращалась система - нечто типа хэш-таблицы.
1 Last recently used: дескриптор тех структур GLOBAL_ARENA, к которым недавно обращалась система.

1 Last in - first out: последний пришел - первый ушел.
1 Число, возвращаемое функцией RegisterWindowsMessage(), на самом деле является дескриптором глобального атома. Таким образом, получив сообщение со значением в соответствующем диапазоне (от 0xc000 до 0xffff), можно, вызвав функцию GetAtomName(), узнать его имя.



[Hа Главную][CD Строительство][CD Говорящая книга][Художественная литература]
[Техническая литература][Галерея рисунков][Очень полезный soft][Ваш заказ]


 

© KOAP Open Portal 2000
 


?????? ???????????