ReactOS 0.4.16-dev-1946-g52006dd
ordinal.c
Go to the documentation of this file.
1/* Unit test suite for SHLWAPI ordinal functions
2 *
3 * Copyright 2004 Jon Griffiths
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include <stdio.h>
21
22#define COBJMACROS
23#define CONST_VTABLE
24#include "wine/test.h"
25#include "winbase.h"
26#include "winerror.h"
27#include "winuser.h"
28#include "ole2.h"
29#include "oaidl.h"
30#include "ocidl.h"
31#include "mlang.h"
32#include "shlwapi.h"
33#include "docobj.h"
34#include "shobjidl.h"
35#include "shlobj.h"
36
37/* Function ptrs for ordinal calls */
39
40static int (WINAPI *pSHSearchMapInt)(const int*,const int*,int,int);
41static HRESULT (WINAPI *pGetAcceptLanguagesA)(LPSTR,LPDWORD);
42
43static HANDLE (WINAPI *pSHAllocShared)(LPCVOID,DWORD,DWORD);
44static LPVOID (WINAPI *pSHLockShared)(HANDLE,DWORD);
45static BOOL (WINAPI *pSHUnlockShared)(LPVOID);
46static BOOL (WINAPI *pSHFreeShared)(HANDLE,DWORD);
47static HANDLE (WINAPI *pSHMapHandle)(HANDLE,DWORD,DWORD,DWORD,DWORD);
48static HRESULT(WINAPIV *pSHPackDispParams)(DISPPARAMS*,VARIANTARG*,UINT,...);
49static HRESULT(WINAPI *pIConnectionPoint_SimpleInvoke)(IConnectionPoint*,DISPID,DISPPARAMS*);
50static HRESULT(WINAPI *pIConnectionPoint_InvokeWithCancel)(IConnectionPoint*,DISPID,DISPPARAMS*,DWORD,DWORD);
51static HRESULT(WINAPI *pConnectToConnectionPoint)(IUnknown*,REFIID,BOOL,IUnknown*, LPDWORD,IConnectionPoint **);
52static HRESULT(WINAPI *pSHPropertyBag_ReadLONG)(IPropertyBag *,LPCWSTR,LPLONG);
53static LONG (WINAPI *pSHSetWindowBits)(HWND, INT, UINT, UINT);
54static INT (WINAPI *pSHFormatDateTimeA)(const FILETIME*, DWORD*, LPSTR, UINT);
55static INT (WINAPI *pSHFormatDateTimeW)(const FILETIME*, DWORD*, LPWSTR, UINT);
56static DWORD (WINAPI *pSHGetObjectCompatFlags)(IUnknown*, const CLSID*);
57static BOOL (WINAPI *pGUIDFromStringA)(LPSTR, CLSID *);
58static HRESULT (WINAPI *pIUnknown_QueryServiceExec)(IUnknown*, REFIID, const GUID*, DWORD, DWORD, VARIANT*, VARIANT*);
59static HRESULT (WINAPI *pIUnknown_ProfferService)(IUnknown*, REFGUID, IServiceProvider*, DWORD*);
60static HWND (WINAPI *pSHCreateWorkerWindowA)(LONG, HWND, DWORD, DWORD, HMENU, LONG_PTR);
61static HRESULT (WINAPI *pSHIShellFolder_EnumObjects)(LPSHELLFOLDER, HWND, SHCONTF, IEnumIDList**);
62static DWORD (WINAPI *pSHGetIniStringW)(LPCWSTR, LPCWSTR, LPWSTR, DWORD, LPCWSTR);
63static BOOL (WINAPI *pSHSetIniStringW)(LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR);
64static HKEY (WINAPI *pSHGetShellKey)(DWORD, LPCWSTR, BOOL);
65static HRESULT (WINAPI *pSKGetValueW)(DWORD, LPCWSTR, LPCWSTR, DWORD*, void*, DWORD*);
66static HRESULT (WINAPI *pSKSetValueW)(DWORD, LPCWSTR, LPCWSTR, DWORD, void*, DWORD);
67static HRESULT (WINAPI *pSKDeleteValueW)(DWORD, LPCWSTR, LPCWSTR);
68static HRESULT (WINAPI *pSKAllocValueW)(DWORD, LPCWSTR, LPCWSTR, DWORD*, void**, DWORD*);
69static HWND (WINAPI *pSHSetParentHwnd)(HWND, HWND);
70static HRESULT (WINAPI *pIUnknown_GetClassID)(IUnknown*, CLSID*);
71static HRESULT (WINAPI *pDllGetVersion)(DLLVERSIONINFO2*);
72
73typedef struct SHELL_USER_SID {
78typedef struct SHELL_USER_PERMISSION {
79
87
89
90static const CHAR ie_international[] = {
91 'S','o','f','t','w','a','r','e','\\',
92 'M','i','c','r','o','s','o','f','t','\\',
93 'I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r','\\',
94 'I','n','t','e','r','n','a','t','i','o','n','a','l',0};
95static const CHAR acceptlanguage[] = {
96 'A','c','c','e','p','t','L','a','n','g','u','a','g','e',0};
97
98typedef struct {
99 int id;
100 const void *args[5];
102
103typedef struct {
105 int count;
106 int alloc;
108
109static void init_call_trace(call_trace_t *ctrace)
110{
111 ctrace->alloc = 10;
112 ctrace->count = 0;
113 ctrace->calls = HeapAlloc(GetProcessHeap(), 0, sizeof(call_entry_t) * ctrace->alloc);
114}
115
116static void free_call_trace(const call_trace_t *ctrace)
117{
118 HeapFree(GetProcessHeap(), 0, ctrace->calls);
119}
120
121static void add_call(call_trace_t *ctrace, int id, const void *arg0,
122 const void *arg1, const void *arg2, const void *arg3, const void *arg4)
123{
124 call_entry_t call;
125
126 call.id = id;
127 call.args[0] = arg0;
128 call.args[1] = arg1;
129 call.args[2] = arg2;
130 call.args[3] = arg3;
131 call.args[4] = arg4;
132
133 if (ctrace->count == ctrace->alloc)
134 {
135 ctrace->alloc *= 2;
136 ctrace->calls = HeapReAlloc(GetProcessHeap(),0, ctrace->calls, ctrace->alloc*sizeof(call_entry_t));
137 }
138
139 ctrace->calls[ctrace->count++] = call;
140}
141
142static void ok_trace_(call_trace_t *texpected, call_trace_t *tgot, int line)
143{
144 if (texpected->count == tgot->count)
145 {
146 INT i;
147 /* compare */
148 for (i = 0; i < texpected->count; i++)
149 {
150 call_entry_t *expected = &texpected->calls[i];
151 call_entry_t *got = &tgot->calls[i];
152 INT j;
153
154 ok_(__FILE__, line)(expected->id == got->id, "got different ids %d: %d, %d\n", i+1, expected->id, got->id);
155
156 for (j = 0; j < 5; j++)
157 {
158 ok_(__FILE__, line)(expected->args[j] == got->args[j], "got different args[%d] for %d: %p, %p\n", j, i+1,
159 expected->args[j], got->args[j]);
160 }
161 }
162 }
163 else
164 ok_(__FILE__, line)(0, "traces length mismatch\n");
165}
166
167#define ok_trace(a, b) ok_trace_(a, b, __LINE__)
168
169/* trace of actually made calls */
171
173{
174 static LPCSTR table[] = {"de,en-gb;q=0.7,en;q=0.3",
175 "de,en;q=0.3,en-gb;q=0.7", /* sorting is ignored */
176 "winetest", /* content is ignored */
177 "de-de,de;q=0.5",
178 "de",
179 NULL};
180
181 DWORD exactsize;
182 char original[512];
183 char language[32];
184 char buffer[64];
185 HKEY hroot = NULL;
186 LONG res_query = ERROR_SUCCESS;
187 LONG lres;
188 HRESULT hr;
189 DWORD maxlen = sizeof(buffer) - 2;
190 DWORD len;
191 LCID lcid;
193 INT i = 0;
194
196
197 /* Get the original Value */
199 if (lres) {
200 skip("RegOpenKey(%s) failed: %ld\n", ie_international, lres);
201 return;
202 }
203 len = sizeof(original);
204 original[0] = 0;
205 res_query = RegQueryValueExA(hroot, acceptlanguage, 0, NULL, (PBYTE)original, &len);
206
208
209 /* Some windows versions use "lang-COUNTRY" as default */
210 memset(language, 0, sizeof(language));
211 len = GetLocaleInfoA(lcid, LOCALE_SISO639LANGNAME, language, sizeof(language));
212
213 if (len) {
214 lstrcatA(language, "-");
215 memset(buffer, 0, sizeof(buffer));
217 lstrcatA(language, buffer);
218 }
219 else
220 {
221 /* LOCALE_SNAME has additional parts in some languages. Try only as last chance */
222 memset(language, 0, sizeof(language));
223 len = GetLocaleInfoA(lcid, LOCALE_SNAME, language, sizeof(language));
224 }
225
226 /* get the default value */
227 len = maxlen;
228 memset(buffer, '#', maxlen);
229 buffer[maxlen] = 0;
230 hr = pGetAcceptLanguagesA( buffer, &len);
231
232 if (hr != S_OK) {
233 win_skip("GetAcceptLanguagesA failed with 0x%lx\n", hr);
234 goto restore_original;
235 }
236
237 if (lstrcmpA(buffer, language)) {
238 /* some windows versions use "lang" or "lang-country" as default */
239 language[0] = 0;
240 hr = LcidToRfc1766A(lcid, language, sizeof(language));
241 ok(hr == S_OK, "LcidToRfc1766A returned 0x%lx and %s\n", hr, language);
242 }
243
244 ok(!lstrcmpA(buffer, language),
245 "have '%s' (searching for '%s')\n", language, buffer);
246
247 if (lstrcmpA(buffer, language)) {
248 win_skip("no more ideas, how to build the default language '%s'\n", buffer);
249 goto restore_original;
250 }
251
252 trace("detected default: %s\n", language);
253 while ((entry = table[i])) {
254
255 exactsize = lstrlenA(entry);
256
257 lres = RegSetValueExA(hroot, acceptlanguage, 0, REG_SZ, (const BYTE *) entry, exactsize + 1);
258 ok(!lres, "got %ld for RegSetValueExA: %s\n", lres, entry);
259
260 /* len includes space for the terminating 0 before vista/w2k8 */
261 len = exactsize + 2;
262 memset(buffer, '#', maxlen);
263 buffer[maxlen] = 0;
264 hr = pGetAcceptLanguagesA( buffer, &len);
265 ok(((hr == E_INVALIDARG) && (len == 0)) ||
266 (SUCCEEDED(hr) &&
267 ((len == exactsize) || (len == exactsize+1)) &&
269 "+2_#%d: got 0x%lx with %ld and %s\n", i, hr, len, buffer);
270
271 len = exactsize + 1;
272 memset(buffer, '#', maxlen);
273 buffer[maxlen] = 0;
274 hr = pGetAcceptLanguagesA( buffer, &len);
275 ok(((hr == E_INVALIDARG) && (len == 0)) ||
276 (SUCCEEDED(hr) &&
277 ((len == exactsize) || (len == exactsize+1)) &&
279 "+1_#%d: got 0x%lx with %ld and %s\n", i, hr, len, buffer);
280
281 len = exactsize;
282 memset(buffer, '#', maxlen);
283 buffer[maxlen] = 0;
284 hr = pGetAcceptLanguagesA( buffer, &len);
285
286 /* There is no space for the string in the registry.
287 When the buffer is large enough, the default language is returned
288
289 When the buffer is too small for that fallback, win7_32 and w2k8_64
290 fail with E_NOT_SUFFICIENT_BUFFER, win8 fails with HRESULT_FROM_WIN32(ERROR_MORE_DATA),
291 other versions succeed and return a partial result while older os succeed
292 and overflow the buffer */
293
294 ok(((hr == E_INVALIDARG) && (len == 0)) ||
295 (((hr == S_OK) && !lstrcmpA(buffer, language) && (len == lstrlenA(language))) ||
296 ((hr == S_OK) && !memcmp(buffer, language, len)) ||
297 ((hr == E_NOT_SUFFICIENT_BUFFER) && !len) ||
298 ((hr == __HRESULT_FROM_WIN32(ERROR_MORE_DATA)) && len == exactsize)),
299 "==_#%d: got 0x%lx with %ld and %s\n", i, hr, len, buffer);
300
301 if (exactsize > 1) {
302 len = exactsize - 1;
303 memset(buffer, '#', maxlen);
304 buffer[maxlen] = 0;
305 hr = pGetAcceptLanguagesA( buffer, &len);
306 ok(((hr == E_INVALIDARG) && (len == 0)) ||
307 (((hr == S_OK) && !lstrcmpA(buffer, language) && (len == lstrlenA(language))) ||
308 ((hr == S_OK) && !memcmp(buffer, language, len)) ||
309 ((hr == E_NOT_SUFFICIENT_BUFFER) && !len) ||
310 ((hr == __HRESULT_FROM_WIN32(ERROR_MORE_DATA)) && len == exactsize - 1)),
311 "-1_#%d: got 0x%lx with %ld and %s\n", i, hr, len, buffer);
312 }
313
314 len = 1;
315 memset(buffer, '#', maxlen);
316 buffer[maxlen] = 0;
317 hr = pGetAcceptLanguagesA( buffer, &len);
318 ok(((hr == E_INVALIDARG) && (len == 0)) ||
319 (((hr == S_OK) && !lstrcmpA(buffer, language) && (len == lstrlenA(language))) ||
320 ((hr == S_OK) && !memcmp(buffer, language, len)) ||
321 ((hr == E_NOT_SUFFICIENT_BUFFER) && !len) ||
323 "=1_#%d: got 0x%lx with %ld and %s\n", i, hr, len, buffer);
324
325 len = maxlen;
326 hr = pGetAcceptLanguagesA( NULL, &len);
327
328 /* w2k3 and below: E_FAIL and untouched len,
329 since w2k8: S_OK and needed size (excluding 0), win8 S_OK and size including 0. */
330 ok( ((hr == S_OK) && ((len == exactsize) || (len == exactsize + 1))) ||
331 ((hr == E_FAIL) && (len == maxlen)),
332 "NULL,max #%d: got 0x%lx with %ld and %s\n", i, hr, len, buffer);
333
334 i++;
335 }
336
337 /* without a value in the registry, a default language is returned */
339
340 len = maxlen;
341 memset(buffer, '#', maxlen);
342 buffer[maxlen] = 0;
343 hr = pGetAcceptLanguagesA( buffer, &len);
344 ok( ((hr == S_OK) && (len == lstrlenA(language))),
345 "max: got 0x%lx with %ld and %s (expected S_OK with %d and '%s'\n",
346 hr, len, buffer, lstrlenA(language), language);
347
348 len = 2;
349 memset(buffer, '#', maxlen);
350 buffer[maxlen] = 0;
351 hr = pGetAcceptLanguagesA( buffer, &len);
352 ok( (((hr == S_OK) || (hr == E_INVALIDARG)) && !memcmp(buffer, language, len)) ||
353 ((hr == E_NOT_SUFFICIENT_BUFFER) && !len) ||
355 "=2: got 0x%lx with %ld and %s\n", hr, len, buffer);
356
357 len = 1;
358 memset(buffer, '#', maxlen);
359 buffer[maxlen] = 0;
360 hr = pGetAcceptLanguagesA( buffer, &len);
361 /* When the buffer is too small, win7_32 and w2k8_64 and above fail with
362 E_NOT_SUFFICIENT_BUFFER, win8 ERROR_CANNOT_COPY,
363 other versions succeed and return a partial 0 terminated result while other versions
364 fail with E_INVALIDARG and return a partial unterminated result */
365 ok( (((hr == S_OK) || (hr == E_INVALIDARG)) && !memcmp(buffer, language, len)) ||
366 ((hr == E_NOT_SUFFICIENT_BUFFER) && !len) ||
368 "=1: got 0x%lx with %ld and %s\n", hr, len, buffer);
369
370 len = 0;
371 memset(buffer, '#', maxlen);
372 buffer[maxlen] = 0;
373 hr = pGetAcceptLanguagesA( buffer, &len);
374 /* w2k3 and below: E_FAIL, since w2k8: E_INVALIDARG, win8 ERROR_CANNOT_COPY */
376 "got 0x%lx\n", hr);
377
378 memset(buffer, '#', maxlen);
379 buffer[maxlen] = 0;
380 hr = pGetAcceptLanguagesA( buffer, NULL);
381 /* w2k3 and below: E_FAIL, since w2k8: E_INVALIDARG */
382 ok((hr == E_FAIL) || (hr == E_INVALIDARG),
383 "got 0x%lx (expected E_FAIL or E_INVALIDARG)\n", hr);
384
385
386 hr = pGetAcceptLanguagesA( NULL, NULL);
387 /* w2k3 and below: E_FAIL, since w2k8: E_INVALIDARG */
388 ok((hr == E_FAIL) || (hr == E_INVALIDARG),
389 "got 0x%lx (expected E_FAIL or E_INVALIDARG)\n", hr);
390
391restore_original:
392 if (!res_query) {
393 len = lstrlenA(original);
394 lres = RegSetValueExA(hroot, acceptlanguage, 0, REG_SZ, (const BYTE *) original, len ? len + 1: 0);
395 ok(!lres, "RegSetValueEx(%s) failed: %ld\n", original, lres);
396 }
397 else
398 {
400 }
401 RegCloseKey(hroot);
402}
403
404static void test_SHSearchMapInt(void)
405{
406 int keys[8], values[8];
407 int i = 0;
408
409 if (!pSHSearchMapInt)
410 return;
411
412 memset(keys, 0, sizeof(keys));
413 memset(values, 0, sizeof(values));
414 keys[0] = 99; values[0] = 101;
415
416 /* NULL key/value lists crash native, so skip testing them */
417
418 /* 1 element */
419 i = pSHSearchMapInt(keys, values, 1, keys[0]);
420 ok(i == values[0], "Len 1, expected %d, got %d\n", values[0], i);
421
422 /* Key doesn't exist */
423 i = pSHSearchMapInt(keys, values, 1, 100);
424 ok(i == -1, "Len 1 - bad key, expected -1, got %d\n", i);
425
426 /* Len = 0 => not found */
427 i = pSHSearchMapInt(keys, values, 0, keys[0]);
428 ok(i == -1, "Len 1 - passed len 0, expected -1, got %d\n", i);
429
430 /* 2 elements, len = 1 */
431 keys[1] = 98; values[1] = 102;
432 i = pSHSearchMapInt(keys, values, 1, keys[1]);
433 ok(i == -1, "Len 1 - array len 2, expected -1, got %d\n", i);
434
435 /* 2 elements, len = 2 */
436 i = pSHSearchMapInt(keys, values, 2, keys[1]);
437 ok(i == values[1], "Len 2, expected %d, got %d\n", values[1], i);
438
439 /* Searches forward */
440 keys[2] = 99; values[2] = 103;
441 i = pSHSearchMapInt(keys, values, 3, keys[0]);
442 ok(i == values[0], "Len 3, expected %d, got %d\n", values[0], i);
443}
444
446{
449};
450
451static void test_alloc_shared(int argc, char **argv)
452{
453 char cmdline[MAX_PATH];
455 STARTUPINFOA si = { 0 };
457 HANDLE hmem, hmem2 = 0;
458 struct shared_struct val, *p;
459 BOOL ret;
460
462 hmem=pSHAllocShared(NULL,10,procid);
463 ok(hmem!=NULL,"SHAllocShared(NULL...) failed: %lu\n", GetLastError());
464 ret = pSHFreeShared(hmem, procid);
465 ok( ret, "SHFreeShared failed: %lu\n", GetLastError());
466
467 val.value = 0x12345678;
468 val.handle = 0;
469 hmem = pSHAllocShared(&val, sizeof(val), procid);
470 ok(hmem!=NULL,"SHAllocShared(NULL...) failed: %lu\n", GetLastError());
471
472 p=pSHLockShared(hmem,procid);
473 ok(p!=NULL,"SHLockShared failed: %lu\n", GetLastError());
474 if (p!=NULL)
475 ok(p->value == 0x12345678, "Wrong value in shared memory: %ld instead of %d\n", p->value, 0x12345678);
476 ret = pSHUnlockShared(p);
477 ok( ret, "SHUnlockShared failed: %lu\n", GetLastError());
478
479 sprintf(cmdline, "%s %s %ld %p", argv[0], argv[1], procid, hmem);
480 ret = CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
481 ok(ret, "could not create child process error: %lu\n", GetLastError());
482 if (ret)
483 {
484 wait_child_process(pi.hProcess);
485 CloseHandle(pi.hThread);
486 CloseHandle(pi.hProcess);
487
488 p = pSHLockShared(hmem, procid);
489 ok(p != NULL,"SHLockShared failed: %lu\n", GetLastError());
490 if (p != NULL && p->value != 0x12345678)
491 {
492 ok(p->value == 0x12345679, "Wrong value in shared memory: %ld instead of %d\n", p->value, 0x12345679);
493 hmem2 = p->handle;
494 ok(hmem2 != NULL, "Expected handle in shared memory\n");
495 }
496 ret = pSHUnlockShared(p);
497 ok(ret, "SHUnlockShared failed: %lu\n", GetLastError());
498 }
499
500 ret = pSHFreeShared(hmem, procid);
501 ok( ret, "SHFreeShared failed: %lu\n", GetLastError());
502
503 if (hmem2)
504 {
505 p = pSHLockShared(hmem2, procid);
506 ok(p != NULL,"SHLockShared failed: %lu\n", GetLastError());
507 if (p != NULL)
508 ok(p->value == 0xDEADBEEF, "Wrong value in shared memory: %ld instead of %d\n", p->value, 0xDEADBEEF);
509 ret = pSHUnlockShared(p);
510 ok(ret, "SHUnlockShared failed: %lu\n", GetLastError());
511
512 ret = pSHFreeShared(hmem2, procid);
513 ok(ret, "SHFreeShared failed: %lu\n", GetLastError());
514 }
515
516 SetLastError(0xdeadbeef);
517 ret = pSHFreeShared(NULL, procid);
518 ok(ret, "SHFreeShared failed: %lu\n", GetLastError());
519 ok(GetLastError() == 0xdeadbeef, "last error should not have changed, got %lu\n", GetLastError());
520}
521
523{
524 struct shared_struct val, *p;
525 HANDLE hmem2;
526 BOOL ret;
527
528 /* test directly accessing shared memory of a remote process */
529 p = pSHLockShared(hmem, procid);
530 ok(p != NULL || broken(p == NULL) /* Windows 7/8 */, "SHLockShared failed: %lu\n", GetLastError());
531 if (p == NULL)
532 {
533 win_skip("Subprocess failed to modify shared memory, skipping test\n");
534 return;
535 }
536
537 ok(p->value == 0x12345678, "Wrong value in shared memory: %ld instead of %d\n", p->value, 0x12345678);
538 p->value++;
539
540 val.value = 0xDEADBEEF;
541 val.handle = 0;
542 p->handle = pSHAllocShared(&val, sizeof(val), procid);
543 ok(p->handle != NULL, "SHAllocShared failed: %lu\n", GetLastError());
544
545 ret = pSHUnlockShared(p);
546 ok(ret, "SHUnlockShared failed: %lu\n", GetLastError());
547
548 /* test SHMapHandle */
549 SetLastError(0xdeadbeef);
550 hmem2 = pSHMapHandle(NULL, procid, GetCurrentProcessId(), 0, 0);
551 ok(hmem2 == NULL, "expected NULL, got new handle\n");
552 ok(GetLastError() == 0xdeadbeef, "last error should not have changed, got %lu\n", GetLastError());
553
554 hmem2 = pSHMapHandle(hmem, procid, GetCurrentProcessId(), 0, 0);
555
556 /* It seems like Windows Vista/2008 uses a different internal implementation
557 * for shared memory, and calling SHMapHandle fails. */
558 ok(hmem2 != NULL || broken(hmem2 == NULL),
559 "SHMapHandle failed: %lu\n", GetLastError());
560 if (hmem2 == NULL)
561 {
562 win_skip("Subprocess failed to map shared memory, skipping test\n");
563 return;
564 }
565
566 p = pSHLockShared(hmem2, GetCurrentProcessId());
567 ok(p != NULL, "SHLockShared failed: %lu\n", GetLastError());
568
569 if (p != NULL)
570 ok(p->value == 0x12345679, "Wrong value in shared memory: %ld instead of %d\n", p->value, 0x12345679);
571
572 ret = pSHUnlockShared(p);
573 ok(ret, "SHUnlockShared failed: %lu\n", GetLastError());
574
575 ret = pSHFreeShared(hmem2, GetCurrentProcessId());
576 ok(ret, "SHFreeShared failed: %lu\n", GetLastError());
577}
578
579static void test_fdsa(void)
580{
581 typedef struct
582 {
583 DWORD num_items; /* Number of elements inserted */
584 void *mem; /* Ptr to array */
585 DWORD blocks_alloced; /* Number of elements allocated */
586 BYTE inc; /* Number of elements to grow by when we need to expand */
587 BYTE block_size; /* Size in bytes of an element */
588 BYTE flags; /* Flags */
589 } FDSA_info;
590
591 BOOL (WINAPI *pFDSA_Initialize)(DWORD block_size, DWORD inc, FDSA_info *info, void *mem,
592 DWORD init_blocks);
593 BOOL (WINAPI *pFDSA_Destroy)(FDSA_info *info);
594 DWORD (WINAPI *pFDSA_InsertItem)(FDSA_info *info, DWORD where, const void *block);
595 BOOL (WINAPI *pFDSA_DeleteItem)(FDSA_info *info, DWORD where);
596
598 int block_size = 10, init_blocks = 4, inc = 2;
599 DWORD ret;
600 char *mem;
601
602 pFDSA_Initialize = (void *)GetProcAddress(hShlwapi, (LPSTR)208);
603 pFDSA_Destroy = (void *)GetProcAddress(hShlwapi, (LPSTR)209);
604 pFDSA_InsertItem = (void *)GetProcAddress(hShlwapi, (LPSTR)210);
605 pFDSA_DeleteItem = (void *)GetProcAddress(hShlwapi, (LPSTR)211);
606
607 mem = HeapAlloc(GetProcessHeap(), 0, block_size * init_blocks);
608 memset(&info, 0, sizeof(info));
609
610 ok(pFDSA_Initialize(block_size, inc, &info, mem, init_blocks), "FDSA_Initialize rets FALSE\n");
611 ok(info.num_items == 0, "num_items = %ld\n", info.num_items);
612 ok(info.mem == mem, "mem = %p\n", info.mem);
613 ok(info.blocks_alloced == init_blocks, "blocks_alloced = %ld\n", info.blocks_alloced);
614 ok(info.inc == inc, "inc = %d\n", info.inc);
615 ok(info.block_size == block_size, "block_size = %d\n", info.block_size);
616 ok(info.flags == 0, "flags = %d\n", info.flags);
617
618 ret = pFDSA_InsertItem(&info, 1234, "1234567890");
619 ok(ret == 0, "ret = %ld\n", ret);
620 ok(info.num_items == 1, "num_items = %ld\n", info.num_items);
621 ok(info.mem == mem, "mem = %p\n", info.mem);
622 ok(info.blocks_alloced == init_blocks, "blocks_alloced = %ld\n", info.blocks_alloced);
623 ok(info.inc == inc, "inc = %d\n", info.inc);
624 ok(info.block_size == block_size, "block_size = %d\n", info.block_size);
625 ok(info.flags == 0, "flags = %d\n", info.flags);
626
627 ret = pFDSA_InsertItem(&info, 1234, "abcdefghij");
628 ok(ret == 1, "ret = %ld\n", ret);
629
630 ret = pFDSA_InsertItem(&info, 1, "klmnopqrst");
631 ok(ret == 1, "ret = %ld\n", ret);
632
633 ret = pFDSA_InsertItem(&info, 0, "uvwxyzABCD");
634 ok(ret == 0, "ret = %ld\n", ret);
635 ok(info.mem == mem, "mem = %p\n", info.mem);
636 ok(info.flags == 0, "flags = %d\n", info.flags);
637
638 /* This next InsertItem will cause shlwapi to allocate its own mem buffer */
639 ret = pFDSA_InsertItem(&info, 0, "EFGHIJKLMN");
640 ok(ret == 0, "ret = %ld\n", ret);
641 ok(info.mem != mem, "mem = %p\n", info.mem);
642 ok(info.blocks_alloced == init_blocks + inc, "blocks_alloced = %ld\n", info.blocks_alloced);
643 ok(info.flags == 0x1, "flags = %d\n", info.flags);
644
645 ok(!memcmp(info.mem, "EFGHIJKLMNuvwxyzABCD1234567890klmnopqrstabcdefghij", 50), "mem %s\n", (char*)info.mem);
646
647 ok(pFDSA_DeleteItem(&info, 2), "rets FALSE\n");
648 ok(info.mem != mem, "mem = %p\n", info.mem);
649 ok(info.blocks_alloced == init_blocks + inc, "blocks_alloced = %ld\n", info.blocks_alloced);
650 ok(info.flags == 0x1, "flags = %d\n", info.flags);
651
652 ok(!memcmp(info.mem, "EFGHIJKLMNuvwxyzABCDklmnopqrstabcdefghij", 40), "mem %s\n", (char*)info.mem);
653
654 ok(pFDSA_DeleteItem(&info, 3), "rets FALSE\n");
655 ok(info.mem != mem, "mem = %p\n", info.mem);
656 ok(info.blocks_alloced == init_blocks + inc, "blocks_alloced = %ld\n", info.blocks_alloced);
657 ok(info.flags == 0x1, "flags = %d\n", info.flags);
658
659 ok(!memcmp(info.mem, "EFGHIJKLMNuvwxyzABCDklmnopqrst", 30), "mem %s\n", (char*)info.mem);
660
661 ok(!pFDSA_DeleteItem(&info, 4), "does not ret FALSE\n");
662
663 /* As shlwapi has allocated memory internally, Destroy will ret FALSE */
664 ok(!pFDSA_Destroy(&info), "FDSA_Destroy does not ret FALSE\n");
665
666
667 /* When Initialize is called with inc = 0, set it to 1 */
668 ok(pFDSA_Initialize(block_size, 0, &info, mem, init_blocks), "FDSA_Initialize rets FALSE\n");
669 ok(info.inc == 1, "inc = %d\n", info.inc);
670
671 /* This time, because shlwapi hasn't had to allocate memory
672 internally, Destroy rets non-zero */
673 ok(pFDSA_Destroy(&info), "FDSA_Destroy rets FALSE\n");
674
675
677}
678
680{
681 static const SHELL_USER_PERMISSION supCurrentUserFull = {
682 { {SECURITY_NULL_SID_AUTHORITY}, 0, 0 },
684 GENERIC_ALL, 0, 0 };
685#define MY_INHERITANCE 0xBE /* invalid value to proof behavior */
686 static const SHELL_USER_PERMISSION supEveryoneDenied = {
690 const SHELL_USER_PERMISSION* rgsup[2] = {
691 &supCurrentUserFull, &supEveryoneDenied,
692 };
694
695 if(!pGetShellSecurityDescriptor) /* vista and later */
696 {
697 win_skip("GetShellSecurityDescriptor not available\n");
698 return;
699 }
700
702 ok(psd==NULL, "GetShellSecurityDescriptor should fail\n");
703 psd = pGetShellSecurityDescriptor(rgsup, 0);
704 ok(psd==NULL, "GetShellSecurityDescriptor should fail, got %p\n", psd);
705
706 SetLastError(0xdeadbeef);
707 psd = pGetShellSecurityDescriptor(rgsup, 2);
708 ok(psd!=NULL, "GetShellSecurityDescriptor failed\n");
709 if (psd!=NULL)
710 {
711 BOOL bHasDacl = FALSE, bDefaulted, ret;
712 PACL pAcl;
713 DWORD dwRev;
715
716 ok(IsValidSecurityDescriptor(psd), "returned value is not valid SD\n");
717
719 ok(ret, "GetSecurityDescriptorControl failed with error %lu\n", GetLastError());
720 ok(0 == (control & SE_SELF_RELATIVE), "SD should be absolute\n");
721
722 ret = GetSecurityDescriptorDacl(psd, &bHasDacl, &pAcl, &bDefaulted);
723 ok(ret, "GetSecurityDescriptorDacl failed with error %lu\n", GetLastError());
724
725 ok(bHasDacl, "SD has no DACL\n");
726 if (bHasDacl)
727 {
728 ok(!bDefaulted, "DACL should not be defaulted\n");
729
730 ok(pAcl != NULL, "NULL DACL!\n");
731 if (pAcl != NULL)
732 {
733 ACL_SIZE_INFORMATION asiSize;
734
735 ok(IsValidAcl(pAcl), "DACL is not valid\n");
736
737 ret = GetAclInformation(pAcl, &asiSize, sizeof(asiSize), AclSizeInformation);
738 ok(ret, "GetAclInformation failed with error %lu\n", GetLastError());
739
740 ok(asiSize.AceCount == 3, "Incorrect number of ACEs: %ld entries\n", asiSize.AceCount);
741 if (asiSize.AceCount == 3)
742 {
743 ACCESS_ALLOWED_ACE *paaa; /* will use for DENIED too */
744
745 ret = GetAce(pAcl, 0, (LPVOID*)&paaa);
746 ok(ret, "GetAce failed with error %lu\n", GetLastError());
748 "Invalid ACE type %d\n", paaa->Header.AceType);
749 ok(paaa->Header.AceFlags == 0, "Invalid ACE flags %x\n", paaa->Header.AceFlags);
750 ok(paaa->Mask == GENERIC_ALL, "Invalid ACE mask %lx\n", paaa->Mask);
751
752 ret = GetAce(pAcl, 1, (LPVOID*)&paaa);
753 ok(ret, "GetAce failed with error %lu\n", GetLastError());
755 "Invalid ACE type %d\n", paaa->Header.AceType);
756 /* first one of two ACEs generated from inheritable entry - without inheritance */
757 ok(paaa->Header.AceFlags == 0, "Invalid ACE flags %x\n", paaa->Header.AceFlags);
758 ok(paaa->Mask == GENERIC_WRITE, "Invalid ACE mask %lx\n", paaa->Mask);
759
760 ret = GetAce(pAcl, 2, (LPVOID*)&paaa);
761 ok(ret, "GetAce failed with error %lu\n", GetLastError());
763 "Invalid ACE type %d\n", paaa->Header.AceType);
764 /* second ACE - with inheritance */
766 "Invalid ACE flags %x\n", paaa->Header.AceFlags);
767 ok(paaa->Mask == GENERIC_READ, "Invalid ACE mask %lx\n", paaa->Mask);
768 }
769 }
770 }
771
772 LocalFree(psd);
773 }
774}
775
776static void test_SHPackDispParams(void)
777{
778 DISPPARAMS params;
779 VARIANT vars[10];
781
782 memset(&params, 0xc0, sizeof(params));
783 memset(vars, 0xc0, sizeof(vars));
784 hres = pSHPackDispParams(&params, vars, 1, VT_I4, 0xdeadbeef);
785 ok(hres == S_OK, "SHPackDispParams failed: %08lx\n", hres);
786 ok(params.cArgs == 1, "params.cArgs = %d\n", params.cArgs);
787 ok(params.cNamedArgs == 0, "params.cNamedArgs = %d\n", params.cArgs);
788 ok(params.rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", params.rgdispidNamedArgs);
789 ok(params.rgvarg == vars, "params.rgvarg = %p\n", params.rgvarg);
790 ok(V_VT(vars) == VT_I4, "V_VT(var) = %d\n", V_VT(vars));
791 ok(V_I4(vars) == 0xdeadbeef, "failed %lx\n", V_I4(vars));
792
793 memset(&params, 0xc0, sizeof(params));
794 hres = pSHPackDispParams(&params, NULL, 0, 0);
795 ok(hres == S_OK, "SHPackDispParams failed: %08lx\n", hres);
796 ok(params.cArgs == 0, "params.cArgs = %d\n", params.cArgs);
797 ok(params.cNamedArgs == 0, "params.cNamedArgs = %d\n", params.cArgs);
798 ok(params.rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", params.rgdispidNamedArgs);
799 ok(params.rgvarg == NULL, "params.rgvarg = %p\n", params.rgvarg);
800
801 memset(vars, 0xc0, sizeof(vars));
802 memset(&params, 0xc0, sizeof(params));
803 hres = pSHPackDispParams(&params, vars, 4, VT_BSTR, (void*)0xdeadbeef, VT_EMPTY, 10,
804 VT_I4, 100, VT_DISPATCH, (void*)0xdeadbeef);
805 ok(hres == S_OK, "SHPackDispParams failed: %08lx\n", hres);
806 ok(params.cArgs == 4, "params.cArgs = %d\n", params.cArgs);
807 ok(params.cNamedArgs == 0, "params.cNamedArgs = %d\n", params.cArgs);
808 ok(params.rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", params.rgdispidNamedArgs);
809 ok(params.rgvarg == vars, "params.rgvarg = %p\n", params.rgvarg);
810 ok(V_VT(vars) == VT_DISPATCH, "V_VT(vars[0]) = %x\n", V_VT(vars));
811 ok(V_I4(vars) == 0xdeadbeef, "V_I4(vars[0]) = %lx\n", V_I4(vars));
812 ok(V_VT(vars+1) == VT_I4, "V_VT(vars[1]) = %d\n", V_VT(vars+1));
813 ok(V_I4(vars+1) == 100, "V_I4(vars[1]) = %lx\n", V_I4(vars+1));
814 ok(V_VT(vars+2) == VT_I4, "V_VT(vars[2]) = %d\n", V_VT(vars+2));
815 ok(V_I4(vars+2) == 10, "V_I4(vars[2]) = %lx\n", V_I4(vars+2));
816 ok(V_VT(vars+3) == VT_BSTR, "V_VT(vars[3]) = %d\n", V_VT(vars+3));
817 ok(V_BSTR(vars+3) == (void*)0xdeadbeef, "V_BSTR(vars[3]) = %p\n", V_BSTR(vars+3));
818}
819
820typedef struct _disp
821{
825
826static inline Disp *impl_from_IDispatch(IDispatch *iface)
827{
828 return CONTAINING_RECORD(iface, Disp, IDispatch_iface);
829}
830
831typedef struct _contain
832{
835
839
841{
842 return CONTAINING_RECORD(iface, Contain, IConnectionPointContainer_iface);
843}
844
845typedef struct _cntptn
846{
849
855
857{
858 return CONTAINING_RECORD(iface, ConPt, IConnectionPoint_iface);
859}
860
861typedef struct _enum
862{
865
869
871{
872 return CONTAINING_RECORD(iface, EnumCon, IEnumConnections_iface);
873}
874
875typedef struct _enumpt
876{
879
880 int idx;
883
885{
886 return CONTAINING_RECORD(iface, EnumPt, IEnumConnectionPoints_iface);
887}
888
889
892 REFIID riid,
893 void **ppvObject)
894{
895 *ppvObject = NULL;
896
898 {
899 *ppvObject = This;
900 }
901
902 if (*ppvObject)
903 {
904 IDispatch_AddRef(This);
905 return S_OK;
906 }
907
908 trace("no interface\n");
909 return E_NOINTERFACE;
910}
911
913{
914 Disp *iface = impl_from_IDispatch(This);
915 return InterlockedIncrement(&iface->refCount);
916}
917
919{
920 Disp *iface = impl_from_IDispatch(This);
921 ULONG ret;
922
924 if (ret == 0)
926 return ret;
927}
928
931 UINT *pctinfo)
932{
933 return ERROR_SUCCESS;
934}
935
938 UINT iTInfo,
939 LCID lcid,
940 ITypeInfo **ppTInfo)
941{
942 return ERROR_SUCCESS;
943}
944
947 REFIID riid,
948 LPOLESTR *rgszNames,
949 UINT cNames,
950 LCID lcid,
951 DISPID *rgDispId)
952{
953 return ERROR_SUCCESS;
954}
955
958 DISPID dispIdMember,
959 REFIID riid,
960 LCID lcid,
961 WORD wFlags,
962 DISPPARAMS *pDispParams,
963 VARIANT *pVarResult,
964 EXCEPINFO *pExcepInfo,
965 UINT *puArgErr)
966{
967 trace("%p %lx %s %lx %x %p %p %p %p\n", This, dispIdMember, wine_dbgstr_guid(riid), lcid, wFlags,
968 pDispParams, pVarResult, pExcepInfo, puArgErr);
969
970 ok(dispIdMember == 0xa0 || dispIdMember == 0xa1, "Unknown dispIdMember\n");
971 ok(pDispParams != NULL, "Invoked with NULL pDispParams\n");
972 ok(wFlags == DISPATCH_METHOD, "Wrong flags %x\n",wFlags);
973 ok(lcid == 0,"Wrong lcid %lx\n",lcid);
974 if (dispIdMember == 0xa0)
975 {
976 ok(pDispParams->cArgs == 0, "params.cArgs = %d\n", pDispParams->cArgs);
977 ok(pDispParams->cNamedArgs == 0, "params.cNamedArgs = %d\n", pDispParams->cArgs);
978 ok(pDispParams->rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
979 ok(pDispParams->rgvarg == NULL, "params.rgvarg = %p\n", pDispParams->rgvarg);
980 }
981 else if (dispIdMember == 0xa1)
982 {
983 ok(pDispParams->cArgs == 2, "params.cArgs = %d\n", pDispParams->cArgs);
984 ok(pDispParams->cNamedArgs == 0, "params.cNamedArgs = %d\n", pDispParams->cArgs);
985 ok(pDispParams->rgdispidNamedArgs == NULL, "params.rgdispidNamedArgs = %p\n", pDispParams->rgdispidNamedArgs);
986 ok(V_VT(pDispParams->rgvarg) == VT_BSTR, "V_VT(var) = %d\n", V_VT(pDispParams->rgvarg));
987 ok(V_I4(pDispParams->rgvarg) == 0xdeadcafe , "failed %p\n", V_BSTR(pDispParams->rgvarg));
988 ok(V_VT(pDispParams->rgvarg+1) == VT_I4, "V_VT(var) = %d\n", V_VT(pDispParams->rgvarg+1));
989 ok(V_I4(pDispParams->rgvarg+1) == 0xdeadbeef, "failed %lx\n", V_I4(pDispParams->rgvarg+1));
990 }
991
992 return ERROR_SUCCESS;
993}
994
995static const IDispatchVtbl disp_vtbl = {
999
1004};
1005
1008 REFIID riid,
1009 void **ppvObject)
1010{
1011 *ppvObject = NULL;
1012
1014 {
1015 *ppvObject = This;
1016 }
1017
1018 if (*ppvObject)
1019 {
1020 IEnumConnections_AddRef(This);
1021 return S_OK;
1022 }
1023
1024 trace("no interface\n");
1025 return E_NOINTERFACE;
1026}
1027
1029{
1031 return InterlockedIncrement(&iface->refCount);
1032}
1033
1035{
1037 ULONG ret;
1038
1040 if (ret == 0)
1042 return ret;
1043}
1044
1047 ULONG cConnections,
1048 LPCONNECTDATA rgcd,
1049 ULONG *pcFetched)
1050{
1052
1053 if (cConnections > 0 && iface->idx < iface->pt->sinkCount)
1054 {
1055 rgcd->pUnk = iface->pt->sink[iface->idx];
1056 IUnknown_AddRef(iface->pt->sink[iface->idx]);
1057 rgcd->dwCookie=0xff;
1058 if (pcFetched)
1059 *pcFetched = 1;
1060 iface->idx++;
1061 return S_OK;
1062 }
1063
1064 return E_FAIL;
1065}
1066
1069 ULONG cConnections)
1070{
1071 return E_FAIL;
1072}
1073
1076{
1077 return E_FAIL;
1078}
1079
1082 IEnumConnections **ppEnum)
1083{
1084 return E_FAIL;
1085}
1086
1087static const IEnumConnectionsVtbl enum_vtbl = {
1088
1092 Enum_Next,
1093 Enum_Skip,
1094 Enum_Reset,
1096};
1097
1100 REFIID riid,
1101 void **ppvObject)
1102{
1103 *ppvObject = NULL;
1104
1106 {
1107 *ppvObject = This;
1108 }
1109
1110 if (*ppvObject)
1111 {
1112 IConnectionPoint_AddRef(This);
1113 return S_OK;
1114 }
1115
1116 trace("no interface\n");
1117 return E_NOINTERFACE;
1118}
1119
1122{
1124 return InterlockedIncrement(&iface->refCount);
1125}
1126
1129{
1131 ULONG ret;
1132
1134 if (ret == 0)
1135 {
1136 if (iface->sinkCount > 0)
1137 {
1138 int i;
1139 for (i = 0; i < iface->sinkCount; i++)
1140 {
1141 if (iface->sink[i])
1142 IUnknown_Release(iface->sink[i]);
1143 }
1144 HeapFree(GetProcessHeap(),0,iface->sink);
1145 }
1147 }
1148 return ret;
1149}
1150
1153 IID *pIID)
1154{
1155 static int i = 0;
1157 if (i==0)
1158 {
1159 i++;
1160 return E_FAIL;
1161 }
1162 else
1163 memcpy(pIID,&iface->id,sizeof(GUID));
1164 return S_OK;
1165}
1166
1170{
1172
1174 return S_OK;
1175}
1176
1179 IUnknown *pUnkSink,
1180 DWORD *pdwCookie)
1181{
1183
1184 if (iface->sinkCount == 0)
1185 iface->sink = HeapAlloc(GetProcessHeap(),0,sizeof(IUnknown*));
1186 else
1187 iface->sink = HeapReAlloc(GetProcessHeap(),0,iface->sink,sizeof(IUnknown*)*(iface->sinkCount+1));
1188 iface->sink[iface->sinkCount] = pUnkSink;
1189 IUnknown_AddRef(pUnkSink);
1190 iface->sinkCount++;
1191 *pdwCookie = iface->sinkCount;
1192 return S_OK;
1193}
1194
1197 DWORD dwCookie)
1198{
1200
1201 if (dwCookie > iface->sinkCount)
1202 return E_FAIL;
1203 else
1204 {
1205 IUnknown_Release(iface->sink[dwCookie-1]);
1206 iface->sink[dwCookie-1] = NULL;
1207 }
1208 return S_OK;
1209}
1210
1213 IEnumConnections **ppEnum)
1214{
1215 EnumCon *ec;
1216
1217 ec = HeapAlloc(GetProcessHeap(),0,sizeof(EnumCon));
1218 ec->IEnumConnections_iface.lpVtbl = &enum_vtbl;
1219 ec->refCount = 1;
1221 ec->idx = 0;
1222 *ppEnum = &ec->IEnumConnections_iface;
1223
1224 return S_OK;
1225}
1226
1227static const IConnectionPointVtbl point_vtbl = {
1231
1237};
1238
1241 REFIID riid,
1242 void **ppvObject)
1243{
1244 *ppvObject = NULL;
1245
1247 {
1248 *ppvObject = This;
1249 }
1250
1251 if (*ppvObject)
1252 {
1253 IEnumConnectionPoints_AddRef(This);
1254 return S_OK;
1255 }
1256
1257 trace("no interface\n");
1258 return E_NOINTERFACE;
1259}
1260
1262{
1264 return InterlockedIncrement(&iface->refCount);
1265}
1266
1268{
1270 ULONG ret;
1271
1273 if (ret == 0)
1275 return ret;
1276}
1277
1280 ULONG cConnections,
1281 IConnectionPoint **rgcd,
1282 ULONG *pcFetched)
1283{
1285
1286 if (cConnections > 0 && iface->idx < iface->container->ptCount)
1287 {
1288 *rgcd = iface->container->pt[iface->idx];
1289 IConnectionPoint_AddRef(iface->container->pt[iface->idx]);
1290 if (pcFetched)
1291 *pcFetched = 1;
1292 iface->idx++;
1293 return S_OK;
1294 }
1295
1296 return E_FAIL;
1297}
1298
1301 ULONG cConnections)
1302{
1303 return E_FAIL;
1304}
1305
1308{
1309 return E_FAIL;
1310}
1311
1314 IEnumConnectionPoints **ppEnumPt)
1315{
1316 return E_FAIL;
1317}
1318
1319static const IEnumConnectionPointsVtbl enumpt_vtbl = {
1320
1328};
1329
1332 REFIID riid,
1333 void **ppvObject)
1334{
1335 *ppvObject = NULL;
1336
1338 {
1339 *ppvObject = This;
1340 }
1341
1342 if (*ppvObject)
1343 {
1344 IConnectionPointContainer_AddRef(This);
1345 return S_OK;
1346 }
1347
1348 trace("no interface\n");
1349 return E_NOINTERFACE;
1350}
1351
1354{
1356 return InterlockedIncrement(&iface->refCount);
1357}
1358
1361{
1363 ULONG ret;
1364
1366 if (ret == 0)
1367 {
1368 if (iface->ptCount > 0)
1369 {
1370 int i;
1371 for (i = 0; i < iface->ptCount; i++)
1372 IConnectionPoint_Release(iface->pt[i]);
1373 HeapFree(GetProcessHeap(),0,iface->pt);
1374 }
1376 }
1377 return ret;
1378}
1379
1382 IEnumConnectionPoints **ppEnum)
1383{
1384 EnumPt *ec;
1385
1386 ec = HeapAlloc(GetProcessHeap(),0,sizeof(EnumPt));
1388 ec->refCount = 1;
1389 ec->idx= 0;
1391 *ppEnum = &ec->IEnumConnectionPoints_iface;
1392
1393 return S_OK;
1394}
1395
1398 REFIID riid,
1399 IConnectionPoint **ppCP)
1400{
1402 ConPt *pt;
1403
1404 if (!IsEqualIID(riid, &IID_NULL) || iface->ptCount ==0)
1405 {
1406 pt = HeapAlloc(GetProcessHeap(),0,sizeof(ConPt));
1407 pt->IConnectionPoint_iface.lpVtbl = &point_vtbl;
1408 pt->refCount = 1;
1409 pt->sinkCount = 0;
1410 pt->sink = NULL;
1411 pt->container = iface;
1412 pt->id = IID_IDispatch;
1413
1414 if (iface->ptCount == 0)
1415 iface->pt =HeapAlloc(GetProcessHeap(),0,sizeof(IUnknown*));
1416 else
1417 iface->pt = HeapReAlloc(GetProcessHeap(),0,iface->pt,sizeof(IUnknown*)*(iface->ptCount+1));
1418 iface->pt[iface->ptCount] = &pt->IConnectionPoint_iface;
1419 iface->ptCount++;
1420
1421 *ppCP = &pt->IConnectionPoint_iface;
1422 }
1423 else
1424 {
1425 *ppCP = iface->pt[0];
1426 IConnectionPoint_AddRef(*ppCP);
1427 }
1428
1429 return S_OK;
1430}
1431
1432static const IConnectionPointContainerVtbl contain_vtbl = {
1436
1439};
1440
1441static void test_IConnectionPoint(void)
1442{
1443 HRESULT rc;
1444 ULONG ref;
1447 Disp *dispatch;
1448 DWORD cookie = 0xffffffff;
1449 DISPPARAMS params;
1450 VARIANT vars[10];
1451
1453 container->IConnectionPointContainer_iface.lpVtbl = &contain_vtbl;
1454 container->refCount = 1;
1455 container->ptCount = 0;
1456 container->pt = NULL;
1457
1458 dispatch = HeapAlloc(GetProcessHeap(),0,sizeof(Disp));
1459 dispatch->IDispatch_iface.lpVtbl = &disp_vtbl;
1460 dispatch->refCount = 1;
1461
1462 rc = pConnectToConnectionPoint((IUnknown*)&dispatch->IDispatch_iface, &IID_NULL, TRUE,
1463 (IUnknown*)&container->IConnectionPointContainer_iface, &cookie, &point);
1464 ok(rc == S_OK, "pConnectToConnectionPoint failed with %lx\n",rc);
1465 ok(point != NULL, "returned ConnectionPoint is NULL\n");
1466 ok(cookie != 0xffffffff, "invalid cookie returned\n");
1467
1468 rc = pIConnectionPoint_SimpleInvoke(point,0xa0,NULL);
1469 ok(rc == S_OK, "pConnectToConnectionPoint failed with %lx\n",rc);
1470
1471 memset(&params, 0xc0, sizeof(params));
1472 memset(vars, 0xc0, sizeof(vars));
1473 rc = pSHPackDispParams(&params, vars, 2, VT_I4, 0xdeadbeef, VT_BSTR, 0xdeadcafe);
1474 ok(rc == S_OK, "SHPackDispParams failed: %08lx\n", rc);
1475
1476 rc = pIConnectionPoint_SimpleInvoke(point,0xa1,&params);
1477 ok(rc == S_OK, "pConnectToConnectionPoint failed with %lx\n",rc);
1478
1479 rc = pConnectToConnectionPoint(NULL, &IID_NULL, FALSE,
1480 (IUnknown*)&container->IConnectionPointContainer_iface, &cookie, NULL);
1481 ok(rc == S_OK, "pConnectToConnectionPoint failed with %lx\n",rc);
1482
1483/* MSDN says this should be required but it crashes on XP
1484 IUnknown_Release(point);
1485*/
1486 ref = IConnectionPointContainer_Release(&container->IConnectionPointContainer_iface);
1487 ok(ref == 0, "leftover IConnectionPointContainer reference %li\n",ref);
1488 ref = IDispatch_Release(&dispatch->IDispatch_iface);
1489 ok(ref == 0, "leftover IDispatch reference %li\n",ref);
1490}
1491
1492typedef struct _propbag
1493{
1496
1498
1500{
1501 return CONTAINING_RECORD(iface, PropBag, IPropertyBag_iface);
1502}
1503
1504
1507 REFIID riid,
1508 void **ppvObject)
1509{
1510 *ppvObject = NULL;
1511
1513 {
1514 *ppvObject = This;
1515 }
1516
1517 if (*ppvObject)
1518 {
1519 IPropertyBag_AddRef(This);
1520 return S_OK;
1521 }
1522
1523 trace("no interface\n");
1524 return E_NOINTERFACE;
1525}
1526
1529{
1531 return InterlockedIncrement(&iface->refCount);
1532}
1533
1536{
1538 ULONG ret;
1539
1541 if (ret == 0)
1543 return ret;
1544}
1545
1548 LPCOLESTR pszPropName,
1549 VARIANT *pVar,
1550 IErrorLog *pErrorLog)
1551{
1552 V_VT(pVar) = VT_BLOB|VT_BYREF;
1553 V_BYREF(pVar) = (LPVOID)0xdeadcafe;
1554 return S_OK;
1555}
1556
1559 LPCOLESTR pszPropName,
1560 VARIANT *pVar)
1561{
1562 return S_OK;
1563}
1564
1565
1566static const IPropertyBagVtbl prop_vtbl = {
1570
1571 Prop_Read,
1573};
1574
1576{
1577 PropBag *pb;
1578 HRESULT rc;
1579 LONG out;
1580 static const WCHAR szName1[] = {'n','a','m','e','1',0};
1581
1582 pb = HeapAlloc(GetProcessHeap(),0,sizeof(PropBag));
1583 pb->refCount = 1;
1584 pb->IPropertyBag_iface.lpVtbl = &prop_vtbl;
1585
1586 out = 0xfeedface;
1587 rc = pSHPropertyBag_ReadLONG(NULL, szName1, &out);
1588 ok(rc == E_INVALIDARG || broken(rc == S_OK), "incorrect return %lx\n",rc);
1589 ok(out == 0xfeedface, "value should not have changed\n");
1590 rc = pSHPropertyBag_ReadLONG(&pb->IPropertyBag_iface, NULL, &out);
1591 ok(rc == E_INVALIDARG || broken(rc == S_OK) || broken(rc == S_FALSE), "incorrect return %lx\n",rc);
1592 ok(out == 0xfeedface, "value should not have changed\n");
1593 rc = pSHPropertyBag_ReadLONG(&pb->IPropertyBag_iface, szName1, NULL);
1594 ok(rc == E_INVALIDARG || broken(rc == S_OK) || broken(rc == S_FALSE), "incorrect return %lx\n",rc);
1595 rc = pSHPropertyBag_ReadLONG(&pb->IPropertyBag_iface, szName1, &out);
1596 ok(rc == DISP_E_BADVARTYPE || broken(rc == S_OK) || broken(rc == S_FALSE), "incorrect return %lx\n",rc);
1597 ok(out == 0xfeedface || broken(out == 0xfeedfa00), "value should not have changed %lx\n",out);
1598 IPropertyBag_Release(&pb->IPropertyBag_iface);
1599}
1600
1601static void test_SHSetWindowBits(void)
1602{
1603 HWND hwnd;
1604 DWORD style, styleold;
1605 WNDCLASSA clsA;
1606
1607 clsA.style = 0;
1609 clsA.cbClsExtra = 0;
1610 clsA.cbWndExtra = 0;
1612 clsA.hIcon = 0;
1613 clsA.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
1614 clsA.hbrBackground = NULL;
1615 clsA.lpszMenuName = NULL;
1616 clsA.lpszClassName = "Shlwapi test class";
1617 RegisterClassA(&clsA);
1618
1619 hwnd = CreateWindowA("Shlwapi test class", "Test", WS_VISIBLE, 0, 0, 100, 100,
1621 ok(IsWindow(hwnd), "failed to create window\n");
1622
1623 /* null window */
1624 SetLastError(0xdeadbeef);
1625 style = pSHSetWindowBits(NULL, GWL_STYLE, 0, 0);
1626 ok(style == 0, "expected 0 retval, got %ld\n", style);
1628 "expected ERROR_INVALID_WINDOW_HANDLE, got %ld\n", GetLastError());
1629
1630 /* zero mask, zero flags */
1631 styleold = GetWindowLongA(hwnd, GWL_STYLE);
1632 style = pSHSetWindowBits(hwnd, GWL_STYLE, 0, 0);
1633 ok(styleold == style, "expected old style\n");
1634 ok(styleold == GetWindowLongA(hwnd, GWL_STYLE), "expected to keep old style\n");
1635
1636 /* test mask */
1637 styleold = GetWindowLongA(hwnd, GWL_STYLE);
1638 ok(styleold & WS_VISIBLE, "expected WS_VISIBLE\n");
1639 style = pSHSetWindowBits(hwnd, GWL_STYLE, WS_VISIBLE, 0);
1640
1641 ok(style == styleold, "expected previous style, got %lx\n", style);
1642 ok((GetWindowLongA(hwnd, GWL_STYLE) & WS_VISIBLE) == 0, "expected updated style\n");
1643
1644 /* test mask, unset style bit used */
1645 styleold = GetWindowLongA(hwnd, GWL_STYLE);
1646 style = pSHSetWindowBits(hwnd, GWL_STYLE, WS_VISIBLE, 0);
1647 ok(style == styleold, "expected previous style, got %lx\n", style);
1648 ok(styleold == GetWindowLongA(hwnd, GWL_STYLE), "expected to keep old style\n");
1649
1650 /* set back with flags */
1651 styleold = GetWindowLongA(hwnd, GWL_STYLE);
1652 style = pSHSetWindowBits(hwnd, GWL_STYLE, WS_VISIBLE, WS_VISIBLE);
1653 ok(style == styleold, "expected previous style, got %lx\n", style);
1654 ok(GetWindowLongA(hwnd, GWL_STYLE) & WS_VISIBLE, "expected updated style\n");
1655
1656 /* reset and try to set without a mask */
1657 pSHSetWindowBits(hwnd, GWL_STYLE, WS_VISIBLE, 0);
1658 ok((GetWindowLongA(hwnd, GWL_STYLE) & WS_VISIBLE) == 0, "expected updated style\n");
1659 styleold = GetWindowLongA(hwnd, GWL_STYLE);
1660 style = pSHSetWindowBits(hwnd, GWL_STYLE, 0, WS_VISIBLE);
1661 ok(style == styleold, "expected previous style, got %lx\n", style);
1662 ok((GetWindowLongA(hwnd, GWL_STYLE) & WS_VISIBLE) == 0, "expected updated style\n");
1663
1665
1666 UnregisterClassA("Shlwapi test class", GetModuleHandleA(NULL));
1667}
1668
1670{
1672 FILETIME filetimeCheck;
1673 SYSTEMTIME universalSystemTime;
1674 CHAR buff[100], buff2[100], buff3[100];
1675 BOOL dstMatch;
1676 DWORD flags;
1677 INT ret;
1678
1679 /* SHFormatDateTime expects input as utc */
1680 TzSpecificLocalTimeToSystemTime(NULL, st, &universalSystemTime);
1681 SystemTimeToFileTime(&universalSystemTime, &filetime);
1682
1683 SystemTimeToFileTime(st, &filetimeCheck);
1684 LocalFileTimeToFileTime(&filetimeCheck, &filetimeCheck);
1685 dstMatch = (filetime.dwHighDateTime == filetimeCheck.dwHighDateTime) &&
1686 (filetime.dwLowDateTime == filetimeCheck.dwLowDateTime);
1687
1688 /* no way to get required buffer length here */
1689 ret = pSHFormatDateTimeA(&filetime, NULL, NULL, 0);
1690 ok(ret == 0, "got %d\n", ret);
1691
1692 SetLastError(0xdeadbeef);
1693 buff[0] = 'a'; buff[1] = 0;
1694 ret = pSHFormatDateTimeA(&filetime, NULL, buff, 0);
1695 ok(ret == 0, "got %d\n", ret);
1696 ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %ld\n", GetLastError());
1697 ok(buff[0] == 'a', "expected same string, got %s\n", buff);
1698
1699 /* flags needs to have FDTF_NOAUTOREADINGORDER for these tests to succeed on Vista+ */
1700
1701 /* all combinations documented as invalid succeeded */
1703 SetLastError(0xdeadbeef);
1704 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1705 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1706 ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %ld\n", GetLastError());
1707
1709 SetLastError(0xdeadbeef);
1710 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1711 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1712 ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %ld\n", GetLastError());
1713
1715 SetLastError(0xdeadbeef);
1716 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1717 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1718 ok(GetLastError() == 0xdeadbeef,
1719 "expected 0xdeadbeef, got %ld\n", GetLastError());
1720
1722 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1723 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1724
1725 buff2[0] = '\0';
1727 ret = pSHFormatDateTimeA(&filetime, &flags, buff2, sizeof(buff2));
1728 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1729 ok(lstrcmpA(buff, buff2) == 0, "expected (%s), got (%s)\n", buff, buff2);
1730
1731 buff2[0] = '\0';
1732 ret = pSHFormatDateTimeA(&filetime, NULL, buff2, sizeof(buff2));
1733 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1734 ok(lstrcmpA(buff, buff2) == 0, "expected (%s), got (%s)\n", buff, buff2);
1735
1736 /* now check returned strings */
1738 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1739 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1741 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1742 ok(lstrcmpA(buff, buff2) == 0 || broken(!dstMatch) /* pre Windows 7 */,
1743 "expected (%s), got (%s)\n", buff2, buff);
1744
1746 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1747 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1748 ret = GetTimeFormatA(LOCALE_USER_DEFAULT, LOCALE_USE_CP_ACP, st, NULL, buff2, sizeof(buff2));
1749 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1750 ok(lstrcmpA(buff, buff2) == 0 || broken(!dstMatch) /* pre Windows 7 */,
1751 "expected (%s), got (%s)\n", buff2, buff);
1752
1753 /* both time flags */
1755 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1756 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1757 ret = GetTimeFormatA(LOCALE_USER_DEFAULT, LOCALE_USE_CP_ACP, st, NULL, buff2, sizeof(buff2));
1758 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1759 ok(lstrcmpA(buff, buff2) == 0 || broken(!dstMatch) /* pre Windows 7 */,
1760 "expected (%s), got (%s)\n", buff2, buff);
1761
1763 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1764 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1766 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1767 ok(lstrcmpA(buff, buff2) == 0, "expected (%s), got (%s)\n", buff2, buff);
1768
1770 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1771 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1773 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1774 ok(lstrcmpA(buff, buff2) == 0, "expected (%s), got (%s)\n", buff2, buff);
1775
1776 /* both date flags */
1778 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1779 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1781 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1782 ok(lstrcmpA(buff, buff2) == 0, "expected (%s), got (%s)\n", buff2, buff);
1783
1784 /* various combinations of date/time flags */
1786 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1787 ok(ret == lstrlenA(buff)+1, "got %d, length %d\n", ret, lstrlenA(buff)+1);
1789 ok(ret == lstrlenA(buff3)+1, "got %d\n", ret);
1790 ok(lstrcmpA(buff3, buff + lstrlenA(buff) - lstrlenA(buff3)) == 0 || broken(!dstMatch) /* pre Windows 7 */,
1791 "expected (%s), got (%s) for time part\n",
1792 buff3, buff + lstrlenA(buff) - lstrlenA(buff3));
1794 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1795 buff[lstrlenA(buff2)] = '\0';
1796 ok(lstrcmpA(buff2, buff) == 0, "expected (%s) got (%s) for date part\n",
1797 buff2, buff);
1798
1800 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1801 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1802 ret = GetTimeFormatA(LOCALE_USER_DEFAULT, LOCALE_USE_CP_ACP, st, NULL, buff3, sizeof(buff3));
1803 ok(ret == lstrlenA(buff3)+1, "got %d\n", ret);
1804 ok(lstrcmpA(buff3, buff + lstrlenA(buff) - lstrlenA(buff3)) == 0 || broken(!dstMatch) /* pre Windows 7 */,
1805 "expected (%s), got (%s) for time part\n",
1806 buff3, buff + lstrlenA(buff) - lstrlenA(buff3));
1808 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1809 buff[lstrlenA(buff2)] = '\0';
1810 ok(lstrcmpA(buff2, buff) == 0, "expected (%s) got (%s) for date part\n",
1811 buff2, buff);
1812
1814 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1815 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1817 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1818 strcat(buff2, " ");
1820 ok(ret == lstrlenA(buff3)+1, "got %d\n", ret);
1821 strcat(buff2, buff3);
1822 ok(lstrcmpA(buff, buff2) == 0 || broken(!dstMatch) /* pre Windows 7 */,
1823 "expected (%s), got (%s)\n", buff2, buff);
1824
1826 ret = pSHFormatDateTimeA(&filetime, &flags, buff, sizeof(buff));
1827 ok(ret == lstrlenA(buff)+1, "got %d\n", ret);
1829 ok(ret == lstrlenA(buff2)+1, "got %d\n", ret);
1830 strcat(buff2, " ");
1831 ret = GetTimeFormatA(LOCALE_USER_DEFAULT, LOCALE_USE_CP_ACP, st, NULL, buff3, sizeof(buff3));
1832 ok(ret == lstrlenA(buff3)+1, "got %d\n", ret);
1833 strcat(buff2, buff3);
1834 ok(lstrcmpA(buff, buff2) == 0 || broken(!dstMatch) /* pre Windows 7 */,
1835 "expected (%s), got (%s)\n", buff2, buff);
1836}
1837
1838static void test_SHFormatDateTimeW(void)
1839{
1841 SYSTEMTIME universalSystemTime;
1842 WCHAR buff[100], buff2[100], buff3[100], *p1, *p2;
1843 SYSTEMTIME st;
1844 DWORD flags;
1845 INT ret;
1846 static const WCHAR spaceW[] = {' ',0};
1847#define UNICODE_LTR_MARK 0x200e
1848#define UNICODE_RTL_MARK 0x200f
1849
1850if (0)
1851{
1852 /* crashes on native */
1853 pSHFormatDateTimeW(NULL, NULL, NULL, 0);
1854}
1855
1856 GetLocalTime(&st);
1857 /* SHFormatDateTime expects input as utc */
1858 TzSpecificLocalTimeToSystemTime(NULL, &st, &universalSystemTime);
1859 SystemTimeToFileTime(&universalSystemTime, &filetime);
1860
1861 /* no way to get required buffer length here */
1862 SetLastError(0xdeadbeef);
1863 ret = pSHFormatDateTimeW(&filetime, NULL, NULL, 0);
1864 ok(ret == 0, "expected 0, got %d\n", ret);
1865 ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %ld\n", GetLastError());
1866
1867 SetLastError(0xdeadbeef);
1868 buff[0] = 'a'; buff[1] = 0;
1869 ret = pSHFormatDateTimeW(&filetime, NULL, buff, 0);
1870 ok(ret == 0, "expected 0, got %d\n", ret);
1871 ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %ld\n", GetLastError());
1872 ok(buff[0] == 'a', "expected same string\n");
1873
1874 /* all combinations documented as invalid succeeded */
1876 SetLastError(0xdeadbeef);
1877 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1878 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1879 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1880 ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %ld\n", GetLastError());
1881
1883 SetLastError(0xdeadbeef);
1884 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1885 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1886 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1887 ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %ld\n", GetLastError());
1888
1890 SetLastError(0xdeadbeef);
1891 buff[0] = 0; /* NT4 doesn't clear the buffer on failure */
1892 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1893 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1894 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1895 ok(GetLastError() == 0xdeadbeef,
1896 "expected 0xdeadbeef, got %ld\n", GetLastError());
1897
1898 /* now check returned strings */
1900 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1901 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1902 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1903 SetLastError(0xdeadbeef);
1905 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1906 ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
1907
1909 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1910 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1911 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1912 ret = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, buff2, ARRAY_SIZE(buff2));
1913 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1914 ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
1915
1916 /* both time flags */
1918 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1919 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1920 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1921 ret = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, buff2, ARRAY_SIZE(buff2));
1922 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1923 ok(lstrcmpW(buff, buff2) == 0, "expected equal string\n");
1924
1926 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1927 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1928 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1930 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1931 ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
1932
1934 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1935 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1936 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1938 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1939 ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
1940
1941 /* both date flags */
1943 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1944 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1945 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1947 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1948 ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
1949
1950 /* various combinations of date/time flags */
1952 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1953 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1954 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1956 ok(ret == lstrlenW(buff3)+1, "expected %d, got %d\n", lstrlenW(buff3)+1, ret);
1957 ok(lstrcmpW(buff3, buff + lstrlenW(buff) - lstrlenW(buff3)) == 0,
1958 "expected (%s), got (%s) for time part\n",
1959 wine_dbgstr_w(buff3), wine_dbgstr_w(buff + lstrlenW(buff) - lstrlenW(buff3)));
1961 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1962 p1 = buff;
1963 p2 = buff2;
1964 while (*p2 != '\0')
1965 {
1966 while (*p1 == UNICODE_LTR_MARK || *p1 == UNICODE_RTL_MARK)
1967 p1++;
1968 while (*p2 == UNICODE_LTR_MARK || *p2 == UNICODE_RTL_MARK)
1969 p2++;
1970 p1++;
1971 p2++;
1972 }
1973 *p1 = '\0';
1974 ok(lstrcmpW(buff2, buff) == 0, "expected (%s) got (%s) for date part\n",
1976
1978 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
1979 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
1980 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
1981 ret = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, buff3, ARRAY_SIZE(buff3));
1982 ok(ret == lstrlenW(buff3)+1, "expected %d, got %d\n", lstrlenW(buff3)+1, ret);
1983 ok(lstrcmpW(buff3, buff + lstrlenW(buff) - lstrlenW(buff3)) == 0,
1984 "expected (%s), got (%s) for time part\n",
1985 wine_dbgstr_w(buff3), wine_dbgstr_w(buff + lstrlenW(buff) - lstrlenW(buff3)));
1987 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
1988 p1 = buff;
1989 p2 = buff2;
1990 while (*p2 != '\0')
1991 {
1992 while (*p1 == UNICODE_LTR_MARK || *p1 == UNICODE_RTL_MARK)
1993 p1++;
1994 while (*p2 == UNICODE_LTR_MARK || *p2 == UNICODE_RTL_MARK)
1995 p2++;
1996 p1++;
1997 p2++;
1998 }
1999 *p1 = '\0';
2000 ok(lstrcmpW(buff2, buff) == 0, "expected (%s) got (%s) for date part\n",
2002
2004 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
2005 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
2006 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
2008 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
2009 lstrcatW(buff2, spaceW);
2011 ok(ret == lstrlenW(buff3)+1, "expected %d, got %d\n", lstrlenW(buff3)+1, ret);
2012 lstrcatW(buff2, buff3);
2013 ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
2014
2016 ret = pSHFormatDateTimeW(&filetime, &flags, buff, ARRAY_SIZE(buff));
2017 ok(ret == lstrlenW(buff)+1 || ret == lstrlenW(buff),
2018 "expected %d or %d, got %d\n", lstrlenW(buff)+1, lstrlenW(buff), ret);
2020 ok(ret == lstrlenW(buff2)+1, "expected %d, got %d\n", lstrlenW(buff2)+1, ret);
2021 lstrcatW(buff2, spaceW);
2022 ret = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, buff3, ARRAY_SIZE(buff3));
2023 ok(ret == lstrlenW(buff3)+1, "expected %d, got %d\n", lstrlenW(buff3)+1, ret);
2024 lstrcatW(buff2, buff3);
2025 ok(lstrcmpW(buff, buff2) == 0, "expected equal strings\n");
2026}
2027
2029{
2030 struct compat_value {
2031 CHAR nameA[30];
2032 DWORD value;
2033 };
2034
2035 struct compat_value values[] = {
2036 { "OTNEEDSSFCACHE", 0x1 },
2037 { "NO_WEBVIEW", 0x2 },
2038 { "UNBINDABLE", 0x4 },
2039 { "PINDLL", 0x8 },
2040 { "NEEDSFILESYSANCESTOR", 0x10 },
2041 { "NOTAFILESYSTEM", 0x20 },
2042 { "CTXMENU_NOVERBS", 0x40 },
2043 { "CTXMENU_LIMITEDQI", 0x80 },
2044 { "COCREATESHELLFOLDERONLY", 0x100 },
2045 { "NEEDSSTORAGEANCESTOR", 0x200 },
2046 { "NOLEGACYWEBVIEW", 0x400 },
2047 { "CTXMENU_XPQCMFLAGS", 0x1000 },
2048 { "NOIPROPERTYSTORE", 0x2000 }
2049 };
2050
2051 static const char compat_path[] = "Software\\Microsoft\\Windows\\CurrentVersion\\ShellCompatibility\\Objects";
2052 CHAR keyA[39]; /* {CLSID} */
2053 HKEY root;
2054 DWORD ret;
2055 int i;
2056
2057 /* null args */
2058 ret = pSHGetObjectCompatFlags(NULL, NULL);
2059 ok(ret == 0, "got %ld\n", ret);
2060
2061 ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, compat_path, &root);
2062 if (ret != ERROR_SUCCESS)
2063 {
2064 skip("No compatibility class data found\n");
2065 return;
2066 }
2067
2068 for (i = 0; RegEnumKeyA(root, i, keyA, sizeof(keyA)) == ERROR_SUCCESS; i++)
2069 {
2070 HKEY clsid_key;
2071
2072 if (RegOpenKeyA(root, keyA, &clsid_key) == ERROR_SUCCESS)
2073 {
2074 CHAR valueA[30];
2075 DWORD expected = 0, got, length = sizeof(valueA);
2076 CLSID clsid;
2077 int v;
2078
2079 for (v = 0; RegEnumValueA(clsid_key, v, valueA, &length, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; v++)
2080 {
2081 int j;
2082
2083 for (j = 0; j < ARRAY_SIZE(values); j++)
2084 if (lstrcmpA(values[j].nameA, valueA) == 0)
2085 {
2086 expected |= values[j].value;
2087 break;
2088 }
2089
2090 length = sizeof(valueA);
2091 }
2092
2093 pGUIDFromStringA(keyA, &clsid);
2094 got = pSHGetObjectCompatFlags(NULL, &clsid);
2095 ok(got == expected, "got 0x%08lx, expected 0x%08lx. Key %s\n", got, expected, keyA);
2096
2097 RegCloseKey(clsid_key);
2098 }
2099 }
2100
2102}
2103
2104typedef struct {
2108
2110{
2111 return CONTAINING_RECORD(iface, IOleCommandTargetImpl, IOleCommandTarget_iface);
2112}
2113
2114static const IOleCommandTargetVtbl IOleCommandTargetImpl_Vtbl;
2115
2117{
2119
2120 obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*obj));
2121 obj->IOleCommandTarget_iface.lpVtbl = &IOleCommandTargetImpl_Vtbl;
2122 obj->ref = 1;
2123
2124 return &obj->IOleCommandTarget_iface;
2125}
2126
2128{
2130
2131 if (IsEqualIID(riid, &IID_IUnknown) ||
2132 IsEqualIID(riid, &IID_IOleCommandTarget))
2133 {
2134 *ppvObj = This;
2135 }
2136
2137 if(*ppvObj)
2138 {
2139 IOleCommandTarget_AddRef(iface);
2140 return S_OK;
2141 }
2142
2143 return E_NOINTERFACE;
2144}
2145
2147{
2149 return InterlockedIncrement(&This->ref);
2150}
2151
2153{
2156
2157 if (!ref)
2158 {
2160 return 0;
2161 }
2162 return ref;
2163}
2164
2166 IOleCommandTarget *iface, const GUID *group, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
2167{
2168 return E_NOTIMPL;
2169}
2170
2172 IOleCommandTarget *iface,
2173 const GUID *CmdGroup,
2174 DWORD nCmdID,
2175 DWORD nCmdexecopt,
2176 VARIANT *pvaIn,
2177 VARIANT *pvaOut)
2178{
2179 add_call(&trace_got, 3, CmdGroup, (void*)(DWORD_PTR)nCmdID, (void*)(DWORD_PTR)nCmdexecopt, pvaIn, pvaOut);
2180 return S_OK;
2181}
2182
2183static const IOleCommandTargetVtbl IOleCommandTargetImpl_Vtbl =
2184{
2190};
2191
2192typedef struct {
2193 IServiceProvider IServiceProvider_iface;
2194 LONG ref;
2196
2198{
2199 return CONTAINING_RECORD(iface, IServiceProviderImpl, IServiceProvider_iface);
2200}
2201
2202typedef struct {
2206
2208{
2209 return CONTAINING_RECORD(iface, IProfferServiceImpl, IProfferService_iface);
2210}
2211
2212
2213static const IServiceProviderVtbl IServiceProviderImpl_Vtbl;
2214static const IProfferServiceVtbl IProfferServiceImpl_Vtbl;
2215
2217{
2219
2220 obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*obj));
2221 obj->IServiceProvider_iface.lpVtbl = &IServiceProviderImpl_Vtbl;
2222 obj->ref = 1;
2223
2224 return &obj->IServiceProvider_iface;
2225}
2226
2228{
2230
2231 obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*obj));
2232 obj->IProfferService_iface.lpVtbl = &IProfferServiceImpl_Vtbl;
2233 obj->ref = 1;
2234
2235 return &obj->IProfferService_iface;
2236}
2237
2239{
2241
2242 if (IsEqualIID(riid, &IID_IUnknown) ||
2243 IsEqualIID(riid, &IID_IServiceProvider))
2244 {
2245 *ppvObj = This;
2246 }
2247
2248 if(*ppvObj)
2249 {
2250 IServiceProvider_AddRef(iface);
2251 /* native uses redefined IID_IServiceProvider symbol, so we can't compare pointers */
2252 if (IsEqualIID(riid, &IID_IServiceProvider))
2253 add_call(&trace_got, 1, iface, &IID_IServiceProvider, 0, 0, 0);
2254 return S_OK;
2255 }
2256
2257 return E_NOINTERFACE;
2258}
2259
2261{
2263 return InterlockedIncrement(&This->ref);
2264}
2265
2267{
2270
2271 if (!ref)
2272 {
2274 return 0;
2275 }
2276 return ref;
2277}
2278
2280 IServiceProvider *iface, REFGUID service, REFIID riid, void **ppv)
2281{
2282 /* native uses redefined pointer for IID_IOleCommandTarget, not one from uuid.lib */
2283 if (IsEqualIID(riid, &IID_IOleCommandTarget))
2284 {
2285 add_call(&trace_got, 2, iface, service, &IID_IOleCommandTarget, 0, 0);
2287 }
2288 if (IsEqualIID(riid, &IID_IProfferService))
2289 {
2290 if (IsEqualIID(service, &IID_IProfferService))
2291 add_call(&trace_got, 2, &IID_IProfferService, &IID_IProfferService, 0, 0, 0);
2293 }
2294 return S_OK;
2295}
2296
2297static const IServiceProviderVtbl IServiceProviderImpl_Vtbl =
2298{
2303};
2304
2306{
2307 IServiceProvider *provider;
2308 static const GUID dummy_serviceid = { 0xdeadbeef };
2309 static const GUID dummy_groupid = { 0xbeefbeef };
2310 call_trace_t trace_expected;
2311 HRESULT hr;
2312
2313 provider = IServiceProviderImpl_Construct();
2314
2315 /* null source pointer */
2316 hr = pIUnknown_QueryServiceExec(NULL, &dummy_serviceid, &dummy_groupid, 0, 0, 0, 0);
2317 ok(hr == E_FAIL ||
2318 hr == E_NOTIMPL, /* win 8 */
2319 "got 0x%08lx\n", hr);
2320
2321 /* expected trace:
2322 IUnknown_QueryServiceExec( ptr1, serviceid, groupid, arg1, arg2, arg3, arg4);
2323 -> IUnknown_QueryInterface( ptr1, &IID_IServiceProvider, &prov );
2324 -> IServiceProvider_QueryService( prov, serviceid, &IID_IOleCommandTarget, &obj );
2325 -> IOleCommandTarget_Exec( obj, groupid, arg1, arg2, arg3, arg4 );
2326 */
2327 init_call_trace(&trace_expected);
2328
2329 add_call(&trace_expected, 1, provider, &IID_IServiceProvider, 0, 0, 0);
2330 add_call(&trace_expected, 2, provider, &dummy_serviceid, &IID_IOleCommandTarget, 0, 0);
2331 add_call(&trace_expected, 3, &dummy_groupid, (void*)0x1, (void*)0x2, (void*)0x3, (void*)0x4);
2332
2334 hr = pIUnknown_QueryServiceExec((IUnknown*)provider, &dummy_serviceid, &dummy_groupid, 0x1, 0x2, (void*)0x3, (void*)0x4);
2335 ok(hr == S_OK, "got 0x%08lx\n", hr);
2336
2337 ok_trace(&trace_expected, &trace_got);
2338
2339 free_call_trace(&trace_expected);
2341
2342 IServiceProvider_Release(provider);
2343}
2344
2345
2347{
2349
2350 if (IsEqualIID(riid, &IID_IUnknown) ||
2351 IsEqualIID(riid, &IID_IProfferService))
2352 {
2353 *ppvObj = This;
2354 }
2355 else if (IsEqualIID(riid, &IID_IServiceProvider))
2356 {
2358 add_call(&trace_got, 1, iface, &IID_IServiceProvider, 0, 0, 0);
2359 return S_OK;
2360 }
2361
2362 if(*ppvObj)
2363 {
2364 IProfferService_AddRef(iface);
2365 return S_OK;
2366 }
2367
2368 return E_NOINTERFACE;
2369}
2370
2372{
2374 return InterlockedIncrement(&This->ref);
2375}
2376
2378{
2381
2382 if (!ref)
2383 {
2385 return 0;
2386 }
2387 return ref;
2388}
2389
2391 REFGUID service, IServiceProvider *pService, DWORD *pCookie)
2392{
2393 *pCookie = 0xdeadbeef;
2394 add_call(&trace_got, 3, service, pService, pCookie, 0, 0);
2395 return S_OK;
2396}
2397
2399{
2400 add_call(&trace_got, 4, (void*)(DWORD_PTR)cookie, 0, 0, 0, 0);
2401 return S_OK;
2402}
2403
2404static const IProfferServiceVtbl IProfferServiceImpl_Vtbl =
2405{
2411};
2412
2414{
2415 IServiceProvider *provider;
2416 IProfferService *proff;
2417 static const GUID dummy_serviceid = { 0xdeadbeef };
2418 call_trace_t trace_expected;
2419 HRESULT hr;
2420 DWORD cookie;
2421
2422 provider = IServiceProviderImpl_Construct();
2424
2425 /* null source pointer */
2426 hr = pIUnknown_ProfferService(NULL, &dummy_serviceid, 0, 0);
2427 ok(hr == E_FAIL ||
2428 hr == E_NOTIMPL, /* win 8 */
2429 "got 0x%08lx\n", hr);
2430
2431 /* expected trace:
2432 IUnknown_ProfferService( ptr1, serviceid, arg1, arg2);
2433 -> IUnknown_QueryInterface( ptr1, &IID_IServiceProvider, &provider );
2434 -> IServiceProvider_QueryService( provider, &IID_IProfferService, &IID_IProfferService, &proffer );
2435
2436 if (service pointer not null):
2437 -> IProfferService_ProfferService( proffer, serviceid, arg1, arg2 );
2438 else
2439 -> IProfferService_RevokeService( proffer, *arg2 );
2440 */
2441 init_call_trace(&trace_expected);
2442
2443 add_call(&trace_expected, 1, proff, &IID_IServiceProvider, 0, 0, 0);
2444 add_call(&trace_expected, 2, &IID_IProfferService, &IID_IProfferService, 0, 0, 0);
2445 add_call(&trace_expected, 3, &dummy_serviceid, provider, &cookie, 0, 0);
2446
2448 cookie = 0;
2449 hr = pIUnknown_ProfferService((IUnknown*)proff, &dummy_serviceid, provider, &cookie);
2450 ok(hr == S_OK, "got 0x%08lx\n", hr);
2451 ok(cookie == 0xdeadbeef, "got %lx\n", cookie);
2452
2453 ok_trace(&trace_expected, &trace_got);
2455 free_call_trace(&trace_expected);
2456
2457 /* same with ::Revoke path */
2458 init_call_trace(&trace_expected);
2459
2460 add_call(&trace_expected, 1, proff, &IID_IServiceProvider, 0, 0, 0);
2461 add_call(&trace_expected, 2, &IID_IProfferService, &IID_IProfferService, 0, 0, 0);
2462 add_call(&trace_expected, 4, (void*)(DWORD_PTR)cookie, 0, 0, 0, 0);
2463
2465 ok(cookie != 0, "got %lx\n", cookie);
2466 hr = pIUnknown_ProfferService((IUnknown*)proff, &dummy_serviceid, 0, &cookie);
2467 ok(hr == S_OK, "got 0x%08lx\n", hr);
2468 ok(cookie == 0, "got %lx\n", cookie);
2469 ok_trace(&trace_expected, &trace_got);
2471 free_call_trace(&trace_expected);
2472
2473 IServiceProvider_Release(provider);
2474 IProfferService_Release(proff);
2475}
2476
2478{
2479 WNDCLASSA cliA;
2480 char classA[20];
2481 HWND hwnd;
2482 LONG_PTR ret;
2483 BOOL res;
2484
2485 hwnd = pSHCreateWorkerWindowA(0, NULL, 0, 0, 0, 0);
2486 ok(hwnd != 0, "expected window\n");
2487
2488 GetClassNameA(hwnd, classA, 20);
2489 ok(lstrcmpA(classA, "WorkerA") == 0, "expected WorkerA class, got %s\n", classA);
2490
2492 ok(ret == 0, "got %Id\n", ret);
2493
2494 /* class info */
2495 memset(&cliA, 0, sizeof(cliA));
2496 res = GetClassInfoA(GetModuleHandleA("shlwapi.dll"), "WorkerA", &cliA);
2497 ok(res, "failed to get class info\n");
2498 ok(cliA.style == 0, "got 0x%08x\n", cliA.style);
2499 ok(cliA.cbClsExtra == 0, "got %d\n", cliA.cbClsExtra);
2500 ok(cliA.cbWndExtra == sizeof(LONG_PTR), "got %d\n", cliA.cbWndExtra);
2501 ok(cliA.lpszMenuName == 0, "got %s\n", cliA.lpszMenuName);
2502
2504
2505 /* set extra bytes */
2506 hwnd = pSHCreateWorkerWindowA(0, NULL, 0, 0, 0, 0xdeadbeef);
2507 ok(hwnd != 0, "expected window\n");
2508
2509 GetClassNameA(hwnd, classA, 20);
2510 ok(lstrcmpA(classA, "WorkerA") == 0, "expected WorkerA class, got %s\n", classA);
2511
2513 ok(ret == 0xdeadbeef, "got %Id\n", ret);
2514
2515 /* test exstyle */
2517 ok(ret == WS_EX_WINDOWEDGE ||
2518 ret == (WS_EX_WINDOWEDGE|WS_EX_LAYOUTRTL) /* systems with RTL locale */, "0x%08Ix\n", ret);
2519
2521
2522 hwnd = pSHCreateWorkerWindowA(0, NULL, WS_EX_TOOLWINDOW, 0, 0, 0);
2525 ret == (WS_EX_WINDOWEDGE|WS_EX_TOOLWINDOW|WS_EX_LAYOUTRTL) /* systems with RTL locale */, "0x%08Ix\n", ret);
2527}
2528
2530 REFIID riid, void **ppv)
2531{
2532 /* SHIShellFolder_EnumObjects doesn't QI the object for IShellFolder */
2533 ok(!IsEqualGUID(&IID_IShellFolder, riid),
2534 "Unexpected QI for IShellFolder\n");
2535 return E_NOINTERFACE;
2536}
2537
2539{
2540 return 2;
2541}
2542
2544{
2545 return 1;
2546}
2547
2549 HWND owner, LPBC reserved, LPOLESTR displayName, ULONG *eaten,
2550 LPITEMIDLIST *idl, ULONG *attr)
2551{
2552 ok(0, "Didn't expect ParseDisplayName\n");
2553 return E_NOTIMPL;
2554}
2555
2557 HWND owner, SHCONTF flags, IEnumIDList **enm)
2558{
2559 *enm = (IEnumIDList*)0xcafebabe;
2560 return S_OK;
2561}
2562
2564 LPCITEMIDLIST idl, LPBC reserved, REFIID riid, void **obj)
2565{
2566 ok(0, "Didn't expect BindToObject\n");
2567 return E_NOTIMPL;
2568}
2569
2571 LPCITEMIDLIST idl, LPBC reserved, REFIID riid, void **obj)
2572{
2573 ok(0, "Didn't expect BindToStorage\n");
2574 return E_NOTIMPL;
2575}
2576
2579{
2580 ok(0, "Didn't expect CompareIDs\n");
2581 return E_NOTIMPL;
2582}
2583
2585 HWND owner, REFIID riid, void **out)
2586{
2587 ok(0, "Didn't expect CreateViewObject\n");
2588 return E_NOTIMPL;
2589}
2590
2592 UINT cidl, LPCITEMIDLIST *idl, SFGAOF *inOut)
2593{
2594 ok(0, "Didn't expect GetAttributesOf\n");
2595 return E_NOTIMPL;
2596}
2597
2599 HWND owner, UINT cidl, LPCITEMIDLIST *idls, REFIID riid, UINT *inOut,
2600 void **out)
2601{
2602 ok(0, "Didn't expect GetUIObjectOf\n");
2603 return E_NOTIMPL;
2604}
2605
2607 LPCITEMIDLIST idl, SHGDNF flags, STRRET *name)
2608{
2609 ok(0, "Didn't expect GetDisplayNameOf\n");
2610 return E_NOTIMPL;
2611}
2612
2614 HWND hwnd, LPCITEMIDLIST idl, LPCOLESTR name, SHGDNF flags,
2615 LPITEMIDLIST *idlOut)
2616{
2617 ok(0, "Didn't expect SetNameOf\n");
2618 return E_NOTIMPL;
2619}
2620
2621static IShellFolderVtbl ShellFolderVtbl = {
2623 SF_AddRef,
2624 SF_Release,
2635};
2636
2638
2640{
2641 IEnumIDList *enm;
2642 HRESULT hres;
2644
2645 if(!pSHIShellFolder_EnumObjects){ /* win7 and later */
2646 win_skip("SHIShellFolder_EnumObjects not available\n");
2647 return;
2648 }
2649
2650 if(0){
2651 /* NULL object crashes on Windows */
2652 pSHIShellFolder_EnumObjects(NULL, NULL, 0, NULL);
2653 }
2654
2655 /* SHIShellFolder_EnumObjects doesn't QI the object for IShellFolder */
2656 enm = (IEnumIDList*)0xdeadbeef;
2657 hres = pSHIShellFolder_EnumObjects(&ShellFolder, NULL, 0, &enm);
2658 ok(hres == S_OK, "SHIShellFolder_EnumObjects failed: 0x%08lx\n", hres);
2659 ok(enm == (IEnumIDList*)0xcafebabe, "Didn't get expected enumerator location, instead: %p\n", enm);
2660
2661 /* SHIShellFolder_EnumObjects isn't strict about the IShellFolder object */
2663 ok(hres == S_OK, "SHGetDesktopFolder failed: 0x%08lx\n", hres);
2664
2665 enm = NULL;
2666 hres = pSHIShellFolder_EnumObjects(folder, NULL, 0, &enm);
2667 ok(hres == S_OK, "SHIShellFolder_EnumObjects failed: 0x%08lx\n", hres);
2668 ok(enm != NULL, "Didn't get an enumerator\n");
2669 if(enm)
2670 IEnumIDList_Release(enm);
2671
2672 IShellFolder_Release(folder);
2673}
2674
2676{
2677 DWORD written;
2678 HANDLE file;
2679
2680 static const char data[] =
2681 "[TestApp]\r\n"
2682 "AKey=1\r\n"
2683 "AnotherKey=asdf\r\n";
2684
2686 if(file == INVALID_HANDLE_VALUE) {
2687 win_skip("failed to create ini file at %s\n", wine_dbgstr_w(filename));
2688 return FALSE;
2689 }
2690
2691 WriteFile(file, data, sizeof(data), &written, NULL);
2692
2694
2695 return TRUE;
2696}
2697
2698#define verify_inifile(f, e) r_verify_inifile(__LINE__, f, e)
2700{
2701 HANDLE file;
2702 CHAR buf[1024];
2703 DWORD read;
2704
2706
2708 return;
2709
2710 ReadFile(file, buf, sizeof(buf) * sizeof(CHAR), &read, NULL);
2711 buf[read] = '\0';
2712
2714
2715 ok_(__FILE__,l)(!strcmp(buf, exp), "Expected:\n%s\nGot:\n%s\n", exp,
2716 buf);
2717}
2718
2719static void test_SHGetIniString(void)
2720{
2721 DWORD ret;
2722 WCHAR out[64] = {0};
2723
2724 static const WCHAR TestAppW[] = {'T','e','s','t','A','p','p',0};
2725 static const WCHAR AKeyW[] = {'A','K','e','y',0};
2726 static const WCHAR AnotherKeyW[] = {'A','n','o','t','h','e','r','K','e','y',0};
2727 static const WCHAR JunkKeyW[] = {'J','u','n','k','K','e','y',0};
2728 static const WCHAR testpathW[] = {'C',':','\\','t','e','s','t','.','i','n','i',0};
2729 WCHAR pathW[MAX_PATH];
2730
2731 lstrcpyW(pathW, testpathW);
2732
2733 if (!write_inifile(pathW))
2734 return;
2735
2736 if(0){
2737 /* these crash on Windows */
2738 pSHGetIniStringW(NULL, NULL, NULL, 0, NULL);
2739 pSHGetIniStringW(NULL, AKeyW, out, ARRAY_SIZE(out), pathW);
2740 pSHGetIniStringW(TestAppW, AKeyW, NULL, ARRAY_SIZE(out), pathW);
2741 }
2742
2743 ret = pSHGetIniStringW(TestAppW, AKeyW, out, 0, pathW);
2744 ok(ret == 0, "SHGetIniStringW should have given 0, instead: %ld\n", ret);
2745
2746 /* valid arguments */
2747 out[0] = 0;
2748 SetLastError(0xdeadbeef);
2749 ret = pSHGetIniStringW(TestAppW, NULL, out, ARRAY_SIZE(out), pathW);
2750 ok(ret == 4, "SHGetIniStringW should have given 4, instead: %ld\n", ret);
2751 ok(!lstrcmpW(out, AKeyW), "Expected %s, got: %s, %ld\n",
2753
2754 ret = pSHGetIniStringW(TestAppW, AKeyW, out, ARRAY_SIZE(out), pathW);
2755 ok(ret == 1, "SHGetIniStringW should have given 1, instead: %ld\n", ret);
2756 ok(!lstrcmpW(out, L"1"), "Expected L\"1\", got: %s\n", wine_dbgstr_w(out));
2757
2758 ret = pSHGetIniStringW(TestAppW, AnotherKeyW, out, ARRAY_SIZE(out), pathW);
2759 ok(ret == 4, "SHGetIniStringW should have given 4, instead: %ld\n", ret);
2760 ok(!lstrcmpW(out, L"asdf"), "Expected L\"asdf\", got: %s\n", wine_dbgstr_w(out));
2761
2762 out[0] = 1;
2763 ret = pSHGetIniStringW(TestAppW, JunkKeyW, out, ARRAY_SIZE(out), pathW);
2764 ok(ret == 0, "SHGetIniStringW should have given 0, instead: %ld\n", ret);
2765 ok(*out == 0, "Expected L\"\", got: %s\n", wine_dbgstr_w(out));
2766
2767 DeleteFileW(pathW);
2768}
2769
2770static void test_SHSetIniString(void)
2771{
2772 BOOL ret;
2773
2774 static const WCHAR TestAppW[] = {'T','e','s','t','A','p','p',0};
2775 static const WCHAR AnotherAppW[] = {'A','n','o','t','h','e','r','A','p','p',0};
2776 static const WCHAR TestIniW[] = {'C',':','\\','t','e','s','t','.','i','n','i',0};
2777 static const WCHAR AKeyW[] = {'A','K','e','y',0};
2778 static const WCHAR NewKeyW[] = {'N','e','w','K','e','y',0};
2779 static const WCHAR AValueW[] = {'A','V','a','l','u','e',0};
2780
2781 if (!write_inifile(TestIniW))
2782 return;
2783
2784 ret = pSHSetIniStringW(TestAppW, AKeyW, AValueW, TestIniW);
2785 ok(ret == TRUE, "SHSetIniStringW should not have failed\n");
2786 todo_wine /* wine sticks an extra \r\n at the end of the file */
2787 verify_inifile(TestIniW, "[TestApp]\r\nAKey=AValue\r\nAnotherKey=asdf\r\n");
2788
2789 ret = pSHSetIniStringW(TestAppW, AKeyW, NULL, TestIniW);
2790 ok(ret == TRUE, "SHSetIniStringW should not have failed\n");
2791 verify_inifile(TestIniW, "[TestApp]\r\nAnotherKey=asdf\r\n");
2792
2793 ret = pSHSetIniStringW(AnotherAppW, NewKeyW, AValueW, TestIniW);
2794 ok(ret == TRUE, "SHSetIniStringW should not have failed\n");
2795 verify_inifile(TestIniW, "[TestApp]\r\nAnotherKey=asdf\r\n[AnotherApp]\r\nNewKey=AValue\r\n");
2796
2797 ret = pSHSetIniStringW(TestAppW, NULL, AValueW, TestIniW);
2798 ok(ret == TRUE, "SHSetIniStringW should not have failed\n");
2799 verify_inifile(TestIniW, "[AnotherApp]\r\nNewKey=AValue\r\n");
2800
2801 DeleteFileW(TestIniW);
2802}
2803
2817 SHKEY_Subkey_FileExts = 0x6000
2819
2820static void test_SHGetShellKey(void)
2821{
2822 static const WCHAR ShellFoldersW[] = { 'S','h','e','l','l',' ','F','o','l','d','e','r','s',0 };
2823 static const WCHAR WineTestW[] = { 'W','i','n','e','T','e','s','t',0 };
2824
2825 DWORD *alloc_data, data, size;
2826 HKEY hkey;
2827 HRESULT hres;
2828
2829 /* Vista+ limits SHKEY enumeration values */
2830 SetLastError(0xdeadbeef);
2831 hkey = pSHGetShellKey(SHKEY_Key_Explorer, ShellFoldersW, FALSE);
2832 if (hkey)
2833 {
2834 /* Tests not working on Vista+ */
2835 RegCloseKey(hkey);
2836
2837 hkey = pSHGetShellKey(SHKEY_Root_HKLM|SHKEY_Key_Classes, NULL, FALSE);
2838 ok(hkey != NULL, "hkey = NULL\n");
2839 RegCloseKey(hkey);
2840 }
2841
2842 hkey = pSHGetShellKey(SHKEY_Root_HKCU|SHKEY_Key_Explorer, ShellFoldersW, FALSE);
2843 ok(hkey != NULL, "hkey = NULL\n");
2844 RegCloseKey(hkey);
2845
2846 hkey = pSHGetShellKey(SHKEY_Root_HKLM|SHKEY_Key_Explorer, ShellFoldersW, FALSE);
2847 ok(hkey != NULL, "hkey = NULL\n");
2848 RegCloseKey(hkey);
2849
2850 hkey = pSHGetShellKey(SHKEY_Root_HKLM, WineTestW, FALSE);
2851 ok(hkey == NULL, "hkey != NULL\n");
2852
2853 hkey = pSHGetShellKey(SHKEY_Root_HKLM, NULL, FALSE);
2854 ok(hkey != NULL, "Can't open key\n");
2855 ok(SUCCEEDED(RegDeleteKeyW(hkey, WineTestW)), "Can't delete key\n");
2856 RegCloseKey(hkey);
2857
2858 hkey = pSHGetShellKey(SHKEY_Root_HKLM, WineTestW, TRUE);
2859 if (!hkey && GetLastError() == ERROR_ACCESS_DENIED)
2860 {
2861 skip("Not authorized to create keys\n");
2862 return;
2863 }
2864 ok(hkey != NULL, "Can't create key\n");
2865 RegCloseKey(hkey);
2866
2867 size = sizeof(data);
2868 hres = pSKGetValueW(SHKEY_Root_HKLM, WineTestW, NULL, NULL, &data, &size);
2869 ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "hres = %lx\n", hres);
2870
2871 data = 1234;
2872 hres = pSKSetValueW(SHKEY_Root_HKLM, WineTestW, NULL, REG_DWORD, &data, sizeof(DWORD));
2873 ok(hres == S_OK, "hres = %lx\n", hres);
2874
2875 size = 1;
2876 hres = pSKGetValueW(SHKEY_Root_HKLM, WineTestW, NULL, NULL, NULL, &size);
2877 ok(hres == S_OK, "hres = %lx\n", hres);
2878 ok(size == sizeof(DWORD), "size = %ld\n", size);
2879
2880 data = 0xdeadbeef;
2881 hres = pSKGetValueW(SHKEY_Root_HKLM, WineTestW, NULL, NULL, &data, &size);
2882 ok(hres == S_OK, "hres = %lx\n", hres);
2883 ok(size == sizeof(DWORD), "size = %ld\n", size);
2884 ok(data == 1234, "data = %ld\n", data);
2885
2886 hres = pSKAllocValueW(SHKEY_Root_HKLM, WineTestW, NULL, NULL, (void**)&alloc_data, &size);
2887 ok(hres == S_OK, "hres= %lx\n", hres);
2888 ok(size == sizeof(DWORD), "size = %ld\n", size);
2889 if (SUCCEEDED(hres))
2890 {
2891 ok(*alloc_data == 1234, "*alloc_data = %ld\n", *alloc_data);
2892 LocalFree(alloc_data);
2893 }
2894
2895 hres = pSKDeleteValueW(SHKEY_Root_HKLM, WineTestW, NULL);
2896 ok(hres == S_OK, "hres = %lx\n", hres);
2897
2898 hres = pSKDeleteValueW(SHKEY_Root_HKLM, WineTestW, NULL);
2899 ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "hres = %lx\n", hres);
2900
2901 hres = pSKGetValueW(SHKEY_Root_HKLM, WineTestW, NULL, NULL, &data, &size);
2902 ok(hres == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "hres = %lx\n", hres);
2903
2904 hkey = pSHGetShellKey(SHKEY_Root_HKLM, NULL, FALSE);
2905 ok(hkey != NULL, "Can't create key\n");
2906 ok(SUCCEEDED(RegDeleteKeyW(hkey, WineTestW)), "Can't delete key\n");
2907 RegCloseKey(hkey);
2908}
2909
2910static void init_pointers(void)
2911{
2912#define MAKEFUNC(f, ord) (p##f = (void*)GetProcAddress(hShlwapi, (LPSTR)(ord)))
2917 MAKEFUNC(SHMapHandle, 11);
2937 MAKEFUNC(SHGetShellKey, 491);
2940 MAKEFUNC(SKGetValueW, 516);
2941 MAKEFUNC(SKSetValueW, 517);
2943 MAKEFUNC(SKAllocValueW, 519);
2944#undef MAKEFUNC
2945
2946 pDllGetVersion = (void*)GetProcAddress(hShlwapi, "DllGetVersion");
2947}
2948
2949static void test_SHSetParentHwnd(void)
2950{
2951 HWND hwnd, hwnd2, ret;
2952 DWORD style;
2953
2954 hwnd = CreateWindowA("Button", "", WS_VISIBLE, 0, 0, 10, 10, NULL, NULL, NULL, NULL);
2955 ok(hwnd != NULL, "got %p\n", hwnd);
2956
2957 hwnd2 = CreateWindowA("Button", "", WS_VISIBLE | WS_CHILD, 0, 0, 10, 10, hwnd, NULL, NULL, NULL);
2958 ok(hwnd2 != NULL, "got %p\n", hwnd2);
2959
2960 /* null params */
2961 ret = pSHSetParentHwnd(NULL, NULL);
2962 ok(ret == NULL, "got %p\n", ret);
2963
2964 /* set to no parent while already no parent present */
2965 ret = GetParent(hwnd);
2966 ok(ret == NULL, "got %p\n", ret);
2968 ok((style & (WS_POPUP|WS_CHILD)) == 0, "got style 0x%08lx\n", style);
2969 ret = pSHSetParentHwnd(hwnd, NULL);
2970 ok(ret == NULL, "got %p\n", ret);
2972 ok((style & (WS_POPUP|WS_CHILD)) == 0, "got style 0x%08lx\n", style);
2973
2974 /* reset to null parent from not null */
2975 ret = GetParent(hwnd2);
2976 ok(ret == hwnd, "got %p\n", ret);
2977 style = GetWindowLongA(hwnd2, GWL_STYLE);
2978 ok((style & (WS_POPUP|WS_CHILD)) == WS_CHILD, "got style 0x%08lx\n", style);
2979 ret = pSHSetParentHwnd(hwnd2, NULL);
2980 ok(ret == NULL, "got %p\n", ret);
2981 style = GetWindowLongA(hwnd2, GWL_STYLE);
2982 ok((style & (WS_POPUP|WS_CHILD)) == WS_POPUP, "got style 0x%08lx\n", style);
2983 ret = GetParent(hwnd2);
2984 ok(ret == NULL, "got %p\n", ret);
2985
2986 /* set parent back */
2987 style = GetWindowLongA(hwnd2, GWL_STYLE);
2989 style = GetWindowLongA(hwnd2, GWL_STYLE);
2990 ok((style & (WS_CHILD|WS_POPUP)) == 0, "got 0x%08lx\n", style);
2991
2992 ret = pSHSetParentHwnd(hwnd2, hwnd);
2993 todo_wine ok(ret == NULL, "got %p\n", ret);
2994
2995 style = GetWindowLongA(hwnd2, GWL_STYLE);
2996 ok((style & (WS_POPUP|WS_CHILD)) == WS_CHILD, "got style 0x%08lx\n", style);
2997 ret = GetParent(hwnd2);
2998 ok(ret == hwnd, "got %p\n", ret);
2999
3000 /* try to set same parent again */
3001 /* with WS_POPUP */
3002 style = GetWindowLongA(hwnd2, GWL_STYLE);
3004 ret = pSHSetParentHwnd(hwnd2, hwnd);
3005 todo_wine ok(ret == NULL, "got %p\n", ret);
3006 style = GetWindowLongA(hwnd2, GWL_STYLE);
3007 ok((style & (WS_CHILD|WS_POPUP)) == WS_CHILD, "got 0x%08lx\n", style);
3008 ret = GetParent(hwnd2);
3009 ok(ret == hwnd, "got %p\n", ret);
3010
3011 /* without WS_POPUP */
3012 style = GetWindowLongA(hwnd2, GWL_STYLE);
3014 ret = pSHSetParentHwnd(hwnd2, hwnd);
3015 todo_wine ok(ret == hwnd, "got %p\n", ret);
3016 style = GetWindowLongA(hwnd2, GWL_STYLE);
3017 ok((style & (WS_CHILD|WS_POPUP)) == WS_CHILD, "got 0x%08lx\n", style);
3018 ret = GetParent(hwnd2);
3019 ok(ret == hwnd, "got %p\n", ret);
3020
3022 DestroyWindow(hwnd2);
3023}
3024
3026{
3028 *obj = iface;
3029 IPersist_AddRef(iface);
3030 return S_OK;
3031 }
3032
3033 *obj = NULL;
3034 return E_NOINTERFACE;
3035}
3036
3038{
3039 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPersistFolder)) {
3040 *obj = iface;
3041 IPersist_AddRef(iface);
3042 return S_OK;
3043 }
3044
3045 *obj = NULL;
3046 return E_NOINTERFACE;
3047}
3048
3050{
3051 return 2;
3052}
3053
3055{
3056 return 1;
3057}
3058
3060{
3061 memset(clsid, 0xab, sizeof(*clsid));
3062 return 0x8fff2222;
3063}
3064
3065static IPersistVtbl testpersistvtbl = {
3070};
3071
3072static IPersistVtbl testpersist2vtbl = {
3077};
3078
3081
3083{
3084 CLSID clsid, clsid2, clsid3;
3085 HRESULT hr;
3086
3087 if (0) /* crashes on native systems */
3088 hr = pIUnknown_GetClassID(NULL, NULL);
3089
3090 memset(&clsid, 0xcc, sizeof(clsid));
3091 memset(&clsid3, 0xcc, sizeof(clsid3));
3092 hr = pIUnknown_GetClassID(NULL, &clsid);
3093 ok(hr == E_FAIL, "got 0x%08lx\n", hr);
3094 ok(IsEqualCLSID(&clsid, &CLSID_NULL) || broken(IsEqualCLSID(&clsid, &clsid3)) /* win2k, winxp, win2k3 */,
3095 "got wrong clsid %s\n", wine_dbgstr_guid(&clsid));
3096
3097 memset(&clsid, 0xcc, sizeof(clsid));
3098 memset(&clsid2, 0xab, sizeof(clsid2));
3099 hr = pIUnknown_GetClassID((IUnknown*)&testpersist, &clsid);
3100 ok(hr == 0x8fff2222, "got 0x%08lx\n", hr);
3101 ok(IsEqualCLSID(&clsid, &clsid2) || broken(IsEqualCLSID(&clsid, &clsid3)) /* win2k3 */,
3102 "got wrong clsid %s\n", wine_dbgstr_guid(&clsid));
3103
3104 /* IPersistFolder is also supported */
3105 memset(&clsid, 0xcc, sizeof(clsid));
3106 memset(&clsid2, 0xab, sizeof(clsid2));
3107 memset(&clsid3, 0xcc, sizeof(clsid3));
3108 hr = pIUnknown_GetClassID((IUnknown*)&testpersist2, &clsid);
3109 ok(hr == 0x8fff2222, "got 0x%08lx\n", hr);
3110 ok(IsEqualCLSID(&clsid, &clsid2) || broken(IsEqualCLSID(&clsid, &clsid3)) /* win2k3 */,
3111 "got wrong clsid %s\n", wine_dbgstr_guid(&clsid));
3112}
3113
3114static void test_DllGetVersion(void)
3115{
3116 HRESULT hr;
3117
3118 hr = pDllGetVersion(NULL);
3119 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
3120}
3121
3123{
3124 SYSTEMTIME st;
3125 static const SYSTEMTIME february = {2023, 2, 2, 14, 12, 0, 0, 0};
3126 char **argv;
3127 int argc;
3128
3129 hShlwapi = GetModuleHandleA("shlwapi.dll");
3130
3131 init_pointers();
3132
3134 if (argc >= 4)
3135 {
3136 DWORD procid;
3137 HANDLE hmem;
3138 sscanf(argv[2], "%ld", &procid);
3139 sscanf(argv[3], "%p", &hmem);
3141 return;
3142 }
3143
3147 test_fdsa();
3153
3154 GetLocalTime(&st);
3156 /* Test how the locale and code page interact for date formatting by
3157 * repeating the tests with a February date which in French contains an
3158 * e-acute that can only be represented in some code pages.
3159 */
3160 test_SHFormatDateTimeA(&february);
3161
3174}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
static int argc
Definition: ServiceArgs.c:12
@ lparam
Definition: SystemMenu.c:31
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define read
Definition: acwin.h:96
Arabic default style
Definition: afstyles.h:94
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define trace
Definition: atltest.h:70
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define broken(x)
Definition: atltest.h:178
#define START_TEST(x)
Definition: atltest.h:75
#define ok_(x1, x2)
Definition: atltest.h:61
#define ARRAY_SIZE(A)
Definition: main.h:20
void dispatch(HANDLE hStopEvent)
Definition: dispatch.c:70
const GUID IID_IUnknown
#define RegCloseKey(hKey)
Definition: registry.h:49
HANDLE HKEY
Definition: registry.h:26
struct _root root
r l[0]
Definition: byte_order.h:168
IProfferService IProfferService_iface
Definition: ordinal.c:2203
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
Definition: reg.c:4799
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3234
LONG WINAPI RegEnumValueA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpdwReserved, _Out_opt_ LPDWORD lpdwType, _Out_opt_ LPBYTE lpData, _Inout_opt_ LPDWORD lpcbData)
Definition: reg.c:2668
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
Definition: reg.c:2287
LONG WINAPI RegEnumKeyA(HKEY hKey, DWORD dwIndex, LPSTR lpName, DWORD cbName)
Definition: reg.c:2368
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
Definition: reg.c:1239
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
BOOL WINAPI GetAclInformation(PACL pAcl, LPVOID pAclInformation, DWORD nAclInformationLength, ACL_INFORMATION_CLASS dwAclInformationClass)
Definition: security.c:1194
BOOL WINAPI GetAce(PACL pAcl, DWORD dwAceIndex, LPVOID *pAce)
Definition: security.c:1186
BOOL WINAPI IsValidAcl(PACL pAcl)
Definition: security.c:1209
#define CloseHandle
Definition: compat.h:739
#define GetProcessHeap()
Definition: compat.h:736
#define OPEN_EXISTING
Definition: compat.h:775
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
#define SetLastError(x)
Definition: compat.h:752
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define HeapAlloc
Definition: compat.h:733
#define HeapReAlloc
Definition: compat.h:734
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CreateFileW
Definition: compat.h:741
#define lstrcpyW
Definition: compat.h:749
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
@ VT_BLOB
Definition: compat.h:2330
@ VT_BSTR
Definition: compat.h:2303
@ VT_BYREF
Definition: compat.h:2342
@ VT_I4
Definition: compat.h:2298
@ VT_EMPTY
Definition: compat.h:2295
@ VT_DISPATCH
Definition: compat.h:2304
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
Definition: proc.c:4749
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
Definition: time.c:158
BOOL WINAPI LocalFileTimeToFileTime(IN CONST FILETIME *lpLocalFileTime, OUT LPFILETIME lpFileTime)
Definition: time.c:253
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:286
BOOL WINAPI TzSpecificLocalTimeToSystemTime(LPTIME_ZONE_INFORMATION lpTimeZoneInformation, LPSYSTEMTIME lpLocalTime, LPSYSTEMTIME lpUniversalTime)
Definition: timezone.c:421
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4246
INT WINAPI GetLocaleInfoA(LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
Definition: locale.c:1609
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4198
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216
LCID lcid
Definition: locale.c:5656
const UINT * keys
Definition: locale.c:416
HANDLE WINAPI SHAllocShared(LPCVOID lpvData, DWORD dwSize, DWORD dwProcId)
Definition: ordinal.c:169
HRESULT WINAPI IUnknown_QueryServiceExec(IUnknown *lpUnknown, REFIID service, const GUID *group, DWORD cmdId, DWORD cmdOpt, VARIANT *pIn, VARIANT *pOut)
Definition: ordinal.c:1553
BOOL WINAPI GUIDFromStringA(LPCSTR idstr, CLSID *id)
Definition: ordinal.c:3035
BOOL WINAPI SHSetIniStringW(LPCWSTR appName, LPCWSTR keyName, LPCWSTR str, LPCWSTR filename)
Definition: ordinal.c:3549
LONG WINAPI SHSetWindowBits(HWND hwnd, INT offset, UINT mask, UINT flags)
Definition: ordinal.c:1130
HRESULT WINAPI GetAcceptLanguagesA(LPSTR langbuf, LPDWORD buflen)
Definition: ordinal.c:577
HWND WINAPI SHCreateWorkerWindowA(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:2798
HANDLE WINAPI SHMapHandle(HANDLE hShared, DWORD dwSrcProcId, DWORD dwDstProcId, DWORD dwAccess, DWORD dwOptions)
Definition: ordinal.c:98
HRESULT WINAPI IConnectionPoint_InvokeWithCancel(IConnectionPoint *iCP, DISPID dispId, DISPPARAMS *dispParams, DWORD unknown1, DWORD unknown2)
Definition: ordinal.c:3307
DWORD WINAPI SHGetIniStringW(LPCWSTR appName, LPCWSTR keyName, LPWSTR out, DWORD outLen, LPCWSTR filename)
Definition: ordinal.c:3502
HRESULT WINAPI IUnknown_ProfferService(IUnknown *lpUnknown, REFGUID service, IServiceProvider *pService, DWORD *pCookie)
Definition: ordinal.c:1592
HRESULT WINAPI ConnectToConnectionPoint(IUnknown *lpUnkSink, REFIID riid, BOOL fConnect, IUnknown *lpUnknown, LPDWORD lpCookie, IConnectionPoint **lppCP)
Definition: ordinal.c:1193
DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid)
Definition: ordinal.c:6499
INT WINAPI SHFormatDateTimeW(const FILETIME UNALIGNED *fileTime, DWORD *flags, LPWSTR buf, UINT size)
Definition: ordinal.c:5453
HRESULT WINAPI SKAllocValueW(DWORD flags, LPCWSTR subkey, LPCWSTR value, DWORD *type, LPVOID *data, DWORD *count)
Definition: ordinal.c:5011
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
PVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
Definition: ordinal.c:259
INT WINAPI SHFormatDateTimeA(const FILETIME UNALIGNED *fileTime, DWORD *flags, LPSTR buf, UINT size)
Definition: ordinal.c:5518
HRESULT WINAPI SHIShellFolder_EnumObjects(LPSHELLFOLDER lpFolder, HWND hwnd, SHCONTF flags, IEnumIDList **ppenum)
Definition: ordinal.c:3992
HRESULT WINAPI SKGetValueW(DWORD flags, LPCWSTR subkey, LPCWSTR value, DWORD *type, void *data, DWORD *count)
Definition: ordinal.c:5068
HRESULT WINAPIV SHPackDispParams(DISPPARAMS *params, VARIANTARG *args, UINT cnt,...)
Definition: ordinal.c:3250
struct SHELL_USER_SID SHELL_USER_SID
struct SHELL_USER_PERMISSION SHELL_USER_PERMISSION
BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
Definition: ordinal.c:315
HRESULT WINAPI IConnectionPoint_SimpleInvoke(IConnectionPoint *iCP, DISPID dispId, DISPPARAMS *dispParams)
Definition: ordinal.c:3331
struct SHELL_USER_SID * PSHELL_USER_SID
struct SHELL_USER_PERMISSION * PSHELL_USER_PERMISSION
HKEY WINAPI SHGetShellKey(DWORD flags, LPCWSTR sub_key, BOOL create)
Definition: ordinal.c:4806
HRESULT WINAPI SKSetValueW(DWORD flags, LPCWSTR subkey, LPCWSTR value, DWORD type, void *data, DWORD count)
Definition: ordinal.c:5090
PSECURITY_DESCRIPTOR WINAPI GetShellSecurityDescriptor(const PSHELL_USER_PERMISSION *apUserPerm, int cUserPerm)
Definition: ordinal.c:5264
int WINAPI SHSearchMapInt(const int *lpKeys, const int *lpValues, int iLen, int iKey)
Definition: ordinal.c:2161
HWND WINAPI SHSetParentHwnd(HWND hWnd, HWND hWndParent)
Definition: ordinal.c:1158
BOOL WINAPI SHUnlockShared(LPVOID lpView)
Definition: ordinal.c:295
HRESULT WINAPI SHPropertyBag_ReadLONG(IPropertyBag *ppb, LPCWSTR pszPropName, LPLONG pValue)
Definition: ordinal.c:5806
HRESULT WINAPI SKDeleteValueW(DWORD flags, LPCWSTR subkey, LPCWSTR value)
Definition: ordinal.c:5048
#define pt(x, y)
Definition: drawing.c:79
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
r reserved
Definition: btrfs.c:3006
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
POINTL point
Definition: edittest.c:50
static unsigned char buff[32768]
Definition: fatten.c:17
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLdouble * v
Definition: gl.h:2040
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint res
Definition: glext.h:9613
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLuint GLuint GLuint GLuint arg1
Definition: glext.h:9513
GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg3
Definition: glext.h:9515
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
Definition: glext.h:9514
GLenum const GLfloat * params
Definition: glext.h:5645
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
GLbitfield flags
Definition: glext.h:7161
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLboolean GLuint group
Definition: glext.h:11120
GLuint GLfloat * val
Definition: glext.h:7180
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLuint id
Definition: glext.h:5910
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
const char * filename
Definition: ioapi.h:137
uint32_t entry
Definition: isohybrid.c:63
static DWORD block_size(DWORD block)
Definition: jsutils.c:66
#define wine_dbgstr_w
Definition: kernel32.h:34
#define REG_SZ
Definition: layer.c:22
INT WINAPI GetTimeFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1040
INT WINAPI GetDateFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpDateStr, INT cchOut)
Definition: lcformat.c:932
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1089
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:989
WORD SECURITY_DESCRIPTOR_CONTROL
Definition: lsa.idl:37
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
LPSTR WINAPI lstrcatA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:123
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define win_skip
Definition: minitest.h:67
#define todo_wine
Definition: minitest.h:80
LONG_PTR LPARAM
Definition: minwindef.h:175
CONST void * LPCVOID
Definition: minwindef.h:164
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define CREATE_ALWAYS
Definition: disk.h:72
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define sprintf
Definition: sprintf.c:45
BOOL expected
Definition: store.c:2000
HRESULT hres
Definition: protocol.c:465
static LPOLESTR
Definition: stg_prop.c:27
static refpint_t pi[]
Definition: server.c:112
static ULONG WINAPI IServiceProviderImpl_Release(IServiceProvider *iface)
Definition: ordinal.c:2266
static void test_IUnknown_ProfferService(void)
Definition: ordinal.c:2413
static IUnknown IConnectionPoint **static LPLONG
Definition: ordinal.c:52
static IServiceProviderImpl * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: ordinal.c:2197
static HRESULT WINAPI Disp_GetTypeInfoCount(IDispatch *This, UINT *pctinfo)
Definition: ordinal.c:929
static void test_alloc_shared_remote(DWORD procid, HANDLE hmem)
Definition: ordinal.c:522
static DWORD LPWSTR
Definition: ordinal.c:55
static ULONG WINAPI Contain_AddRef(IConnectionPointContainer *This)
Definition: ordinal.c:1352
static ULONG WINAPI IProfferServiceImpl_AddRef(IProfferService *iface)
Definition: ordinal.c:2371
static ULONG WINAPI EnumPt_Release(IEnumConnectionPoints *This)
Definition: ordinal.c:1267
static void test_IConnectionPoint(void)
Definition: ordinal.c:1441
static HRESULT WINAPI IProfferServiceImpl_RevokeService(IProfferService *iface, DWORD cookie)
Definition: ordinal.c:2398
static HRESULT WINAPI IOleCommandTargetImpl_QueryStatus(IOleCommandTarget *iface, const GUID *group, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
Definition: ordinal.c:2165
static ULONG WINAPI IOleCommandTargetImpl_AddRef(IOleCommandTarget *iface)
Definition: ordinal.c:2146
static IServiceProvider * IServiceProviderImpl_Construct(void)
Definition: ordinal.c:2216
static ULONG WINAPI EnumPt_AddRef(IEnumConnectionPoints *This)
Definition: ordinal.c:1261
static HRESULT WINAPI Enum_Next(IEnumConnections *This, ULONG cConnections, LPCONNECTDATA rgcd, ULONG *pcFetched)
Definition: ordinal.c:1045
static HRESULT WINAPI EnumPt_Skip(IEnumConnectionPoints *This, ULONG cConnections)
Definition: ordinal.c:1299
static HRESULT WINAPI IProfferServiceImpl_ProfferService(IProfferService *iface, REFGUID service, IServiceProvider *pService, DWORD *pCookie)
Definition: ordinal.c:2390
static void r_verify_inifile(unsigned l, LPCWSTR filename, LPCSTR exp)
Definition: ordinal.c:2699
static void test_SHCreateWorkerWindowA(void)
Definition: ordinal.c:2477
static HRESULT WINAPI Enum_QueryInterface(IEnumConnections *This, REFIID riid, void **ppvObject)
Definition: ordinal.c:1006
static ULONG WINAPI Enum_Release(IEnumConnections *This)
Definition: ordinal.c:1034
static HRESULT WINAPI SF_QueryInterface(IShellFolder *iface, REFIID riid, void **ppv)
Definition: ordinal.c:2529
#define verify_inifile(f, e)
Definition: ordinal.c:2698
struct _enum EnumCon
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static ConPt * impl_from_IConnectionPoint(IConnectionPoint *iface)
Definition: ordinal.c:856
static HRESULT WINAPI ConPt_EnumConnections(IConnectionPoint *This, IEnumConnections **ppEnum)
Definition: ordinal.c:1211
static HRESULT WINAPI ConPt_Advise(IConnectionPoint *This, IUnknown *pUnkSink, DWORD *pdwCookie)
Definition: ordinal.c:1177
static void test_alloc_shared(int argc, char **argv)
Definition: ordinal.c:451
static ULONG WINAPI IServiceProviderImpl_AddRef(IServiceProvider *iface)
Definition: ordinal.c:2260
static SHCONTF
Definition: ordinal.c:61
static ULONG WINAPI Prop_AddRef(IPropertyBag *This)
Definition: ordinal.c:1527
static void test_SHSetIniString(void)
Definition: ordinal.c:2770
static const CHAR ie_international[]
Definition: ordinal.c:90
#define ok_trace(a, b)
Definition: ordinal.c:167
static const IServiceProviderVtbl IServiceProviderImpl_Vtbl
Definition: ordinal.c:2213
static BOOL
Definition: ordinal.c:51
static void free_call_trace(const call_trace_t *ctrace)
Definition: ordinal.c:116
_shellkey_flags
Definition: ordinal.c:2804
@ SHKEY_Subkey_Handlers
Definition: ordinal.c:2813
@ SHKEY_Root_HKLM
Definition: ordinal.c:2806
@ SHKEY_Key_ShellNoRoam
Definition: ordinal.c:2809
@ SHKEY_Subkey_Volatile
Definition: ordinal.c:2815
@ SHKEY_Subkey_Associations
Definition: ordinal.c:2814
@ SHKEY_Key_Classes
Definition: ordinal.c:2810
@ SHKEY_Subkey_MUICache
Definition: ordinal.c:2816
@ SHKEY_Key_Explorer
Definition: ordinal.c:2807
@ SHKEY_Root_HKCU
Definition: ordinal.c:2805
@ SHKEY_Subkey_FileExts
Definition: ordinal.c:2817
@ SHKEY_Key_Shell
Definition: ordinal.c:2808
@ SHKEY_Subkey_Default
Definition: ordinal.c:2811
@ SHKEY_Subkey_ResourceName
Definition: ordinal.c:2812
static void test_SHSetParentHwnd(void)
Definition: ordinal.c:2949
static const IProfferServiceVtbl IProfferServiceImpl_Vtbl
Definition: ordinal.c:2214
static IPersistVtbl testpersist2vtbl
Definition: ordinal.c:3072
#define UNICODE_RTL_MARK
static INT
Definition: ordinal.c:53
static HRESULT WINAPI Enum_Clone(IEnumConnections *This, IEnumConnections **ppEnum)
Definition: ordinal.c:1080
static void test_IUnknown_QueryServiceExec(void)
Definition: ordinal.c:2305
static void test_GetShellSecurityDescriptor(void)
Definition: ordinal.c:679
static IProfferService * IProfferServiceImpl_Construct(void)
Definition: ordinal.c:2227
static IPersist testpersist2
Definition: ordinal.c:3080
static DWORD LPSTR
Definition: ordinal.c:54
static HRESULT WINAPI IProfferServiceImpl_QueryInterface(IProfferService *iface, REFIID riid, void **ppvObj)
Definition: ordinal.c:2346
static IPersistVtbl testpersistvtbl
Definition: ordinal.c:3065
static ULONG WINAPI IProfferServiceImpl_Release(IProfferService *iface)
Definition: ordinal.c:2377
static HRESULT WINAPI Prop_QueryInterface(IPropertyBag *This, REFIID riid, void **ppvObject)
Definition: ordinal.c:1505
static PropBag * impl_from_IPropertyBag(IPropertyBag *iface)
Definition: ordinal.c:1499
static ULONG WINAPI Disp_Release(IDispatch *This)
Definition: ordinal.c:918
static VARIANTARG static DISPID
Definition: ordinal.c:49
static HRESULT WINAPI EnumPt_Reset(IEnumConnectionPoints *This)
Definition: ordinal.c:1306
static ULONG WINAPI ConPt_Release(IConnectionPoint *This)
Definition: ordinal.c:1127
static Contain * impl_from_IConnectionPointContainer(IConnectionPointContainer *iface)
Definition: ordinal.c:840
static const CHAR acceptlanguage[]
Definition: ordinal.c:95
static void test_GetAcceptLanguagesA(void)
Definition: ordinal.c:172
static HRESULT WINAPI SF_BindToStorage(IShellFolder *iface, LPCITEMIDLIST idl, LPBC reserved, REFIID riid, void **obj)
Definition: ordinal.c:2570
static Disp * impl_from_IDispatch(IDispatch *iface)
Definition: ordinal.c:826
static const int int
Definition: ordinal.c:40
static void test_SHFormatDateTimeA(const SYSTEMTIME *st)
Definition: ordinal.c:1669
static void test_SHSearchMapInt(void)
Definition: ordinal.c:404
static HRESULT WINAPI SF_CreateViewObject(IShellFolder *iface, HWND owner, REFIID riid, void **out)
Definition: ordinal.c:2584
static void test_DllGetVersion(void)
Definition: ordinal.c:3114
#define MY_INHERITANCE
static void test_SHFormatDateTimeW(void)
Definition: ordinal.c:1838
static const IConnectionPointVtbl point_vtbl
Definition: ordinal.c:1227
static call_trace_t trace_got
Definition: ordinal.c:170
static void test_SHIShellFolder_EnumObjects(void)
Definition: ordinal.c:2639
static IOleCommandTarget * IOleCommandTargetImpl_Construct(void)
Definition: ordinal.c:2116
static HRESULT WINAPI Disp_Invoke(IDispatch *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: ordinal.c:956
static void test_SHGetIniString(void)
Definition: ordinal.c:2719
static HRESULT WINAPI Contain_QueryInterface(IConnectionPointContainer *This, REFIID riid, void **ppvObject)
Definition: ordinal.c:1330
struct _enumpt EnumPt
static IOleCommandTargetImpl * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
Definition: ordinal.c:2109
static HRESULT WINAPI IOleCommandTargetImpl_QueryInterface(IOleCommandTarget *iface, REFIID riid, void **ppvObj)
Definition: ordinal.c:2127
static void test_SHGetShellKey(void)
Definition: ordinal.c:2820
static const IEnumConnectionsVtbl enum_vtbl
Definition: ordinal.c:1087
static HRESULT WINAPI ConPt_GetConnectionPointContainer(IConnectionPoint *This, IConnectionPointContainer **ppCPC)
Definition: ordinal.c:1167
static HRESULT WINAPI SF_SetNameOf(IShellFolder *iface, HWND hwnd, LPCITEMIDLIST idl, LPCOLESTR name, SHGDNF flags, LPITEMIDLIST *idlOut)
Definition: ordinal.c:2613
static EnumCon * impl_from_IEnumConnections(IEnumConnections *iface)
Definition: ordinal.c:870
static const IOleCommandTargetVtbl IOleCommandTargetImpl_Vtbl
Definition: ordinal.c:2114
static LPDWORD
Definition: ordinal.c:41
static HRESULT WINAPI SF_GetUIObjectOf(IShellFolder *iface, HWND owner, UINT cidl, LPCITEMIDLIST *idls, REFIID riid, UINT *inOut, void **out)
Definition: ordinal.c:2598
static HRESULT WINAPI EnumPt_Clone(IEnumConnectionPoints *This, IEnumConnectionPoints **ppEnumPt)
Definition: ordinal.c:1312
static HRESULT WINAPI SF_GetDisplayNameOf(IShellFolder *iface, LPCITEMIDLIST idl, SHGDNF flags, STRRET *name)
Definition: ordinal.c:2606
static HRESULT WINAPI Disp_GetIDsOfNames(IDispatch *This, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: ordinal.c:945
static EnumPt * impl_from_IEnumConnectionPoints(IEnumConnectionPoints *iface)
Definition: ordinal.c:884
static ULONG WINAPI SF_AddRef(IShellFolder *iface)
Definition: ordinal.c:2538
struct _disp Disp
struct _cntptn ConPt
static IProfferServiceImpl * impl_from_IProfferService(IProfferService *iface)
Definition: ordinal.c:2207
static HRESULT WINAPI Contain_FindConnectionPoint(IConnectionPointContainer *This, REFIID riid, IConnectionPoint **ppCP)
Definition: ordinal.c:1396
static HRESULT WINAPI Disp_QueryInterface(IDispatch *This, REFIID riid, void **ppvObject)
Definition: ordinal.c:890
static void ok_trace_(call_trace_t *texpected, call_trace_t *tgot, int line)
Definition: ordinal.c:142
static HRESULT WINAPI Prop_Write(IPropertyBag *This, LPCOLESTR pszPropName, VARIANT *pVar)
Definition: ordinal.c:1557
static IUnknown IConnectionPoint **static LPCWSTR
Definition: ordinal.c:52
static const IPropertyBagVtbl prop_vtbl
Definition: ordinal.c:1566
static void test_SHGetObjectCompatFlags(void)
Definition: ordinal.c:2028
static HRESULT WINAPI testpersist_QI(IPersist *iface, REFIID riid, void **obj)
Definition: ordinal.c:3025
static void test_fdsa(void)
Definition: ordinal.c:579
static IPersist testpersist
Definition: ordinal.c:3079
static IShellFolderVtbl ShellFolderVtbl
Definition: ordinal.c:2621
static void init_call_trace(call_trace_t *ctrace)
Definition: ordinal.c:109
static void test_SHPackDispParams(void)
Definition: ordinal.c:776
static VARIANTARG UINT
Definition: ordinal.c:48
static void test_SHPropertyBag_ReadLONG(void)
Definition: ordinal.c:1575
static void test_IUnknown_GetClassID(void)
Definition: ordinal.c:3082
static HRESULT WINAPI IServiceProviderImpl_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppvObj)
Definition: ordinal.c:2238
static HRESULT WINAPI SF_EnumObjects(IShellFolder *iface, HWND owner, SHCONTF flags, IEnumIDList **enm)
Definition: ordinal.c:2556
static HRESULT WINAPI ConPt_QueryInterface(IConnectionPoint *This, REFIID riid, void **ppvObject)
Definition: ordinal.c:1098
static HRESULT WINAPI testpersist_GetClassID(IPersist *iface, CLSID *clsid)
Definition: ordinal.c:3059
static void test_SHSetWindowBits(void)
Definition: ordinal.c:1601
static HRESULT WINAPI SF_CompareIDs(IShellFolder *iface, LPARAM lparam, LPCITEMIDLIST idl1, LPCITEMIDLIST idl2)
Definition: ordinal.c:2577
static ULONG WINAPI Contain_Release(IConnectionPointContainer *This)
Definition: ordinal.c:1359
static HRESULT WINAPI Disp_GetTypeInfo(IDispatch *This, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: ordinal.c:936
static HRESULT WINAPI EnumPt_QueryInterface(IEnumConnectionPoints *This, REFIID riid, void **ppvObject)
Definition: ordinal.c:1239
static HRESULT WINAPI IServiceProviderImpl_QueryService(IServiceProvider *iface, REFGUID service, REFIID riid, void **ppv)
Definition: ordinal.c:2279
static HRESULT WINAPI EnumPt_Next(IEnumConnectionPoints *This, ULONG cConnections, IConnectionPoint **rgcd, ULONG *pcFetched)
Definition: ordinal.c:1278
static ULONG WINAPI ConPt_AddRef(IConnectionPoint *This)
Definition: ordinal.c:1120
static ULONG WINAPI testpersist_Release(IPersist *iface)
Definition: ordinal.c:3054
static HRESULT WINAPI Prop_Read(IPropertyBag *This, LPCOLESTR pszPropName, VARIANT *pVar, IErrorLog *pErrorLog)
Definition: ordinal.c:1546
static const IConnectionPointContainerVtbl contain_vtbl
Definition: ordinal.c:1432
static void init_pointers(void)
Definition: ordinal.c:2910
static HRESULT WINAPI ConPt_GetConnectionInterface(IConnectionPoint *This, IID *pIID)
Definition: ordinal.c:1151
static ULONG WINAPI IOleCommandTargetImpl_Release(IOleCommandTarget *iface)
Definition: ordinal.c:2152
static const IDispatchVtbl disp_vtbl
Definition: ordinal.c:995
struct _propbag PropBag
static ULONG WINAPI testpersist_AddRef(IPersist *iface)
Definition: ordinal.c:3049
static ULONG WINAPI Enum_AddRef(IEnumConnections *This)
Definition: ordinal.c:1028
static ULONG WINAPI Prop_Release(IPropertyBag *This)
Definition: ordinal.c:1534
static HRESULT WINAPI Enum_Reset(IEnumConnections *This)
Definition: ordinal.c:1074
static HRESULT WINAPI IOleCommandTargetImpl_Exec(IOleCommandTarget *iface, const GUID *CmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:2171
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static REFGUID
Definition: ordinal.c:59
struct _contain Contain
static HRESULT WINAPI Contain_EnumConnectionPoints(IConnectionPointContainer *This, IEnumConnectionPoints **ppEnum)
Definition: ordinal.c:1380
static HMODULE hShlwapi
Definition: ordinal.c:38
#define MAKEFUNC(f, ord)
static HRESULT WINAPI ConPt_Unadvise(IConnectionPoint *This, DWORD dwCookie)
Definition: ordinal.c:1195
static const IEnumConnectionPointsVtbl enumpt_vtbl
Definition: ordinal.c:1319
static BOOL write_inifile(LPCWSTR filename)
Definition: ordinal.c:2675
static HRESULT WINAPI testpersist_QI2(IPersist *iface, REFIID riid, void **obj)
Definition: ordinal.c:3037
static HRESULT WINAPI SF_BindToObject(IShellFolder *iface, LPCITEMIDLIST idl, LPBC reserved, REFIID riid, void **obj)
Definition: ordinal.c:2563
#define UNICODE_LTR_MARK
static ULONG WINAPI SF_Release(IShellFolder *iface)
Definition: ordinal.c:2543
static void add_call(call_trace_t *ctrace, int id, const void *arg0, const void *arg1, const void *arg2, const void *arg3, const void *arg4)
Definition: ordinal.c:121
static HRESULT WINAPI Enum_Skip(IEnumConnections *This, ULONG cConnections)
Definition: ordinal.c:1067
static ULONG WINAPI Disp_AddRef(IDispatch *This)
Definition: ordinal.c:912
static SECURITY_DESCRIPTOR *WINAPI * pGetShellSecurityDescriptor(const SHELL_USER_PERMISSION **, int)
static HRESULT WINAPI SF_ParseDisplayName(IShellFolder *iface, HWND owner, LPBC reserved, LPOLESTR displayName, ULONG *eaten, LPITEMIDLIST *idl, ULONG *attr)
Definition: ordinal.c:2548
static HRESULT WINAPI SF_GetAttributesOf(IShellFolder *iface, UINT cidl, LPCITEMIDLIST *idl, SFGAOF *inOut)
Definition: ordinal.c:2591
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HWND
Definition: ordinal.c:60
DWORD exp
Definition: msg.c:16058
#define argv
Definition: mplay32.c:18
const CLSID * clsid
Definition: msctf.cpp:50
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
static const WCHAR spaceW[]
Definition: mxwriter.c:44
unsigned int UINT
Definition: ndis.h:50
#define LPVOID
Definition: nt_native.h:45
#define GENERIC_ALL
Definition: nt_native.h:92
#define DWORD
Definition: nt_native.h:44
#define GENERIC_WRITE
Definition: nt_native.h:90
#define LOCALE_USER_DEFAULT
interface IBindCtx * LPBC
Definition: objfwd.h:18
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_BYREF(A)
Definition: oleauto.h:228
#define V_I4(A)
Definition: oleauto.h:247
const GUID IID_IEnumConnections
const GUID IID_IConnectionPointContainer
const GUID IID_IConnectionPoint
const GUID IID_IPropertyBag
const GUID IID_IDispatch
const GUID IID_IEnumConnectionPoints
#define WS_CHILD
Definition: pedump.c:617
BYTE * PBYTE
Definition: pedump.c:66
#define WS_POPUP
Definition: pedump.c:616
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
const GUID IID_IPersist
Definition: proxy.cpp:14
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define CLSID_NULL
Definition: guiddef.h:99
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define IID_NULL
Definition: guiddef.h:98
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
#define FDTF_SHORTTIME
Definition: shlwapi.h:97
#define FDTF_NOAUTOREADINGORDER
Definition: shlwapi.h:105
#define FDTF_LONGDATE
Definition: shlwapi.h:100
#define FDTF_DEFAULT
Definition: shlwapi.h:99
#define FDTF_RTLDATE
Definition: shlwapi.h:104
#define FDTF_LTRDATE
Definition: shlwapi.h:103
#define FDTF_LONGTIME
Definition: shlwapi.h:101
#define FDTF_SHORTDATE
Definition: shlwapi.h:98
#define REG_DWORD
Definition: sdbapi.c:615
#define WINAPIV
Definition: sdbpapi.h:64
DWORD LCID
Definition: nls.h:13
strcat
Definition: string.h:92
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
int winetest_get_mainargs(char ***pargv)
#define wait_child_process
Definition: test.h:177
#define memset(x, y, z)
Definition: compat.h:39
BOOL WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor)
Definition: sec.c:176
BOOL WINAPI GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR pSecurityDescriptor, PSECURITY_DESCRIPTOR_CONTROL pControl, LPDWORD lpdwRevision)
Definition: sec.c:21
BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, LPBOOL lpbDaclPresent, PACL *pDacl, LPBOOL lpbDaclDefaulted)
Definition: sec.c:45
HRESULT hr
Definition: shlfolder.c:183
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
TCHAR * cmdline
Definition: stretchblt.cpp:32
IOleCommandTarget IOleCommandTarget_iface
Definition: ordinal.c:2105
SHELL_USER_SID susID
Definition: ordinal.c:5239
DWORD dwUserID
Definition: ordinal.c:5235
DWORD dwUserGroupID
Definition: ordinal.c:5234
SID_IDENTIFIER_AUTHORITY sidAuthority
Definition: ordinal.c:5233
IShellFolder smart pointer.
Definition: shellclasses.h:594
ACE_HEADER Header
Definition: ms-dtyp.idl:216
ACCESS_MASK Mask
Definition: ms-dtyp.idl:217
UCHAR AceFlags
Definition: ms-dtyp.idl:211
UCHAR AceType
Definition: ms-dtyp.idl:210
DWORD dwHighDateTime
Definition: mapidefs.h:66
DWORD dwLowDateTime
Definition: mapidefs.h:65
Definition: scsiwmi.h:51
HBRUSH hbrBackground
Definition: winuser.h:3272
HICON hIcon
Definition: winuser.h:3270
HINSTANCE hInstance
Definition: winuser.h:3269
HCURSOR hCursor
Definition: winuser.h:3271
int cbWndExtra
Definition: winuser.h:3268
UINT style
Definition: winuser.h:3265
LPCSTR lpszMenuName
Definition: winuser.h:3273
LPCSTR lpszClassName
Definition: winuser.h:3274
WNDPROC lpfnWndProc
Definition: winuser.h:3266
int cbClsExtra
Definition: winuser.h:3267
IUnknown ** sink
Definition: ordinal.c:853
LONG refCount
Definition: ordinal.c:848
IConnectionPoint IConnectionPoint_iface
Definition: ordinal.c:847
GUID id
Definition: ordinal.c:851
Contain * container
Definition: ordinal.c:850
UINT sinkCount
Definition: ordinal.c:852
UINT ptCount
Definition: ordinal.c:836
LONG refCount
Definition: ordinal.c:834
IConnectionPoint ** pt
Definition: ordinal.c:837
IConnectionPointContainer IConnectionPointContainer_iface
Definition: ordinal.c:833
Definition: ordinal.c:821
LONG refCount
Definition: ordinal.c:823
IDispatch IDispatch_iface
Definition: ordinal.c:822
Definition: ordinal.c:862
IEnumConnections IEnumConnections_iface
Definition: ordinal.c:863
ConPt * pt
Definition: ordinal.c:867
UINT idx
Definition: ordinal.c:866
LONG refCount
Definition: ordinal.c:864
LONG refCount
Definition: ordinal.c:878
int idx
Definition: ordinal.c:880
IEnumConnectionPoints IEnumConnectionPoints_iface
Definition: ordinal.c:877
Contain * container
Definition: ordinal.c:881
LONG refCount
Definition: ordinal.c:1495
IPropertyBag IPropertyBag_iface
Definition: ordinal.c:1494
Definition: match.c:390
Definition: cookie.c:202
Definition: ordinal.c:98
int id
Definition: ordinal.c:99
const void * args[5]
Definition: ordinal.c:100
call_entry_t * calls
Definition: ordinal.c:104
Definition: dialog.c:52
Definition: cookie.c:34
char * value
Definition: compiler.c:67
Definition: fci.c:127
Definition: fci.c:116
Definition: parser.c:49
Definition: mem.c:349
Definition: name.c:39
Definition: send.c:48
DWORD value
Definition: ordinal.c:447
HANDLE handle
Definition: ordinal.c:448
char displayName[]
Definition: tftpd.cpp:35
#define LONG_PTR
Definition: treelist.c:79
uint32_t DWORD_PTR
Definition: typedefs.h:65
PVOID HANDLE
Definition: typedefs.h:73
int32_t INT
Definition: typedefs.h:58
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:96
static const WCHAR procid[]
Definition: wbemdisp.c:289
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
static LCIDTORFC1766A LcidToRfc1766A
Definition: win_iconv.c:708
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
DWORD WINAPI GetCurrentProcessId(void)
Definition: proc.c:1158
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:3437
#define E_NOINTERFACE
Definition: winerror.h:3479
#define DISP_E_BADVARTYPE
Definition: winerror.h:3620
#define ERROR_INVALID_WINDOW_HANDLE
Definition: winerror.h:1226
#define __HRESULT_FROM_WIN32(x)
Definition: winerror.h:197
#define ERROR_CANNOT_COPY
Definition: winerror.h:415
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20
#define LOCALE_SNAME
Definition: winnls.h:137
#define LOCALE_SISO639LANGNAME
Definition: winnls.h:133
#define LOCALE_SISO3166CTRYNAME
Definition: winnls.h:134
#define TIME_NOSECONDS
Definition: winnls.h:296
#define DATE_LONGDATE
Definition: winnls.h:210
#define DATE_SHORTDATE
Definition: winnls.h:209
@ AclSizeInformation
Definition: winnt_old.h:1166
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define WS_EX_LAYOUTRTL
Definition: winuser.h:390
BOOL WINAPI IsWindow(_In_opt_ HWND)
BOOL WINAPI UnregisterClassA(_In_ LPCSTR, HINSTANCE)
LONG WINAPI GetWindowLongA(_In_ HWND, _In_ int)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4417
LONG WINAPI SetWindowLongA(_In_ HWND, _In_ int, _In_ LONG)
int WINAPI GetClassNameA(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPSTR lpClassName, _In_ int nMaxCount)
#define IDC_ARROW
Definition: winuser.h:695
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define GetWindowLongPtrA
Definition: winuser.h:4930
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
BOOL WINAPI GetClassInfoA(_In_opt_ HINSTANCE, _In_ LPCSTR, _Out_ LPWNDCLASSA)
HWND WINAPI GetParent(_In_ HWND)
#define GWL_STYLE
Definition: winuser.h:863
BOOL WINAPI DestroyWindow(_In_ HWND)
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2442
#define GWL_EXSTYLE
Definition: winuser.h:862
#define SECURITY_WORLD_SID_AUTHORITY
Definition: setypes.h:527
#define SECURITY_WORLD_RID
Definition: setypes.h:541
#define ACCESS_ALLOWED_ACE_TYPE
Definition: setypes.h:717
#define SE_SELF_RELATIVE
Definition: setypes.h:846
#define ACCESS_DENIED_ACE_TYPE
Definition: setypes.h:718
#define SECURITY_NULL_SID_AUTHORITY
Definition: setypes.h:524
static unsigned int block
Definition: xmlmemory.c:101
const char * LPCSTR
Definition: xmlstorage.h:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
__wchar_t WCHAR
Definition: xmlstorage.h:180
char * LPSTR
Definition: xmlstorage.h:182
char CHAR
Definition: xmlstorage.h:175
unsigned char BYTE
Definition: xxhash.c:193