wow64: In wow64_NtSetInformationToken forward TokenIntegrityLevel.
[wine.git] / dlls / mshtml / ifacewrap.c
blob3093b645bcafd8b5f10123e576f6ccf283d450a8
1 /*
2 * Copyright 2011 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #if 0
20 #pragma makedep arm64ec_x64
21 #endif
23 #include <stdarg.h>
25 #define COBJMACROS
27 #include "windef.h"
28 #include "winbase.h"
29 #include "winuser.h"
30 #include "ole2.h"
32 #include "wine/asm.h"
33 #include "wine/debug.h"
35 #include "mshtml_private.h"
37 #ifdef __i386__
39 #define DEFINE_WRAPPER_FUNC(n, off, x) \
40 HRESULT wrapper_func_##n(IUnknown*); \
41 __ASM_GLOBAL_FUNC(wrapper_func_##n, \
42 "movl 4(%esp), %eax\n\t" \
43 "movl 4(%eax), %eax\n\t" \
44 "movl %eax, 4(%esp)\n\t" \
45 "movl 0(%eax), %eax\n\t" \
46 "jmp *" #off "(%eax)\n\t")
48 #elif defined(__x86_64__)
50 #define DEFINE_WRAPPER_FUNC(n, x, off) \
51 HRESULT WINAPI wrapper_func_##n(IUnknown*); \
52 __ASM_GLOBAL_FUNC(wrapper_func_##n, \
53 "movq 8(%rcx), %rcx\n\t" \
54 "movq 0(%rcx), %rax\n\t" \
55 "jmp *" #off "(%rax)\n\t")
57 #else
59 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
61 #define DEFINE_WRAPPER_FUNC(n, x, off) \
62 static HRESULT WINAPI wrapper_func_##n(IUnknown *iface) { \
63 ERR("Not implemented for this architecture\n"); \
64 return E_NOTIMPL; \
67 #endif
69 /* DEFINE_WRAPPER_FUNC takes 3 arguments: index in vtbl, 32-bit offset in vtbl and 64-bit offset in vtbl */
70 DEFINE_WRAPPER_FUNC(3, 12, 24)
71 DEFINE_WRAPPER_FUNC(4, 16, 32)
72 DEFINE_WRAPPER_FUNC(5, 20, 40)
73 DEFINE_WRAPPER_FUNC(6, 24, 48)
74 DEFINE_WRAPPER_FUNC(7, 28, 56)
75 DEFINE_WRAPPER_FUNC(8, 32, 64)
76 DEFINE_WRAPPER_FUNC(9, 36, 72)
77 DEFINE_WRAPPER_FUNC(10, 40, 80)
78 DEFINE_WRAPPER_FUNC(11, 44, 88)
79 DEFINE_WRAPPER_FUNC(12, 48, 96)
80 DEFINE_WRAPPER_FUNC(13, 52, 104)
81 DEFINE_WRAPPER_FUNC(14, 56, 112)
82 DEFINE_WRAPPER_FUNC(15, 60, 120)
83 DEFINE_WRAPPER_FUNC(16, 64, 128)
84 DEFINE_WRAPPER_FUNC(17, 68, 136)
85 DEFINE_WRAPPER_FUNC(18, 72, 144)
86 DEFINE_WRAPPER_FUNC(19, 76, 152)
87 DEFINE_WRAPPER_FUNC(20, 80, 160)
88 DEFINE_WRAPPER_FUNC(21, 84, 168)
89 DEFINE_WRAPPER_FUNC(22, 88, 176)
90 DEFINE_WRAPPER_FUNC(23, 92, 184)
91 DEFINE_WRAPPER_FUNC(24, 96, 192)
92 DEFINE_WRAPPER_FUNC(25, 100, 200)
93 DEFINE_WRAPPER_FUNC(26, 104, 208)
94 DEFINE_WRAPPER_FUNC(27, 108, 216)
95 DEFINE_WRAPPER_FUNC(28, 112, 224)
96 DEFINE_WRAPPER_FUNC(29, 116, 232)
97 DEFINE_WRAPPER_FUNC(30, 120, 240)
98 DEFINE_WRAPPER_FUNC(31, 124, 248)
99 DEFINE_WRAPPER_FUNC(32, 128, 256)
100 DEFINE_WRAPPER_FUNC(33, 132, 264)
101 DEFINE_WRAPPER_FUNC(34, 136, 272)
102 DEFINE_WRAPPER_FUNC(35, 140, 280)
103 DEFINE_WRAPPER_FUNC(36, 144, 288)
104 DEFINE_WRAPPER_FUNC(37, 148, 296)
105 DEFINE_WRAPPER_FUNC(38, 152, 304)
106 DEFINE_WRAPPER_FUNC(39, 156, 312)
107 DEFINE_WRAPPER_FUNC(40, 160, 320)
108 DEFINE_WRAPPER_FUNC(41, 164, 328)
109 DEFINE_WRAPPER_FUNC(42, 168, 336)
110 DEFINE_WRAPPER_FUNC(43, 172, 344)
111 DEFINE_WRAPPER_FUNC(44, 176, 352)
112 DEFINE_WRAPPER_FUNC(45, 180, 360)
113 DEFINE_WRAPPER_FUNC(46, 184, 368)
114 DEFINE_WRAPPER_FUNC(47, 188, 376)
115 DEFINE_WRAPPER_FUNC(48, 192, 384)
116 DEFINE_WRAPPER_FUNC(49, 196, 392)
117 DEFINE_WRAPPER_FUNC(50, 200, 400)
118 DEFINE_WRAPPER_FUNC(51, 204, 408)
119 DEFINE_WRAPPER_FUNC(52, 208, 416)
120 DEFINE_WRAPPER_FUNC(53, 212, 424)
121 DEFINE_WRAPPER_FUNC(54, 216, 432)
122 DEFINE_WRAPPER_FUNC(55, 220, 440)
123 DEFINE_WRAPPER_FUNC(56, 224, 448)
124 DEFINE_WRAPPER_FUNC(57, 228, 456)
125 DEFINE_WRAPPER_FUNC(58, 232, 464)
126 DEFINE_WRAPPER_FUNC(59, 236, 472)
127 DEFINE_WRAPPER_FUNC(60, 240, 480)
128 DEFINE_WRAPPER_FUNC(61, 244, 488)
129 DEFINE_WRAPPER_FUNC(62, 248, 496)
130 DEFINE_WRAPPER_FUNC(63, 252, 504)
131 DEFINE_WRAPPER_FUNC(64, 256, 512)
132 DEFINE_WRAPPER_FUNC(65, 260, 520)
133 DEFINE_WRAPPER_FUNC(66, 264, 528)
134 DEFINE_WRAPPER_FUNC(67, 268, 536)
135 DEFINE_WRAPPER_FUNC(68, 272, 544)
136 DEFINE_WRAPPER_FUNC(69, 276, 552)
137 DEFINE_WRAPPER_FUNC(70, 280, 560)
138 DEFINE_WRAPPER_FUNC(71, 284, 568)
139 DEFINE_WRAPPER_FUNC(72, 288, 576)
140 DEFINE_WRAPPER_FUNC(73, 292, 584)
141 DEFINE_WRAPPER_FUNC(74, 296, 592)
142 DEFINE_WRAPPER_FUNC(75, 300, 600)
143 DEFINE_WRAPPER_FUNC(76, 304, 608)
144 DEFINE_WRAPPER_FUNC(77, 308, 616)
145 DEFINE_WRAPPER_FUNC(78, 312, 624)
146 DEFINE_WRAPPER_FUNC(79, 316, 632)
147 DEFINE_WRAPPER_FUNC(80, 320, 640)
148 DEFINE_WRAPPER_FUNC(81, 324, 648)
149 DEFINE_WRAPPER_FUNC(82, 328, 656)
150 DEFINE_WRAPPER_FUNC(83, 332, 664)
151 DEFINE_WRAPPER_FUNC(84, 336, 672)
152 DEFINE_WRAPPER_FUNC(85, 340, 680)
153 DEFINE_WRAPPER_FUNC(86, 344, 688)
154 DEFINE_WRAPPER_FUNC(87, 348, 696)
155 DEFINE_WRAPPER_FUNC(88, 352, 704)
156 DEFINE_WRAPPER_FUNC(89, 356, 712)
157 DEFINE_WRAPPER_FUNC(90, 360, 720)
158 DEFINE_WRAPPER_FUNC(91, 364, 728)
159 DEFINE_WRAPPER_FUNC(92, 368, 736)
160 DEFINE_WRAPPER_FUNC(93, 372, 744)
161 DEFINE_WRAPPER_FUNC(94, 376, 752)
162 DEFINE_WRAPPER_FUNC(95, 380, 760)
163 DEFINE_WRAPPER_FUNC(96, 384, 768)
164 DEFINE_WRAPPER_FUNC(97, 388, 776)
165 DEFINE_WRAPPER_FUNC(98, 392, 784)
166 DEFINE_WRAPPER_FUNC(99, 396, 792)
168 /* The size was found by testing when calls start crashing. It looks like MS wraps up to 100 functions. */
169 const void *iface_wrapper_vtbl[] = {
170 wrapper_QueryInterface,
171 wrapper_AddRef,
172 wrapper_Release,
173 wrapper_func_3,
174 wrapper_func_4,
175 wrapper_func_5,
176 wrapper_func_6,
177 wrapper_func_7,
178 wrapper_func_8,
179 wrapper_func_9,
180 wrapper_func_10,
181 wrapper_func_11,
182 wrapper_func_12,
183 wrapper_func_13,
184 wrapper_func_14,
185 wrapper_func_15,
186 wrapper_func_16,
187 wrapper_func_17,
188 wrapper_func_18,
189 wrapper_func_19,
190 wrapper_func_20,
191 wrapper_func_21,
192 wrapper_func_22,
193 wrapper_func_23,
194 wrapper_func_24,
195 wrapper_func_25,
196 wrapper_func_26,
197 wrapper_func_27,
198 wrapper_func_28,
199 wrapper_func_29,
200 wrapper_func_30,
201 wrapper_func_31,
202 wrapper_func_32,
203 wrapper_func_33,
204 wrapper_func_34,
205 wrapper_func_35,
206 wrapper_func_36,
207 wrapper_func_37,
208 wrapper_func_38,
209 wrapper_func_39,
210 wrapper_func_40,
211 wrapper_func_41,
212 wrapper_func_42,
213 wrapper_func_43,
214 wrapper_func_44,
215 wrapper_func_45,
216 wrapper_func_46,
217 wrapper_func_47,
218 wrapper_func_48,
219 wrapper_func_49,
220 wrapper_func_50,
221 wrapper_func_51,
222 wrapper_func_52,
223 wrapper_func_53,
224 wrapper_func_54,
225 wrapper_func_55,
226 wrapper_func_56,
227 wrapper_func_57,
228 wrapper_func_58,
229 wrapper_func_59,
230 wrapper_func_60,
231 wrapper_func_61,
232 wrapper_func_62,
233 wrapper_func_63,
234 wrapper_func_64,
235 wrapper_func_65,
236 wrapper_func_66,
237 wrapper_func_67,
238 wrapper_func_68,
239 wrapper_func_69,
240 wrapper_func_70,
241 wrapper_func_71,
242 wrapper_func_72,
243 wrapper_func_73,
244 wrapper_func_74,
245 wrapper_func_75,
246 wrapper_func_76,
247 wrapper_func_77,
248 wrapper_func_78,
249 wrapper_func_79,
250 wrapper_func_80,
251 wrapper_func_81,
252 wrapper_func_82,
253 wrapper_func_83,
254 wrapper_func_84,
255 wrapper_func_85,
256 wrapper_func_86,
257 wrapper_func_87,
258 wrapper_func_88,
259 wrapper_func_89,
260 wrapper_func_90,
261 wrapper_func_91,
262 wrapper_func_92,
263 wrapper_func_93,
264 wrapper_func_94,
265 wrapper_func_95,
266 wrapper_func_96,
267 wrapper_func_97,
268 wrapper_func_98,
269 wrapper_func_99