/*++ BUILD Version: 0002 * * WOW v1.0 * * Copyright (c) 1991, Microsoft Corporation * * WOW.H * Constants, macros, etc common to WOW16/WOW32 * * History: * Created 25-Jan-1991 by Jeff Parsons (jeffpar) * Added SHELL defines 14-April-92 Chandan Chauhan (ChandanC) * and Win 31 parameter validation support. * Modified 12-May-1992 by Mike Tricker (MikeTri) Added MultiMedia declarations * and callback support * --*/ #define WIN31 #include #include #ifndef NOEXTERNS #include #endif #include #ifdef i386 #ifndef DEBUG // should be DEBUG_OR_WOWPROFILE, but // that won't work for assembler as things are. // // Flag to control enable/disable W32TryCall function. // #define NO_W32TRYCALL 1 #endif #endif /* WOW constants */ #define MAX_VDMFILENAME 144 // must be >= 144 (see GetTempFileName) #define GRAINYTIC_RES 0x3f // will truncate to lower multiple of 64 /* Logging/debugging macros */ /* XLATOFF */ #define GRAINYTICS(dwordtickcount) ((dwordtickcount) & (~GRAINYTIC_RES)) #define IFLOG(l) if (l==iLogLevel && (iLogLevel&1) || l<=iLogLevel && !(iLogLevel&1) || l == 0) #define OPENLOG() (hfLog != (HANDLE)-1?hfLog:(hfLog=CreateFile("log",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,0,NULL))) #define APPENDLOG() if (hfLog == (HANDLE)-1) {hfLog=CreateFile("log",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,0,NULL) ; SetFilePointer (hfLog,0,NULL,FILE_END); } #define CLOSELOG() if (hfLog != (HANDLE)-1) {CloseHandle(hfLog); hfLog=(HANDLE)-1;} #undef LOG #ifdef NOLOG #define LOG(l,args) #define SETREQLOG(l) #else #define SETREQLOG(l) iReqLogLevel = (l) #define LOG(l,args) {SETREQLOG(l) ; logprintf args;} #endif #define MODNAME(module) #ifdef DEBUG #define STATIC #define INT3() _asm int 3 #define IFDEBUG(f) if (f) #define ELSEDEBUG else #define LOGDEBUG(l,args) LOG(l,args) #else #define STATIC static #define INT3() #define IFDEBUG(f) #define ELSEDEBUG #define LOGDEBUG(l,args) #endif /* XLATON */ /* 16-bit Windows constants */ #define CW_USEDEFAULT16 ((SHORT)0x8000) /* 16-bit Windows types */ typedef WORD HAND16; typedef WORD HTASK16; typedef WORD HINST16; typedef WORD HMOD16; typedef WORD HRES16; typedef WORD HRESI16; typedef WORD HRESD16; typedef WORD HWND16; typedef WORD HMENU16; typedef WORD HDC16; typedef WORD HRGN16; typedef WORD HICON16; typedef WORD HCUR16; typedef WORD HBRSH16; typedef WORD HPAL16; typedef WORD HBM16; typedef WORD HFONT16; typedef WORD HMEM16; typedef DWORD HHOOK16; typedef WORD HMMIO16; // for MultiMedia - MikeTri 12-May-1992 typedef WORD HMIDIIN16; typedef WORD HMIDIOUT16; typedef WORD HWAVEIN16; typedef WORD HWAVEOUT16; typedef WORD HDRVR16; typedef DWORD HPSTR16; typedef SHORT INT16; typedef SHORT BOOL16; /* 16-bit pointer types (VP == VDM Ptr) */ typedef DWORD VPVOID; // VDM address (seg:off) typedef VPVOID VPBYTE; // typedef VPVOID VPWORD; // typedef VPVOID VPDWORD; // typedef VPVOID VPSHORT; // typedef VPVOID VPLONG; // typedef VPVOID VPSTR; // should use VPSZ or VPBYTE instead, as approp. typedef VPVOID VPSZ; // typedef VPVOID VPPROC; // typedef VPVOID VPWNDPROC; // typedef VPVOID VPINT16; // typedef VPVOID VPBOOL16; // typedef VPVOID *PVPVOID; // pointer to VDM address typedef VPVOID VPCSTR; // MultiMedia Extensions - MikeTri 12-May-1992 typedef VPVOID VPMMIOPROC16; typedef VPVOID VPHMIDIIN16; typedef VPVOID VPHMIDIOUT16; typedef VPVOID VPPATCHARRAY16; typedef VPVOID VPKEYARRAY16; typedef VPVOID VPHWAVEIN16; typedef VPVOID VPHWAVEOUT16; typedef VPVOID VPTIMECALLBACK16; typedef VPVOID VPTASKCALLBACK16; /* XLATOFF */ #pragma pack(1) /* XLATON */ /* Window proc/dialog box callback function parameter format */ typedef struct _PARMWP { /* wp */ LONG lParam; // WORD wParam; // WORD wMsg; // WORD hwnd; // WORD hInst; // hInstance of window that we are returning to } PARMWP; /* EnumPropsProc callback function parameter format */ typedef struct _PARMEPP { /* epp */ HAND16 hData; VPVOID vpString; HWND16 hwnd; } PARMEPP; /* EnumWindows/EnumChildWindows/EnumTaskWindows callback function parameter format */ typedef struct _PARMEWP { /* ewp */ LONG lParam; // app-defined data HWND16 hwnd; // 16-bit window handle } PARMEWP; /* EnumFonts callback function parameter format */ typedef struct _PARMEFP { /* efp */ VPVOID vpData; // app-defined data SHORT nFontType; // VPVOID vpTextMetric; // pointer to TEXTMETRIC16 VPVOID vpLogFont; // pointer to LOGFONT16 } PARMEFP; /* EnumObj callback function parameter format */ typedef struct _PARMEOP { /* eop */ VPVOID vpData; // app-defined data VPVOID vpLogObject; } PARMEOP; /* EnumMetaFile callback function parameter format */ typedef struct _PARMEMP { /* emp */ VPVOID vpData; // app-defined data SHORT nObjects; // # objects VPVOID vpMetaRecord; // pointer to METARECORD16 VPVOID vpHandleTable; // pointer to HANDLETABLE16 HDC16 hdc; // hdc } PARMEMP; /* Hook Callback function parameter format */ typedef struct _PARMHKP { /* hkp */ VPVOID lParam; SHORT wParam; SHORT nCode; // action code } PARMHKP; /* Subclass Callback function parameter format */ typedef struct _PARMSCP { /* scp */ SHORT iOrdinal; // oridnal number; } PARMSCP; /* LineDDA Callback function parameter format */ typedef struct _PARMDDA { /* dda */ VPVOID vpData; SHORT y; SHORT x; } PARMDDA; /* Graystring callback function parameter format */ typedef struct _PARMGST { /* gst */ SHORT n; DWORD data; HDC16 hdc; } PARMGST; typedef struct _PARMDIR { /* cdir */ SHORT wDrive; VPSZ vpDir; // directory name } PARMDIR; typedef struct _PARMSAP { /* sap */ SHORT code; // HAND16 hPr; } PARMSAP; /* WordBreakProc callback function parameter format */ typedef struct _PARMWBP { /* wbp */ SHORT action; SHORT cbEditText; SHORT ichCurrentWord; VPVOID lpszEditText; } PARMWBP; /*++ MultiMedia callback definitions added, and also to _PARM16 - MikeTri --*/ /* midiInOpen (MidiInFunc) Callback function parameter format */ typedef struct _PARMMIF { /* mif */ DWORD dwParam2; DWORD dwParam1; DWORD dwInstance; WORD wMsg; HMIDIIN16 hMidiIn; } PARMMIF; /* midiOutOpen (MidiOutFunc) Callback function parameter format */ typedef struct _PARMMOF { /* mof */ DWORD dwParam2; DWORD dwParam1; DWORD dwInstance; WORD wMsg; HMIDIOUT16 hMidiOut; } PARMMOF; /* mmioInstallIOProc (IOProc) Callback function parameter format */ typedef struct _PARMIOP { /* iop */ LONG lParam2; LONG lParam1; WORD wMsg; VPVOID lpmmioinfo; } PARMIOP; /* timeSetEvent (TimeFunc) Callback function parameter format */ typedef struct _PARMTIF { /* tif */ DWORD dw2; DWORD dw1; DWORD dwUser; WORD wMsg; WORD wID; } PARMTIF; /* waveInOpen (WaveInFunc) Callback function parameter format */ typedef struct _PARMWIF { /* wif */ DWORD dwParam2; DWORD dwParam1; DWORD dwInstance; WORD wMsg; HWAVEIN16 hWaveIn; } PARMWIF; /* waveOutOpen (WaveOutFunc) Callback function parameter format */ typedef struct _PARMWOF { /* wof */ DWORD dwParam2; DWORD dwParam1; DWORD dwInstance; WORD wMsg; HWAVEOUT16 hWaveOut; } PARMWOF; /* WOWCallback16 function parameter format */ typedef struct _PARMWCB16 { /* wcb16 */ WORD wArgs[8]; } PARMWCB16; /* PARM16 is the union of all the callback parameter structures */ typedef union _PARM16 { /* parm16 */ PARMWP WndProc; // for window procs PARMEWP EnumWndProc; // for window enum functions PARMEFP EnumFontProc; // for font enum functions PARMEOP EnumObjProc; // for obj enum functions PARMEMP EnumMetaProc; // for metafile enum functions PARMEPP EnumPropsProc; // for properties PARMHKP HookProc; // for Hooks PARMSCP SubClassProc; // for subclass thunks PARMDDA LineDDAProc; // for LineDDA PARMGST GrayStringProc; // for GrayString PARMDIR CurDir; PARMSAP SetAbortProc; // for SetAbortProc PARMMIF MidiInFunc; // for midiInOpen functions - MikeTri 27-Mar-1992 PARMMOF MidiOutFunc; // for midiOutOpen functions PARMIOP IOProc; // for mmioInstallIOProc functions PARMTIF TimeFunc; // for timeSetEvent functions PARMWIF WaveInFunc; // for waveInOpen functions PARMWOF WaveOutFunc; // for waveOutOpen functions PARMWBP WordBreakProc; // for WordBreakProc PARMWCB16 WOWCallback16; // for WOWCallback16 } PARM16, *PPARM16; /* VDMFRAME is built by wow16cal.asm in the kernel, and is utilized * by all the WOW32 thunks */ typedef struct _VDMFRAME { /* vf */ WORD wTDB; // 16-bit kernel handle for calling task WORD wRetID; // internal call-back function ID Do NOT Move WORD wLocalBP; // WORD wDI; // WORD wSI; // WORD wAX; // WORD wDX; // keep DX right after AX!!! WORD wAppDS; // app DS at time of call WORD wGS; WORD wFS; WORD wCX; // REMOVE LATER WORD wES; // REMOVE LATER WORD wBX; // REMOVE LATER WORD wBP; // BP Chain +1 VPVOID wThunkCSIP; // far return address to thunk DWORD wCallID; // internal WOW16 module/function ID WORD cbArgs; // byte count of args pushed VPVOID vpCSIP; // far return address to app BYTE bArgs; // start of arguments from app } VDMFRAME; typedef VDMFRAME UNALIGNED *PVDMFRAME; /* CBVDMFRAME is built by callback16 in wow32.dll and in wow16cal.asm * the definition of VDMFRAME and CBACKVDMFRAME must be in sync */ typedef struct _CBVDMFRAME { /* cvf */ WORD wTDB; // must match VDMFRAME WORD wRetID; // must match VDMFRAME WORD wLocalBP; // must match VDMFRAME PARM16 Parm16; // space for window/enum proc parameters VPVOID vpfnProc; // address of window/enum proc DWORD vpStack; // orginal ss:sp. used in callback16 WORD wAX; // WORD wDX; // keep DX right after AX!!! WORD wGenUse1; // extra words for general use. for convenience WORD wGenUse2; // extra words for general use. for convenience } CBVDMFRAME; typedef CBVDMFRAME UNALIGNED *PCBVDMFRAME; typedef struct _POINT16 { /* pt16 */ SHORT x; SHORT y; } POINT16; typedef POINT16 UNALIGNED *PPOINT16; typedef VPVOID VPPOINT16; typedef struct _RASTERIZER_STATUS16 { /* rs16 */ INT16 nSize; INT16 wFlags; INT16 nLanguageID; } RASTERIZER_STATUS16; typedef RASTERIZER_STATUS16 UNALIGNED *PRASTERIZER_STATUS16; typedef VPVOID VPRASTERIZER_STATUS16; typedef struct _GLYPHMETRICS16 { /*glyph16 */ WORD gmBlackBoxX; WORD gmBlackBoxY; POINT16 gmptGlyphOrigin; INT16 gmCellIncX; INT16 gmCellIncY; } GLYPHMETRICS16; typedef GLYPHMETRICS16 UNALIGNED *PGLYPHMETRICS16; typedef VPVOID VPGLYPHMETRICS16; typedef struct _ABC16 { /* abc16 */ INT16 abcA; WORD abcB; INT16 abcC; } ABC16; typedef ABC16 UNALIGNED *PABC16; typedef VPVOID VPABC16; typedef struct _FIXED16 { /* fxd16 */ WORD fract; INT16 value; } FIXED16; typedef FIXED16 UNALIGNED *PFIXED16; typedef VPVOID VPFIXED16; typedef struct _MAT216 { /* mat216 */ FIXED16 eM11; FIXED16 eM12; FIXED16 eM21; FIXED16 eM22; } MAT216; typedef MAT216 UNALIGNED *PMAT216; typedef VPVOID VPMAT216; /* 16-bit API structures, and their pointers */ typedef struct _RECT16 { /* rc16 */ SHORT left; SHORT top; SHORT right; SHORT bottom; } RECT16; typedef RECT16 UNALIGNED *PRECT16; typedef VPVOID VPRECT16; typedef struct _KERNINGPAIR16 { /* k16 */ WORD wFirst; WORD wSecond; INT16 iKernAmount; } KERNINGPAIR16; typedef KERNINGPAIR16 UNALIGNED *PKERNINGPAIR16; typedef VPVOID VPKERNINGPAIR16; typedef struct _MSG16 { /* msg16 */ HWND16 hwnd; WORD message; WORD wParam; LONG lParam; DWORD time; POINT16 pt; } MSG16; typedef MSG16 UNALIGNED *PMSG16; typedef VPVOID VPMSG16; typedef struct _PAINTSTRUCT16 { /* ps16 */ HDC16 hdc; BOOL16 fErase; RECT16 rcPaint; BOOL16 fRestore; BOOL16 fIncUpdate; BYTE rgbReserved[16]; } PAINTSTRUCT16; typedef PAINTSTRUCT16 UNALIGNED *PPAINTSTRUCT16; typedef VPVOID VPPAINTSTRUCT16; typedef struct _WNDCLASS16 { /* wc16 */ WORD style; VPWNDPROC vpfnWndProc; SHORT cbClsExtra; SHORT cbWndExtra; HAND16 hInstance; HICON16 hIcon; HCUR16 hCursor; HBRSH16 hbrBackground; VPSZ vpszMenuName; VPSZ vpszClassName; } WNDCLASS16; typedef WNDCLASS16 UNALIGNED *PWNDCLASS16; typedef VPVOID VPWNDCLASS16; typedef struct _PALETTEENTRY16 { /* pe16 */ BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; } PALETTEENTRY16; typedef PALETTEENTRY16 UNALIGNED *PPALETTEENTRY16; typedef VPVOID VPPALETTEENTRY16; typedef struct _RGBTRIPLE16 { /* rgbt16 */ BYTE rgbtBlue; BYTE rgbtGreen; BYTE rgbtRed; } RGBTRIPLE16; typedef struct _BITMAPCOREHEADER16 { /* bmch16 */ DWORD bcSize; WORD bcWidth; WORD bcHeight; WORD bcPlanes; WORD bcBitCount; } BITMAPCOREHEADER16; typedef BITMAPCOREHEADER16 UNALIGNED *PBITMAPCOREHEADER16; typedef struct _BITMAPCOREINFO16 { /* bmci16 */ BITMAPCOREHEADER16 bmciHeader; RGBTRIPLE16 bmciColors[1]; } BITMAPCOREINFO16; typedef BITMAPCOREINFO16 UNALIGNED *PBITMAPCOREINFO16; typedef struct _CLIENTCREATESTRUCT16 { /* ccs16 */ HMENU16 hWindowMenu; WORD idFirstChild; } CLIENTCREATESTRUCT16; typedef CLIENTCREATESTRUCT16 UNALIGNED *PCLIENTCREATESTRUCT16; typedef struct _LOGPALETTE16 { /* logpal16 */ WORD palVersion; WORD palNumEntries; PALETTEENTRY16 palPalEntry[1]; } LOGPALETTE16; typedef LOGPALETTE16 UNALIGNED *PLOGPALETTE16; typedef VPVOID VPLOGPALETTE16; typedef SHORT CATCHBUF16[9]; /* cb16 */ typedef VPSHORT VPCATCHBUF16; typedef struct _OFSTRUCT16 { /* of16 */ BYTE cBytes; BYTE fFixedDisk; WORD nErrCode; BYTE reserved[4]; BYTE szPathName[128]; } OFSTRUCT16; typedef OFSTRUCT16 UNALIGNED *POFSTRUCT16; typedef VPVOID VPOFSTRUCT16; typedef struct _DCB16 { /* dcb16 */ BYTE Id; // Internal Device ID WORD BaudRate; // Baudrate at which runing BYTE ByteSize; // Number of bits/byte, 4-8 BYTE Parity; // 0-4=None,Odd,Even,Mark,Space BYTE StopBits; // 0,1,2 = 1, 1.5, 2 WORD RlsTimeout; // Timeout for RLSD to be set WORD CtsTimeout; // Timeout for CTS to be set WORD DsrTimeout; // Timeout for DSR to be set WORD wFlags; // Bitfield flags /*+++ These are the bitfield definitions in wFlags above -- BYTE fBinary: 1; // Binary Mode (skip EOF check BYTE fRtsDisable:1; // Don't assert RTS at init time BYTE fParity: 1; // Enable parity checking BYTE fOutxCtsFlow:1; // CTS handshaking on output BYTE fOutxDsrFlow:1; // DSR handshaking on output BYTE fDummy: 2; // Reserved BYTE fDtrDisable:1; // Don't assert DTR at init time BYTE fOutX: 1; // Enable output X-ON/X-OFF BYTE fInX: 1; // Enable input X-ON/X-OFF BYTE fPeChar: 1; // Enable Parity Err Replacement BYTE fNull: 1; // Enable Null stripping BYTE fChEvt: 1; // Enable Rx character event. BYTE fDtrflow: 1; // DTR handshake on input BYTE fRtsflow: 1; // RTS handshake on input BYTE fDummy2: 1; // ---*/ CHAR XonChar; // Tx and Rx X-ON character CHAR XoffChar; // Tx and Rx X-OFF character WORD XonLim; // Transmit X-ON threshold WORD XoffLim; // Transmit X-OFF threshold CHAR PeChar; // Parity error replacement char CHAR EofChar; // End of Input character CHAR EvtChar; // Recieved Event character WORD TxDelay; // Amount of time between chars } DCB16; typedef DCB16 UNALIGNED *PDCB16; typedef VPVOID VPDCB16; typedef struct _COMSTAT16 { /* cs16 */ BYTE status; /*+++ These are bitfield definitions defined in status above -- BYTE fCtsHold: 1; // transmit is on CTS hold BYTE fDsrHold: 1; // transmit is on DSR hold BYTE fRlsdHold: 1; // transmit is on RLSD hold BYTE fXoffHold: 1; // received handshake BYTE fXoffSent: 1; // issued handshake BYTE fEof: 1; // end of file character found BYTE fTxim: 1; // character being transmitted ---*/ WORD cbInQue; // count of characters in Rx Queue WORD cbOutQue; // count of characters in Tx Queue } COMSTAT16; typedef COMSTAT16 UNALIGNED *PCOMSTAT16; typedef VPVOID VPCOMSTAT16; typedef struct _BITMAP16 { /* bm16 */ SHORT bmType; SHORT bmWidth; SHORT bmHeight; SHORT bmWidthBytes; BYTE bmPlanes; BYTE bmBitsPixel; VPBYTE bmBits; } BITMAP16; typedef BITMAP16 UNALIGNED *PBITMAP16; typedef VPVOID VPBITMAP16; typedef struct _LOGBRUSH16 { /* lb16 */ WORD lbStyle; DWORD lbColor; SHORT lbHatch; } LOGBRUSH16; typedef LOGBRUSH16 UNALIGNED *PLOGBRUSH16; typedef VPVOID VPLOGBRUSH16; /* ASM LF_FACESIZE equ 32 */ typedef struct _LOGFONT16 { /* lf16 */ SHORT lfHeight; SHORT lfWidth; SHORT lfEscapement; SHORT lfOrientation; SHORT lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; BYTE lfFaceName[LF_FACESIZE]; } LOGFONT16; typedef LOGFONT16 UNALIGNED *PLOGFONT16; typedef VPVOID VPLOGFONT16; /* ASM LF_FULLFACESIZE equ 64 */ /* Structure passed to FONTENUMPROC */ typedef struct _ENUMLOGFONT16 { /* elp16 */ LOGFONT16 elfLogFont; char elfFullName[LF_FULLFACESIZE]; char elfStyle[LF_FACESIZE]; } ENUMLOGFONT16; typedef ENUMLOGFONT16 UNALIGNED *PENUMLOGFONT16; typedef VPVOID VPENUMLOGFONT16; typedef struct _LOGPEN16 { /* lp16 */ WORD lopnStyle; POINT16 lopnWidth; DWORD lopnColor; } LOGPEN16; typedef LOGPEN16 UNALIGNED *PLOGPEN16; typedef VPVOID VPLOGPEN16; typedef RGBQUAD RGBQUAD16; typedef RGBQUAD16 UNALIGNED *PRGBQUAD16; typedef VPVOID VPRGBQUAD16; typedef BITMAPINFOHEADER BITMAPINFOHEADER16; typedef BITMAPINFOHEADER16 UNALIGNED *PBITMAPINFOHEADER16; typedef VPVOID VPBITMAPINFOHEADER16; typedef BITMAPINFO BITMAPINFO16; typedef BITMAPINFO16 UNALIGNED *PBITMAPINFO16; typedef VPVOID VPBITMAPINFO16; typedef struct _TEXTMETRIC16 { /* tm16 */ SHORT tmHeight; SHORT tmAscent; SHORT tmDescent; SHORT tmInternalLeading; SHORT tmExternalLeading; SHORT tmAveCharWidth; SHORT tmMaxCharWidth; SHORT tmWeight; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmPitchAndFamily; BYTE tmCharSet; SHORT tmOverhang; SHORT tmDigitizedAspectX; SHORT tmDigitizedAspectY; } TEXTMETRIC16; typedef TEXTMETRIC16 UNALIGNED *PTEXTMETRIC16; typedef VPVOID VPTEXTMETRIC16; typedef struct _NEWTEXTMETRIC16 { /* ntm16 */ SHORT tmHeight; SHORT tmAscent; SHORT tmDescent; SHORT tmInternalLeading; SHORT tmExternalLeading; SHORT tmAveCharWidth; SHORT tmMaxCharWidth; SHORT tmWeight; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmPitchAndFamily; BYTE tmCharSet; SHORT tmOverhang; SHORT tmDigitizedAspectX; SHORT tmDigitizedAspectY; DWORD ntmFlags; WORD ntmSizeEM; WORD ntmCellHeight; WORD ntmAvgWidth; } NEWTEXTMETRIC16; typedef NEWTEXTMETRIC16 UNALIGNED *PNEWTEXTMETRIC16; typedef VPVOID VPNEWTEXTMETRIC16; typedef struct _PANOSE16 { /* pan16 */ BYTE bFamilyType; BYTE bSerifStyle; BYTE bWeight; BYTE bProportion; BYTE bContrast; BYTE bStrokeVariation; BYTE bArmStyle; BYTE bLetterform; BYTE bMidline; BYTE bXHeight; } PANOSE16; typedef PANOSE16 UNALIGNED *PPANOSE16; typedef struct _OUTLINETEXTMETRIC16 { /* otm16 */ WORD otmSize; TEXTMETRIC16 otmTextMetrics; BYTE otmFiller; PANOSE16 otmPanoseNumber; WORD otmfsSelection; WORD otmfsType; SHORT otmsCharSlopeRise; SHORT otmsCharSlopeRun; SHORT otmItalicAngle; WORD otmEMSquare; SHORT otmAscent; SHORT otmDescent; WORD otmLineGap; WORD otmsCapEmHeight; WORD otmsXHeight; RECT16 otmrcFontBox; SHORT otmMacAscent; SHORT otmMacDescent; WORD otmMacLineGap; WORD otmusMinimumPPEM; POINT16 otmptSubscriptSize; POINT16 otmptSubscriptOffset; POINT16 otmptSuperscriptSize; POINT16 otmptSuperscriptOffset; WORD otmsStrikeoutSize; SHORT otmsStrikeoutPosition; SHORT otmsUnderscorePosition; SHORT otmsUnderscoreSize; WORD otmpFamilyName; WORD otmpFaceName; WORD otmpStyleName; WORD otmpFullName; } OUTLINETEXTMETRIC16; typedef OUTLINETEXTMETRIC16 UNALIGNED *POUTLINETEXTMETRIC16; typedef VPVOID VPOUTLINETEXTMETRIC16; typedef struct _HANDLETABLE16 { /* ht16 */ HAND16 objectHandle[1]; } HANDLETABLE16; typedef HANDLETABLE16 UNALIGNED *PHANDLETABLE16; typedef VPVOID VPHANDLETABLE16; typedef struct _METARECORD16 { /* mr16 */ DWORD rdSize; WORD rdFunction; WORD rdParm[1]; } METARECORD16; typedef METARECORD16 UNALIGNED *PMETARECORD16; typedef VPVOID VPMETARECORD16; typedef struct _DEVMODE16 { /* dm16 */ CHAR dmDeviceName[32]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; SHORT dmOrientation; SHORT dmPaperSize; SHORT dmPaperLength; SHORT dmPaperWidth; SHORT dmScale; SHORT dmCopies; SHORT dmDefaultSource; SHORT dmPrintQuality; SHORT dmColor; SHORT dmDuplex; } DEVMODE16; typedef DEVMODE16 UNALIGNED *PDEVMODE16; typedef VPVOID VPDEVMODE16; typedef struct _DEVMODE31 { /* dm31 */ CHAR dmDeviceName[32]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; SHORT dmOrientation; SHORT dmPaperSize; SHORT dmPaperLength; SHORT dmPaperWidth; SHORT dmScale; SHORT dmCopies; SHORT dmDefaultSource; SHORT dmPrintQuality; SHORT dmColor; SHORT dmDuplex; SHORT dmYResolution; SHORT dmTTOption; } DEVMODE31; typedef DEVMODE31 UNALIGNED *PDEVMODE31; typedef VPVOID VPDEVMODE31; typedef struct _CREATESTRUCT16 { /* cws16 */ VPBYTE vpCreateParams; HAND16 hInstance; HMENU16 hMenu; HWND16 hwndParent; SHORT cy; SHORT cx; SHORT y; SHORT x; DWORD dwStyle; VPSZ vpszWindow; VPSZ vpszClass; DWORD dwExStyle; } CREATESTRUCT16; typedef CREATESTRUCT16 UNALIGNED *PCREATESTRUCT16; typedef VPVOID VPCREATESTRUCT16; typedef struct _DRAWITEMSTRUCT16 { /* dis16 */ WORD CtlType; WORD CtlID; WORD itemID; WORD itemAction; WORD itemState; HWND16 hwndItem; HDC16 hDC; RECT16 rcItem; DWORD itemData; } DRAWITEMSTRUCT16; typedef DRAWITEMSTRUCT16 UNALIGNED *PDRAWITEMSTRUCT16; typedef VPVOID VPDRAWITEMSTRUCT16; typedef struct _MEASUREITEMSTRUCT16 { /* mis16 */ WORD CtlType; WORD CtlID; WORD itemID; WORD itemWidth; WORD itemHeight; DWORD itemData; } MEASUREITEMSTRUCT16; typedef MEASUREITEMSTRUCT16 UNALIGNED *PMEASUREITEMSTRUCT16; typedef VPVOID VPMEASUREITEMSTRUCT16; typedef struct _DELETEITEMSTRUCT16 { /* des16 */ WORD CtlType; WORD CtlID; WORD itemID; HWND16 hwndItem; DWORD itemData; } DELETEITEMSTRUCT16; typedef DELETEITEMSTRUCT16 UNALIGNED *PDELETEITEMSTRUCT16; typedef VPVOID VPDELETEITEMSTRUCT16; typedef struct _COMPAREITEMSTRUCT16 { /* cis16 */ WORD CtlType; WORD CtlID; HWND16 hwndItem; WORD itemID1; DWORD itemData1; WORD itemID2; DWORD itemData2; } COMPAREITEMSTRUCT16; typedef COMPAREITEMSTRUCT16 UNALIGNED *PCOMPAREITEMSTRUCT16; typedef VPVOID VPCOMPAREITEMSTRUCT16; typedef struct _MDICREATESTRUCT16 { /* mcs16 */ VPSZ vpszClass; VPSZ vpszTitle; HTASK16 hOwner; SHORT x; SHORT y; SHORT cx; SHORT cy; LONG style; LONG lParam; // app-defined stuff } MDICREATESTRUCT16; typedef MDICREATESTRUCT16 UNALIGNED *PMDICREATESTRUCT16; typedef VPVOID VPMDICREATESTRUCT16; typedef struct _WINDOWPOS16 { /* wp16 */ HAND16 hwnd; HAND16 hwndInsertAfter; SHORT x; SHORT y; SHORT cx; SHORT cy; WORD flags; } WINDOWPOS16; typedef WINDOWPOS16 UNALIGNED *PWINDOWPOS16; typedef VPVOID VPWINDOWPOS16; typedef struct _NCCALCSIZE_PARAMS16 { /* nccsz16 */ RECT16 rgrc[3]; WINDOWPOS16 UNALIGNED FAR *lppos; } NCCALCSIZE_PARAMS16; typedef NCCALCSIZE_PARAMS16 UNALIGNED *PNCCALCSIZE_PARAMS16; typedef VPVOID VPNCCALCSIZE_PARAMS16; /* * Used by Hook Procs. */ typedef struct _EVENTMSG16 { /* evmsg16 */ WORD message; WORD paramL; WORD paramH; DWORD time; } EVENTMSG16; typedef EVENTMSG16 UNALIGNED *PEVENTMSG16; typedef VPVOID VPEVENTMSG16; typedef struct _DEBUGHOOKINFO16 { /*dbgi16 */ HTASK16 hModuleHook; DWORD reserved; DWORD lParam; WORD wParam; SHORT code; } DEBUGHOOKINFO16; typedef DEBUGHOOKINFO16 UNALIGNED *PDEBUGHOOKINFO16; typedef VPVOID VPDEBUGHOOKINFO16; typedef struct _MOUSEHOOKSTRUCT16 { /* mhs16 */ POINT16 pt; HWND16 hwnd; WORD wHitTestCode; DWORD dwExtraInfo; } MOUSEHOOKSTRUCT16; typedef MOUSEHOOKSTRUCT16 UNALIGNED *PMOUSEHOOKSTRUCT16; typedef VPVOID VPMOUSEHOOKSTRUCT16; typedef struct _CWPSTRUCT16 { /* cwps16 */ LONG lParam; // WORD wParam; // WORD message; // WORD hwnd; // } CWPSTRUCT16; typedef CWPSTRUCT16 UNALIGNED *PCWPSTRUCT16; typedef VPVOID VPCWPSTRUCT16; typedef struct _CBT_CREATEWND16 { /* cbtcw16 */ VPCREATESTRUCT16 vpcs; HWND16 hwndInsertAfter; } CBT_CREATEWND16; typedef CBT_CREATEWND16 UNALIGNED *PCBT_CREATEWND16; typedef VPVOID VPCBT_CREATEWND16; typedef struct _CBTACTIVATESTRUCT16 { /* cbtas16 */ BOOL16 fMouse; HWND16 hWndActive; } CBTACTIVATESTRUCT16; typedef CBTACTIVATESTRUCT16 UNALIGNED *PCBTACTIVATESTRUCT16; typedef VPVOID VPCBTACTIVATESTRUCT16; /* 16-bit resource structures, and their pointers * * Note that some are the same as the 32-bit definition (eg, menus) */ typedef MENUITEMTEMPLATEHEADER MENUITEMTEMPLATEHEADER16; typedef MENUITEMTEMPLATE MENUITEMTEMPLATE16; typedef MENUITEMTEMPLATEHEADER16 *PMENUITEMTEMPLATEHEADER16; typedef MENUITEMTEMPLATE16 *PMENUITEMTEMPLATE16; typedef struct _DLGTEMPLATE16 { /* dt16 */ DWORD style; // BYTE cdit; // this is a WORD in WIN32 WORD x; // WORD y; // WORD cx; // WORD cy; // // CHAR szMenuName[]; // potential pad byte in WIN32 // CHAR szClassName[]; // potential pad byte in WIN32 // CHAR szCaptionText[]; // potential pad byte in WIN32 } DLGTEMPLATE16; typedef DLGTEMPLATE16 UNALIGNED *PDLGTEMPLATE16; typedef VPVOID VPDLGTEMPLATE16; typedef struct _FONTINFO16 { /* fi16 */ SHORT cPoints; // present if DS_SETFONT in dt16.style // CHAR szTypeFace[]; // potential pad byte in WIN32 } FONTINFO16; typedef FONTINFO16 UNALIGNED *PFONTINFO16; typedef VPVOID VPFONTINFO16; typedef struct _DLGITEMTEMPLATE16 { /* dit16 */ WORD x; // structure dword-aligned in WIN32 WORD y; // WORD cx; // WORD cy; // WORD id; // DWORD style; // this was moved to the top in WIN32 // CHAR szClass[]; // potential pad byte in WIN32 // CHAR szText[]; // potential pad byte in WIN32 // BYTE cbExtra; // // BYTE abExtra[]; // } DLGITEMTEMPLATE16; typedef DLGITEMTEMPLATE16 UNALIGNED *PDLGITEMTEMPLATE16; typedef VPVOID VPDLGITEMTEMPLATE16; typedef struct _RESDIRHEADER16 { /* hdir16 */ WORD reserved; // WORD rt; // WORD cResources; // pad word in WIN32 (for size == 8) } RESDIRHEADER16; typedef RESDIRHEADER16 UNALIGNED *PRESDIRHEADER16; typedef VPVOID VPRESDIRHEADER16; typedef struct _ICONDIR16 { /* idir16 */ BYTE Width; // 16, 32, 64 BYTE Height; // 16, 32, 64 BYTE ColorCount; // 2, 8, 16 BYTE reserved; // } ICONDIR16; typedef ICONDIR16 UNALIGNED *PICONDIR16; typedef VPVOID VPICONDIR16; typedef struct _CURSORDIR16 { /* cdir16 */ WORD Width; // WORD Height; // } CURSORDIR16; typedef CURSORDIR16 UNALIGNED *PCURSORDIR16; typedef VPVOID VPCURSORDIR16; /* XLATOFF */ typedef struct _RESDIR16 { /* rdir16 */ union { // ICONDIR16 Icon; // CURSORDIR16 Cursor; // } ResInfo; // WORD Planes; // WORD BitCount; // DWORD BytesInRes; // WORD idIcon; // pad word in WIN32 (for size == 16) } RESDIR16; typedef RESDIR16 UNALIGNED *PRESDIR16; typedef VPVOID VPRESDIR16; typedef struct _COPYDATASTRUCT16 { DWORD dwData; DWORD cbData; PVOID lpData; } COPYDATASTRUCT16; typedef COPYDATASTRUCT16 UNALIGNED *PCOPYDATASTRUCT16; typedef VPVOID VPCOPYDATASTRUCT16; typedef struct _DROPSTRUCT16 { HWND16 hwndSource; HWND16 hwndSink; WORD wFmt; DWORD dwData; POINT16 ptDrop; DWORD dwControlData; } DROPSTRUCT16; typedef DROPSTRUCT16 UNALIGNED *PDROPSTRUCT16; typedef VPVOID VPDROPSTRUCT16; typedef struct _DROPFILESTRUCT16 { WORD pFiles; SHORT x; SHORT y; BOOL16 fNC; } DROPFILESTRUCT16; typedef DROPFILESTRUCT16 UNALIGNED *PDROPFILESTRUCT16; typedef VPVOID VPDROPFILESTRUCT16; typedef BITMAPINFOHEADER ICONRESOURCE; typedef ICONRESOURCE *PICONRESOURCE; typedef BITMAPINFOHEADER16 ICONRESOURCE16; typedef ICONRESOURCE16 UNALIGNED *PICONRESOURCE16; typedef VPVOID VPICONRESOURCE16; typedef struct _CURSORRESOURCE { /* cres */ WORD xHotspot; WORD yHotspot; BITMAPINFOHEADER bmih; } CURSORRESOURCE; typedef CURSORRESOURCE UNALIGNED *PCURSORRESOURCE; typedef CURSORRESOURCE CURSORRESOURCE16; typedef CURSORRESOURCE16 UNALIGNED *PCURSORRESOURCE16; typedef VPVOID VPCURSORRESOURCE16; // This describes the header of the old 2.x cursor/icon resource format; // the header should be followed by an AND mask and then an XOR mask, where: // // Bit value Bit value Bit value Bit value // AND Mask 0 0 1 1 // XOR Mask 0 1 0 1 // --------------------------------------------------------- // Result Black White Transparent Inverted // // Note that we wouldn't have to worry about this old resource format if apps // like WinWord (which apparently weren't fully converted to 3.x) didn't use it! -JTP typedef struct _OLDCURSORICONRESOURCE16 { /* oci16 */ BYTE bFigure; // 1: cursor, 2: bitmap, 3: icon BYTE bIndependent; // 0: device-dependent, 1: independent SHORT xHotspot; // SHORT yHotspot; // SHORT cx; // x-extent SHORT cy; // y-extent SHORT cbWidth; // bytes per row (rows are word-aligned) SHORT clr; // # color planes (should always be 0) } OLDCURSORICONRESOURCE16; typedef OLDCURSORICONRESOURCE16 UNALIGNED *POLDCURSORICONRESOURCE16; typedef VPVOID VPOLDCURSORICONRESOURCE16; /* XLATON */ /* XLATOFF */ #pragma pack() /* XLATON */ /* Undocumented(?) window messages */ #define WM_SETVISIBLE 0x0009 #define WM_ALTTABACTIVE 0x0029 #define WM_ISACTIVEICON 0x0035 #define WM_QUERYPARKICON 0x0036 #define WM_SYNCPAINT 0x0088 #define WM_SYSTIMER 0x0118 #define WM_LBTRACKPOINT 0x0131 #define WM_ENTERMENULOOP 0x0211 #define WM_EXITMENULOOP 0x0212 #define WM_NEXTMENU 0x0213 #define WM_DROPOBJECT 0x022A #define WM_QUERYDROPOBJECT 0x022B #define WM_BEGINDRAG 0x022C #define WM_DRAGLOOP 0x022D #define WM_DRAGSELECT 0x022E #define WM_DRAGMOVE 0x022F #define WM_ENTERSIZEMOVE 0x0231 #define WM_EXITSIZEMOVE 0x0232 /* Old window messages (changed from Win 3.x) */ #ifndef WM_USER #define WM_USER 0x0400 #endif #define OLDEM_GETSEL (WM_USER+0) #define OLDEM_SETSEL (WM_USER+1) #define OLDEM_GETRECT (WM_USER+2) #define OLDEM_SETRECT (WM_USER+3) #define OLDEM_SETRECTNP (WM_USER+4) #define OLDEM_SCROLL (WM_USER+5) #define OLDEM_LINESCROLL (WM_USER+6) #define OLDEM_GETMODIFY (WM_USER+8) #define OLDEM_SETMODIFY (WM_USER+9) #define OLDEM_GETLINECOUNT (WM_USER+10) #define OLDEM_LINEINDEX (WM_USER+11) #define OLDEM_SETHANDLE (WM_USER+12) #define OLDEM_GETHANDLE (WM_USER+13) #define OLDEM_GETTHUMB (WM_USER+14) #define OLDEM_LINELENGTH (WM_USER+17) #define OLDEM_REPLACESEL (WM_USER+18) #define OLDEM_SETFONT (WM_USER+19) #define OLDEM_GETLINE (WM_USER+20) #define OLDEM_LIMITTEXT (WM_USER+21) #define OLDEM_CANUNDO (WM_USER+22) #define OLDEM_UNDO (WM_USER+23) #define OLDEM_FMTLINES (WM_USER+24) #define OLDEM_LINEFROMCHAR (WM_USER+25) #define OLDEM_SETWORDBREAK (WM_USER+26) #define OLDEM_SETTABSTOPS (WM_USER+27) #define OLDEM_SETPASSWORDCHAR (WM_USER+28) #define OLDEM_EMPTYUNDOBUFFER (WM_USER+29) #ifndef WIN31 #define OLDEM_MSGMAX (WM_USER+30) #else #define OLDEM_GETFIRSTVISIBLELINE (WM_USER+30) #define OLDEM_SETREADONLY (WM_USER+31) #define OLDEM_SETWORDBREAKPROC (WM_USER+32) #define OLDEM_GETWORDBREAKPROC (WM_USER+33) #define OLDEM_GETPASSWORDCHAR (WM_USER+34) #define OLDEM_MSGMAX (WM_USER+35) #endif #define OLDBM_GETCHECK (WM_USER+0) #define OLDBM_SETCHECK (WM_USER+1) #define OLDBM_GETSTATE (WM_USER+2) #define OLDBM_SETSTATE (WM_USER+3) #define OLDBM_SETSTYLE (WM_USER+4) #define OLDCB_GETEDITSEL (WM_USER+0) #define OLDCB_LIMITTEXT (WM_USER+1) #define OLDCB_SETEDITSEL (WM_USER+2) #define OLDCB_ADDSTRING (WM_USER+3) #define OLDCB_DELETESTRING (WM_USER+4) #define OLDCB_DIR (WM_USER+5) #define OLDCB_GETCOUNT (WM_USER+6) #define OLDCB_GETCURSEL (WM_USER+7) #define OLDCB_GETLBTEXT (WM_USER+8) #define OLDCB_GETLBTEXTLEN (WM_USER+9) #define OLDCB_INSERTSTRING (WM_USER+10) #define OLDCB_RESETCONTENT (WM_USER+11) #define OLDCB_FINDSTRING (WM_USER+12) #define OLDCB_SELECTSTRING (WM_USER+13) #define OLDCB_SETCURSEL (WM_USER+14) #define OLDCB_SHOWDROPDOWN (WM_USER+15) #define OLDCB_GETITEMDATA (WM_USER+16) #define OLDCB_SETITEMDATA (WM_USER+17) #define OLDCB_GETDROPPEDCONTROLRECT (WM_USER+18) #ifndef WIN31 #define OLDCB_MSGMAX (WM_USER+19) #else #define OLDCB_SETITEMHEIGHT (WM_USER+19) #define OLDCB_GETITEMHEIGHT (WM_USER+20) #define OLDCB_SETEXTENDEDUI (WM_USER+21) #define OLDCB_GETEXTENDEDUI (WM_USER+22) #define OLDCB_GETDROPPEDSTATE (WM_USER+23) #define OLDCB_FINDSTRINGEXACT (WM_USER+24) #define OLDCB_MSGMAX (WM_USER+25) /* ;Internal */ #define OLDCBEC_SETCOMBOFOCUS (WM_USER+26) /* ;Internal */ #define OLDCBEC_KILLCOMBOFOCUS (WM_USER+27) /* ;Internal */ #endif #define OLDLB_ADDSTRING (WM_USER+1) #define OLDLB_INSERTSTRING (WM_USER+2) #define OLDLB_DELETESTRING (WM_USER+3) #define OLDLB_RESETCONTENT (WM_USER+5) #define OLDLB_SETSEL (WM_USER+6) #define OLDLB_SETCURSEL (WM_USER+7) #define OLDLB_GETSEL (WM_USER+8) #define OLDLB_GETCURSEL (WM_USER+9) #define OLDLB_GETTEXT (WM_USER+10) #define OLDLB_GETTEXTLEN (WM_USER+11) #define OLDLB_GETCOUNT (WM_USER+12) #define OLDLB_SELECTSTRING (WM_USER+13) #define OLDLB_DIR (WM_USER+14) #define OLDLB_GETTOPINDEX (WM_USER+15) #define OLDLB_FINDSTRING (WM_USER+16) #define OLDLB_GETSELCOUNT (WM_USER+17) #define OLDLB_GETSELITEMS (WM_USER+18) #define OLDLB_SETTABSTOPS (WM_USER+19) #define OLDLB_GETHORIZONTALEXTENT (WM_USER+20) #define OLDLB_SETHORIZONTALEXTENT (WM_USER+21) #define OLDLB_SETCOLUMNWIDTH (WM_USER+22) #define OLDLB_ADDFILE (WM_USER+23) /* ;Internal */ #define OLDLB_SETTOPINDEX (WM_USER+24) #define OLDLB_GETITEMRECT (WM_USER+25) #define OLDLB_GETITEMDATA (WM_USER+26) #define OLDLB_SETITEMDATA (WM_USER+27) #define OLDLB_SELITEMRANGE (WM_USER+28) #define OLDLB_SETANCHORINDEX (WM_USER+29) /* ;Internal */ #define OLDLB_GETANCHORINDEX (WM_USER+30) /* ;Internal */ #ifndef WIN31 #define OLDLB_MSGMAX (WM_USER+33) #else #define OLDLB_SETCARETINDEX (WM_USER+31) #define OLDLB_GETCARETINDEX (WM_USER+32) #define OLDLB_SETITEMHEIGHT (WM_USER+33) #define OLDLB_GETITEMHEIGHT (WM_USER+34) #define OLDLB_FINDSTRINGEXACT (WM_USER+35) #define OLDLBCB_CARETON (WM_USER+36) /* ;Internal */ #define OLDLBCB_CARETOFF (WM_USER+37) /* ;Internal */ #define OLDLB_MSGMAX (WM_USER+38) /* ;Internal */ #endif #define OLDSBM_SETPOS (WM_USER+0) #define OLDSBM_GETPOS (WM_USER+1) #define OLDSBM_SETRANGE (WM_USER+2) #define OLDSBM_GETRANGE (WM_USER+3) #define OLDSBM_ENABLEARROWS (WM_USER+4) /* WOW Return IDs - Ordering must match wow16cal.asm table */ #define RET_RETURN 0 // return to app #define RET_DEBUGRETURN 1 // return to app after breakpoint #define RET_DEBUG 2 // execute breakpoint, return to WOW #define RET_WNDPROC 3 // IN:all // OUT:DX:AX=wndproc return code #define RET_ENUMFONTPROC 4 // IN:all // OUT:DX:AX=wndproc return code #define RET_ENUMWINDOWPROC 5 // IN:all // OUT:DX:AX=wndproc return code #define RET_LOCALALLOC 6 // IN:wParam=wFlags, lParam=wBytes // OUT:AX=hMem (zero if error) #define RET_LOCALREALLOC 7 // IN:wMsg=hMem, wParam=wFlags, lParam=wBytes // OUT:AX=hMem (zero if error) #define RET_LOCALLOCK 8 // IN:wParam=hMem // OUT:DX:AX=address (zero if error), CX=size #define RET_LOCALUNLOCK 9 // IN:wParam=hMem // OUT:AX=TRUE (FALSE if error) #define RET_LOCALSIZE 10 // IN:wParam=hMem // OUT:AX=size (zero if error) #define RET_LOCALFREE 11 // IN:wParam=hMem // OUT:AX=TRUE (FALSE if error) #define RET_GLOBALALLOCLOCK 12 // IN:wParam=wFlags, lParam=dwBytes // OUT:DX:AX=address (zero if error), BX=hMem #define RET_GLOBALLOCK 13 // IN:wParam=hMem // OUT:DX:AX=address (zero if error), CX=size #define RET_GLOBALUNLOCK 14 // IN:wParam=hMem // OUT:AX=TRUE (FALSE if error) #define RET_GLOBALUNLOCKFREE 15 // IN:lParam=address // OUT:AX=TRUE (FALSE if error) #define RET_FINDRESOURCE 16 // IN:wParam=hTask, lParam=vpName, hwnd/wMsg=vpType // OUT:AX=hResInfo (zero if not found) #define RET_LOADRESOURCE 17 // IN:wParam=hTask, lParam=hResInfo // OUT:AX=hResData #define RET_FREERESOURCE 18 // IN:wParam=hResData // OUT:AX=TRUE (zero if failed) #define RET_LOCKRESOURCE 19 // IN:wParam=hResData // OUT:DX:AX=address (zero if error), CX=size #define RET_UNLOCKRESOURCE 20 // IN:wParam=hResData // OUT:AX=TRUE (zero if resource still locked) #define RET_SIZEOFRESOURCE 21 // IN:wParam=hTask, lParam=hResInfo // OUT:DX:AX=size (zero if error) #define RET_LOCKSEGMENT 22 // IN:wParam=wSeg // OUT:AX=TRUE (FALSE if error) #define RET_UNLOCKSEGMENT 23 // IN:wParam=wSeg // OUT:AX=TRUE (zero if segment still locked) #define RET_ENUMMETAFILEPROC 24 // IN:all // OUT:DX:AX=wndproc return cod #define RET_TASKSTARTED 25 // None #define RET_HOOKPROC 26 // IN:all // OUT:DX:AX=hookproc return code #define RET_SUBCLASSPROC 27 // IN:None // OUT: DX:AX=thunkproc return code #define RET_LINEDDAPROC 28 #define RET_GRAYSTRINGPROC 29 #define RET_FORCETASKEXIT 30 // IN:None // OUT: Does not return #define RET_SETCURDIR 31 // IN:Current Dir // OUT: ax #define RET_ENUMOBJPROC 32 // IN:all // OUT:DX:AX=wndproc return code #define RET_SETCURSORICONFLAG 33 // IN: none #define RET_SETABORTPROC 34 #define RET_ENUMPROPSPROC 35 #define RET_FORCESEGMENTFAULT 36 // Make a segment present // 37 FREE // 38 FREE // 39 FREE // 40 FREE // 41 FREE #define RET_GETEXEPTR 42 // Call KRNL286:GetExePtr // 43 FREE #define RET_FORCETASKFAULT 44 // Force a Fault #define RET_GETEXPWINVER 45 // Call KRNL286:GetExpWinVer #define RET_GETCURDIR 46 // #define RET_GETDOSPDB 47 // IN: nothing // OUT: DX:AX = DOS Win_PDB #define RET_GETDOSSFT 48 // IN: nothing // OUT: DX:AX = DOS SFT (pFileTable) #define RET_FOREGROUNDIDLE 49 // IN: nothing // OUT: NOTHING #define RET_WINSOCKBLOCKHOOK 50 // IN: nothing // OUT: DX:AX = BOOL ret value #define RET_WOWDDEFREEHANDLE 51 #define RET_CHANGESELECTOR 52 // IN: wParam = Segment #define RET_GETMODULEFILENAME 53 // IN: wParam = hInst, lParam = 16:16 Buffer // wMsg = cbBuffer // OUT: AX = length of returned modulename #define RET_SETWORDBREAKPROC 54 // #define RET_WINEXEC 55 #define RET_WOWCALLBACK16 56 // Used by public WOWCallback16 routine #define RET_GETDIBSIZE 57 #define RET_GETDIBFLAGS 58 #define RET_SETDIBSEL 59 #define RET_FREEDIBSEL 60 #define RET_MAX 60 /* Module IDs * * Module IDs are OR'ed with API IDs to produce Call IDs */ #define MOD_MASK 0xF000 #define FUN_MASK 0x0FFF #define MOD_KERNEL 0x0000 #define MOD_DKERNEL 0X0000 // for parameter validation layer #define MOD_USER 0x1000 // #define MOD_DUSER 0x1000 // for parameter validation layer #define MOD_GDI 0x2000 // #define MOD_DGDI 0x2000 // for parameter validation layer #define MOD_KEYBOARD 0x3000 #define MOD_SOUND 0x4000 #define MOD_SHELL 0x5000 // SHELL APIs #define MOD_WINSOCK 0x6000 #define MOD_TOOLHELP 0x7000 #define MOD_MMEDIA 0x8000 #define MOD_COMMDLG 0x9000 #define MOD_LAST 0xA000 // Add New Module ID before this one /* Special Function IDs * * This is used by WIN16 whenever we are returning from a window proc; * see the various include files (wowkrn.h, wowgdi.h, etc) for all the other * function IDs. */ #define FUN_RETURN 0 /* * hiword of wcallID in VDMFRAME - */ #define HI_WCALLID 0x0000 /* Macros for WOW16 DLLs * * Note for GDIThunk args is the metafile function number * and val denotes if function has a DC * */ /* ASM Thunk macro mod,func,callfirst,args,val,emptybuf ifidni , public func ifb func = 0 else func = val endif else externFP WOW16Call externA __MOD_KERNEL externA __MOD_DKERNEL externA __MOD_USER externA __MOD_DUSER externA __MOD_GDI externA __MOD_DGDI externA __MOD_KEYBOARD externA __MOD_SOUND externA __MOD_SHELL externA __MOD_WINSOCK externA __MOD_TOOLHELP externA __MOD_MMEDIA externA __MOD_COMMDLG ifidni , cProc I&func, cBegin else ifidni , cProc I&func, cBegin else ifidni , cProc I&func, cBegin else cProc func, cBegin endif endif endif ; Make the passed in buffer into an empty string by writing null ; to the first position. Win 3.1 IGetWindowText does this, and ; WinFax Pro depends on this behaviour. ifnb push bp mov bp, sp mov bx, [bp+8] mov es, [bp+0Ah] mov byte ptr es:[bx], 0 pop bp endif ifdifi ,<0> call callfirst endif ifnb push args else ifdef func&16 push size func&16 else if1 %out Warning: assuming null arg frame for &mod:&func endif push 0 endif endif tmplabel_&func: push word ptr HI_WCALLID push __MOD_&mod + FUN_&func call WOW16Call ; assert that this is constant size code. 5bytes for 'call wow16call' ; and 3bytes each for the 'push ...'. We use this info in wow32 ; to patchcodewithlpfnw32. .erre (($ - tmplabel_&func) EQ (05h + 03h + 03h)) cEnd endif endm KernelThunk macro func,args,val Thunk KERNEL,func,0,args,val endm DKernelThunk macro func,args,val Thunk DKERNEL,func,0,args,val endm PKernelThunk macro func,callfirst,args,val Thunk KERNEL,func,callfirst,args,val endm UserThunk macro func,args,val Thunk USER,func,0,args,val endm DUserThunk macro func,args,val Thunk DUSER,func,0,args,val endm PUserThunk macro func,callfirst,args,val Thunk USER,func,callfirst,args,val endm PDUserThunk macro func,callfirst,args,val Thunk DUSER,func,callfirst,args,val endm EUserThunk macro func,args,val Thunk USER,func,0,args,val,0 endm GDIThunk macro func,args,val Thunk GDI,func,0,args,val endm DGDIThunk macro func,args,val Thunk DGDI,func,0,args,val endm PGDIThunk macro func,callfirst,args,val Thunk GDI,func,callfirst,args,val endm KbdThunk macro func,args,val Thunk KEYBOARD,func,0,args,val endm SoundThunk macro func,args,val Thunk SOUND,func,0,args,val endm SHELLThunk macro func,args,val Thunk SHELL,func,0,args,val endm MMediaThunk macro func,args,val Thunk MMEDIA,func,0,args,val endm WinsockThunk macro func,args,val Thunk WINSOCK,func,0,args,val endm ToolHelpThunk macro func,args,val Thunk TOOLHELP,func,0,args,val endm CommdlgThunk macro func,args,val Thunk COMMDLG,func,SetWowCommDlg,args,val endm */