wownt32.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /*
  2. * WOW Generic Thunk API
  3. *
  4. * Copyright (C) 1999 Ulrich Weigand
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with this library; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19. */
  20. #ifndef _WOWNT32_H_
  21. #define _WOWNT32_H_
  22. LPVOID WINAPI WOWGetVDMPointer(DWORD,DWORD,BOOL);
  23. LPVOID WINAPI WOWGetVDMPointerFix(DWORD,DWORD,BOOL);
  24. VOID WINAPI WOWGetVDMPointerUnfix(DWORD);
  25. WORD WINAPI WOWGlobalAlloc16(WORD,DWORD);
  26. WORD WINAPI WOWGlobalFree16(WORD);
  27. DWORD WINAPI WOWGlobalLock16(WORD);
  28. BOOL WINAPI WOWGlobalUnlock16(WORD);
  29. DWORD WINAPI WOWGlobalAllocLock16(WORD,DWORD,WORD *);
  30. WORD WINAPI WOWGlobalUnlockFree16(DWORD);
  31. DWORD WINAPI WOWGlobalLockSize16(WORD,PDWORD);
  32. VOID WINAPI WOWYield16(VOID);
  33. VOID WINAPI WOWDirectedYield16(WORD);
  34. typedef enum
  35. {
  36. WOW_TYPE_HWND,
  37. WOW_TYPE_HMENU,
  38. WOW_TYPE_HDWP,
  39. WOW_TYPE_HDROP,
  40. WOW_TYPE_HDC,
  41. WOW_TYPE_HFONT,
  42. WOW_TYPE_HMETAFILE,
  43. WOW_TYPE_HRGN,
  44. WOW_TYPE_HBITMAP,
  45. WOW_TYPE_HBRUSH,
  46. WOW_TYPE_HPALETTE,
  47. WOW_TYPE_HPEN,
  48. WOW_TYPE_HACCEL,
  49. WOW_TYPE_HTASK,
  50. WOW_TYPE_FULLHWND
  51. } WOW_HANDLE_TYPE;
  52. HANDLE WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE);
  53. WORD WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
  54. #ifdef __WINESRC__
  55. /* under Wine use the kernel functions directly so we don't have to import wow32 */
  56. HANDLE WINAPI K32WOWHandle32(WORD,WOW_HANDLE_TYPE);
  57. WORD WINAPI K32WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
  58. DWORD WINAPI K32WOWCallback16(DWORD,DWORD);
  59. BOOL WINAPI K32WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD);
  60. #define WOWHandle32 K32WOWHandle32
  61. #define WOWHandle16 K32WOWHandle16
  62. #define WOWCallback16 K32WOWCallback16
  63. #define WOWCallback16Ex K32WOWCallback16Ex
  64. #endif
  65. #ifdef __WINESRC__
  66. /* under Wine we use optimized versions where we can */
  67. #define HWND_32(h16) ((HWND) (ULONG_PTR)(h16))
  68. #define HMENU_32(h16) ((HMENU) (ULONG_PTR)(h16))
  69. #define HDWP_32(h16) ((HDWP) (ULONG_PTR)(h16))
  70. #define HDROP_32(h16) ((HDROP) (ULONG_PTR)(h16))
  71. #define HDC_32(h16) ((HDC) (ULONG_PTR)(h16))
  72. #define HFONT_32(h16) ((HFONT) (ULONG_PTR)(h16))
  73. #define HRGN_32(h16) ((HRGN) (ULONG_PTR)(h16))
  74. #define HBITMAP_32(h16) ((HBITMAP) (ULONG_PTR)(h16))
  75. #define HBRUSH_32(h16) ((HBRUSH) (ULONG_PTR)(h16))
  76. #define HPALETTE_32(h16) ((HPALETTE) (ULONG_PTR)(h16))
  77. #define HPEN_32(h16) ((HPEN) (ULONG_PTR)(h16))
  78. #define HACCEL_32(h16) ((HACCEL) (ULONG_PTR)(h16))
  79. #define HWND_16(h32) (LOWORD(h32))
  80. #define HMENU_16(h32) (LOWORD(h32))
  81. #define HDWP_16(h32) (LOWORD(h32))
  82. #define HDROP_16(h32) (LOWORD(h32))
  83. #define HDC_16(h32) (LOWORD(h32))
  84. #define HFONT_16(h32) (LOWORD(h32))
  85. #define HRGN_16(h32) (LOWORD(h32))
  86. #define HBITMAP_16(h32) (LOWORD(h32))
  87. #define HBRUSH_16(h32) (LOWORD(h32))
  88. #define HPALETTE_16(h32) (LOWORD(h32))
  89. #define HPEN_16(h32) (LOWORD(h32))
  90. #define HACCEL_16(h32) (LOWORD(h32))
  91. #else /* __WINESRC__ */
  92. #define HWND_32(h16) ((HWND) (WOWHandle32(h16, WOW_TYPE_HWND)))
  93. #define HMENU_32(h16) ((HMENU) (WOWHandle32(h16, WOW_TYPE_HMENU)))
  94. #define HDWP_32(h16) ((HDWP) (WOWHandle32(h16, WOW_TYPE_HDWP)))
  95. #define HDROP_32(h16) ((HDROP) (WOWHandle32(h16, WOW_TYPE_HDROP)))
  96. #define HDC_32(h16) ((HDC) (WOWHandle32(h16, WOW_TYPE_HDC)))
  97. #define HFONT_32(h16) ((HFONT) (WOWHandle32(h16, WOW_TYPE_HFONT)))
  98. #define HRGN_32(h16) ((HRGN) (WOWHandle32(h16, WOW_TYPE_HRGN)))
  99. #define HBITMAP_32(h16) ((HBITMAP) (WOWHandle32(h16, WOW_TYPE_HBITMAP)))
  100. #define HBRUSH_32(h16) ((HBRUSH) (WOWHandle32(h16, WOW_TYPE_HBRUSH)))
  101. #define HPALETTE_32(h16) ((HPALETTE) (WOWHandle32(h16, WOW_TYPE_HPALETTE)))
  102. #define HPEN_32(h16) ((HPEN) (WOWHandle32(h16, WOW_TYPE_HPEN)))
  103. #define HACCEL_32(h16) ((HACCEL) (WOWHandle32(h16, WOW_TYPE_HACCEL)))
  104. #define HWND_16(h32) (WOWHandle16(h32, WOW_TYPE_HWND))
  105. #define HMENU_16(h32) (WOWHandle16(h32, WOW_TYPE_HMENU))
  106. #define HDWP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDWP))
  107. #define HDROP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDROP))
  108. #define HDC_16(h32) (WOWHandle16(h32, WOW_TYPE_HDC))
  109. #define HFONT_16(h32) (WOWHandle16(h32, WOW_TYPE_HFONT))
  110. #define HRGN_16(h32) (WOWHandle16(h32, WOW_TYPE_HRGN))
  111. #define HBITMAP_16(h32) (WOWHandle16(h32, WOW_TYPE_HBITMAP))
  112. #define HBRUSH_16(h32) (WOWHandle16(h32, WOW_TYPE_HBRUSH))
  113. #define HPALETTE_16(h32) (WOWHandle16(h32, WOW_TYPE_HPALETTE))
  114. #define HPEN_16(h32) (WOWHandle16(h32, WOW_TYPE_HPEN))
  115. #define HACCEL_16(h32) (WOWHandle16(h32, WOW_TYPE_HACCEL))
  116. #endif /* __WINESRC__ */
  117. #define HMETAFILE_32(h16) ((HMETAFILE)(WOWHandle32(h16, WOW_TYPE_HMETAFILE)))
  118. #define HTASK_32(h16) ((DWORD)(WOWHandle32(h16, WOW_TYPE_HTASK)))
  119. #define FULLHWND_32(h16) ((HWND)(WOWHandle32(h16, WOW_TYPE_FULLHWND)))
  120. #define HMETAFILE_16(h32) (WOWHandle16(h32, WOW_TYPE_HMETAFILE))
  121. #define HTASK_16(h32) (WOWHandle16((HANDLE)(h32), WOW_TYPE_HTASK))
  122. #define WCB16_PASCAL 0
  123. #define WCB16_CDECL 1
  124. #define WCB16_MAX_CBARGS 16
  125. /* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */
  126. #define WCB16_REGS 2
  127. #define WCB16_REGS_LONG 4 /* function uses 32-bit lret */
  128. DWORD WINAPI WOWCallback16(DWORD,DWORD);
  129. BOOL WINAPI WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD);
  130. #endif /* _WOWNT32_H_ */