11#define WIN32_NO_STATUS
33#define HID_DATABASE_FULLPATH 2
35#define SDB_DATABASE_MAIN_SHIM 0x80030000
43#define TAG_TYPE_MASK 0xF000
45#define TAG_TYPE_NULL 0x1000
46#define TAG_TYPE_BYTE 0x2000
47#define TAG_TYPE_WORD 0x3000
48#define TAG_TYPE_DWORD 0x4000
49#define TAG_TYPE_QWORD 0x5000
50#define TAG_TYPE_STRINGREF 0x6000
51#define TAG_TYPE_LIST 0x7000
52#define TAG_TYPE_STRING 0x8000
53#define TAG_TYPE_BINARY 0x9000
56#define TAG_INCLUDE (0x1 | TAG_TYPE_NULL)
58#define TAG_MATCH_MODE (0x1 | TAG_TYPE_WORD)
60#define TAG_SIZE (0x1 | TAG_TYPE_DWORD)
61#define TAG_CHECKSUM (0x3 | TAG_TYPE_DWORD)
62#define TAG_MODULE_TYPE (0x6 | TAG_TYPE_DWORD)
63#define TAG_VERFILEOS (0x9 | TAG_TYPE_DWORD)
64#define TAG_VERFILETYPE (0xA | TAG_TYPE_DWORD)
65#define TAG_PE_CHECKSUM (0xB | TAG_TYPE_DWORD)
66#define TAG_PROBLEMSEVERITY (0x10 | TAG_TYPE_DWORD)
67#define TAG_HTMLHELPID (0x15 | TAG_TYPE_DWORD)
68#define TAG_FLAGS (0x17 | TAG_TYPE_DWORD)
69#define TAG_LAYER_TAGID (0x1A | TAG_TYPE_DWORD)
70#define TAG_LINKER_VERSION (0x1C | TAG_TYPE_DWORD)
71#define TAG_LINK_DATE (0x1D | TAG_TYPE_DWORD)
72#define TAG_UPTO_LINK_DATE (0x1E | TAG_TYPE_DWORD)
73#define TAG_APP_NAME_RC_ID (0x24 | TAG_TYPE_DWORD)
74#define TAG_VENDOR_NAME_RC_ID (0x25 | TAG_TYPE_DWORD)
75#define TAG_SUMMARY_MSG_RC_ID (0x26 | TAG_TYPE_DWORD)
76#define TAG_OS_PLATFORM (0x23 | TAG_TYPE_DWORD)
78#define TAG_TIME (0x1 | TAG_TYPE_QWORD)
79#define TAG_BIN_FILE_VERSION (0x2 | TAG_TYPE_QWORD)
80#define TAG_BIN_PRODUCT_VERSION (0x3 | TAG_TYPE_QWORD)
81#define TAG_UPTO_BIN_PRODUCT_VERSION (0x6 | TAG_TYPE_QWORD)
82#define TAG_UPTO_BIN_FILE_VERSION (0xD | TAG_TYPE_QWORD)
83#define TAG_FLAG_LUA (0x10 | TAG_TYPE_QWORD)
85#define TAG_DATABASE (0x1 | TAG_TYPE_LIST)
86#define TAG_INEXCLUD (0x3 | TAG_TYPE_LIST)
87#define TAG_EXE (0x7 | TAG_TYPE_LIST)
88#define TAG_MATCHING_FILE (0x8 | TAG_TYPE_LIST)
89#define TAG_SHIM_REF (0x9| TAG_TYPE_LIST)
90#define TAG_LAYER (0xB | TAG_TYPE_LIST)
91#define TAG_APPHELP (0xD | TAG_TYPE_LIST)
92#define TAG_LINK (0xE | TAG_TYPE_LIST)
93#define TAG_DATA (0xF | TAG_TYPE_LIST)
94#define TAG_STRINGTABLE (0x801 | TAG_TYPE_LIST)
96#define TAG_STRINGTABLE_ITEM (0x801 | TAG_TYPE_STRING)
98#define TAG_NAME (0x1 | TAG_TYPE_STRINGREF)
99#define TAG_MODULE (0x3 | TAG_TYPE_STRINGREF)
100#define TAG_VENDOR (0x5 | TAG_TYPE_STRINGREF)
101#define TAG_APP_NAME (0x6 | TAG_TYPE_STRINGREF)
102#define TAG_COMMAND_LINE (0x8 | TAG_TYPE_STRINGREF)
103#define TAG_COMPANY_NAME (0x9 | TAG_TYPE_STRINGREF)
104#define TAG_WILDCARD_NAME (0xB | TAG_TYPE_STRINGREF)
105#define TAG_PRODUCT_NAME (0x10 | TAG_TYPE_STRINGREF)
106#define TAG_PRODUCT_VERSION (0x11 | TAG_TYPE_STRINGREF)
107#define TAG_FILE_DESCRIPTION (0x12 | TAG_TYPE_STRINGREF)
108#define TAG_FILE_VERSION (0x13 | TAG_TYPE_STRINGREF)
109#define TAG_ORIGINAL_FILENAME (0x14 | TAG_TYPE_STRINGREF)
110#define TAG_INTERNAL_NAME (0x15 | TAG_TYPE_STRINGREF)
111#define TAG_LEGAL_COPYRIGHT (0x16 | TAG_TYPE_STRINGREF)
112#define TAG_APPHELP_DETAILS (0x18 | TAG_TYPE_STRINGREF)
113#define TAG_LINK_URL (0x19 | TAG_TYPE_STRINGREF)
114#define TAG_APPHELP_TITLE (0x1B | TAG_TYPE_STRINGREF)
116#define TAG_COMPILER_VERSION (0x22 | TAG_TYPE_STRINGREF)
118#define TAG_GENERAL (0x2 | TAG_TYPE_NULL)
120#define TAG_EXE_ID (0x4 | TAG_TYPE_BINARY)
121#define TAG_DATA_BITS (0x5 | TAG_TYPE_BINARY)
122#define TAG_DATABASE_ID (0x7 | TAG_TYPE_BINARY)
124#define DB_INFO_FLAGS_VALID_GUID 1
182DEFINE_GUID(GUID_DATABASE_TEST, 0xe39b0eb0, 0x55db, 0x450b, 0x9b, 0xd4, 0xd2, 0x0c, 0x94, 0x84, 0x26, 0x0f);
183DEFINE_GUID(GUID_MAIN_DATABASE, 0x11111111, 0x1111, 0x1111, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11);
197 if (!pSdbGetDatabaseInformation || !pSdbFreeDatabaseInformation)
199 skip(
"GetDatabaseInformation or SdbFreeDatabaseInformation not found\n");
204 memset(pInfo, 0xDE,
sizeof(*pInfo) * 2);
206 fResult = pSdbGetDatabaseInformation(
pdb, pInfo);
207 ok(fResult,
"SdbGetDatabaseInformation failed\n");
217 ok(pInfo->
dwMajor == 3,
"Expected pInfo->dwMajor to be 3, was: %d\n", pInfo->
dwMajor);
218 ok(pInfo->
dwMinor == 0,
"Expected pInfo->dwMinor to be 0, was: %d\n", pInfo->
dwMinor);
221 ok(pInfo[1].dwMajor == 0xdededede,
"Cookie2 corrupt: 0x%x\n", pInfo[1].dwMajor);
225 ok(pInfo->
dwMajor == 2,
"Expected pInfo->dwMajor to be 2, was: %d\n", pInfo->
dwMajor);
228 ok(pInfo->
dwMinor == 1,
"Expected pInfo->dwMinor to be 1, was: %d\n", pInfo->
dwMinor);
235 ok(pInfo->
dwMinor == dwExpect,
"Expected pInfo->dwMinor to be %d, was: %d\n", dwExpect, pInfo->
dwMinor);
238 ok(pInfo[1].
dwFlags == 0xdededede,
"Cookie1 corrupt: 0x%x\n", pInfo[1].
dwFlags);
239 ok(pInfo[1].dwMajor == 0xdededede,
"Cookie2 corrupt: 0x%x\n", pInfo[1].dwMajor);
252 static const WCHAR tag_size_string[] =
L"SIZE";
253 static const WCHAR tag_flag_lua_string[] =
L"FLAG_LUA";
254 static const WCHAR invalid_tag[] =
L"InvalidTag";
267 TAGID tagid, ptagid, stringref = 6;
272 ok(
pdb !=
NULL,
"failed to create database\n");
275 ret = pSdbWriteDWORDTag(
pdb,
tags[0], 0xDEADBEEF);
276 ok(
ret,
"failed to write DWORD tag\n");
277 ret = pSdbWriteQWORDTag(
pdb,
tags[1], 0xDEADBEEFBABE);
278 ok(
ret,
"failed to write QWORD tag\n");
279 ret = pSdbWriteStringRefTag(
pdb,
tags[2], stringref);
280 ok(
ret,
"failed to write stringref tag\n");
281 tagid = pSdbBeginWriteListTag(
pdb,
tags[3]);
284 ok(
ret,
"failed to write string tag\n");
286 ok(
ret,
"failed to write NULL tag\n");
288 ok(
ret,
"failed to write WORD tag\n");
289 ret = pSdbEndWriteListTag(
pdb, tagid);
290 ok(
ret,
"failed to update list size\n");
292 pSdbCloseDatabaseWrite(
pdb);
297 ok(
pdb !=
NULL,
"unexpected NULL handle\n");
304 tag = pSdbGetTagFromTagID(
pdb, tagid);
307 string = pSdbTagToString(
tag);
308 ok(
lstrcmpW(
string, tag_size_string) == 0,
"unexpected string %s, expected %s\n",
311 dword = pSdbReadDWORDTag(
pdb, tagid, 0);
312 ok(dword == 0xDEADBEEF,
"unexpected value %u, expected 0xDEADBEEF\n", dword);
318 tag = pSdbGetTagFromTagID(
pdb, tagid);
321 string = pSdbTagToString(
tag);
324 ok(
lstrcmpW(
string, tag_flag_lua_string) == 0,
"unexpected string %s, expected %s\n",
329 ok(
lstrcmpW(
string, invalid_tag) == 0,
"unexpected string %s, expected %s\n",
333 qword = pSdbReadQWORDTag(
pdb, tagid, 0);
334 ok(qword == 0xDEADBEEFBABE,
"unexpected value 0x%I64x, expected 0xDEADBEEFBABE\n", qword);
337 string = pSdbGetStringTagPtr(
pdb, tagid);
338 ok(
string && (
lstrcmpW(
string,
temp) == 0),
"unexpected string %s, expected %s\n",
342 tagid = pSdbGetFirstChild(
pdb, ptagid);
344 string = pSdbGetStringTagPtr(
pdb, tagid);
345 ok(
string && (
lstrcmpW(
string,
temp) == 0),
"unexpected string %s, expected %s\n",
348 ok(pSdbReadStringTag(
pdb, tagid,
buffer, 6),
"failed to write string to buffer\n");
350 ok(pSdbReadStringTag(
pdb, tagid,
buffer, 3) ==
FALSE,
"string was written to buffer, but failure was expected");
351 ok(pSdbGetTagDataSize(
pdb, tagid) == 5 *
sizeof(
WCHAR),
"string has unexpected size\n");
353 tagid = pSdbGetNextChild(
pdb, ptagid, tagid);
354 tag = pSdbGetTagFromTagID(
pdb, tagid);
356 ok(pSdbGetTagDataSize(
pdb, tagid) == 0,
"null tag with size > 0\n");
358 tagid = pSdbGetNextChild(
pdb, ptagid, tagid);
359 word = pSdbReadWORDTag(
pdb, tagid, 0);
360 ok(
word == 0xACE,
"unexpected value 0x%x, expected 0x%x\n",
word, 0xACE);
364 pSdbCloseDatabase(
pdb);
374 ok(
pdb !=
NULL,
"unexpected NULL handle\n");
379 ok(
ret,
"failed to write tag from binary file\n");
380 pSdbCloseDatabaseWrite(
pdb);
388 ok(
pdb !=
NULL,
"unexpected NULL handle\n");
395 ok(
ret,
"failed to read binary tag\n");
397 pSdbCloseDatabase(
pdb);
410 WCHAR path1[] = {
't',
'e',
's',
't',
'.',
's',
'd',
'b',0};
422 ok(
pdb !=
NULL,
"Expected a valid database\n");
426 ok(tagdb == 12,
"Expected tag to be 12, was %u\n", tagdb);
429 ok(
ret,
"Expected SdbWriteStringTag to succeed\n");
430 ret = pSdbEndWriteListTag(
pdb, tagdb);
431 ok(
ret,
"Expected SdbEndWriteListTag to succeed\n");
434 ok(tagdb == 30,
"Expected tag to be 24, was %u\n", tagdb);
437 ok(
ret,
"Expected SdbWriteStringTag to succeed\n");
438 ret = pSdbEndWriteListTag(
pdb, tagdb);
439 ok(
ret,
"Expected SdbEndWriteListTag to succeed\n");
441 pSdbCloseDatabaseWrite(
pdb);
445 ok(
pdb !=
NULL,
"Expected a valid database\n");
450 ok(tagdb == 12,
"Expected tag to be 12, was %u\n", tagdb);
451 size = pSdbGetTagDataSize(
pdb, tagdb);
452 ok(
size == 12,
"Expected size to be 12, was %u\n",
size);
455 ok(tagstr == 18,
"Expected string tag to be 18, was %u\n", tagstr);
456 tag = pSdbGetTagFromTagID(
pdb, tagstr);
458 size = pSdbGetTagDataSize(
pdb, tagstr);
459 ok(
size == 4,
"Expected size to be 4, was 0x%x\n",
size);
461 tagstr = pSdbFindNextTag(
pdb, tagdb, tagstr);
462 ok(tagstr == 24,
"Expected string tag to be 24, was %u\n", tagstr);
463 tag = pSdbGetTagFromTagID(
pdb, tagstr);
465 size = pSdbGetTagDataSize(
pdb, tagstr);
466 ok(
size == 4,
"Expected size to be 4, was 0x%x\n",
size);
469 ok(tagdb == 30,
"Expected tag to be 30, was %u\n", tagdb);
470 size = pSdbGetTagDataSize(
pdb, tagdb);
471 ok(
size == 12,
"Expected size to be 12, was %u\n",
size);
474 ok(tagstr == 36,
"Expected string tag to be 36, was %u\n", tagstr);
475 tag = pSdbGetTagFromTagID(
pdb, tagstr);
477 size = pSdbGetTagDataSize(
pdb, tagstr);
478 ok(
size == 4,
"Expected size to be 4, was %u\n",
size);
480 tagstr = pSdbFindNextTag(
pdb, tagdb, tagstr);
481 ok(tagstr == 42,
"Expected string tag to be 42, was %u\n", tagstr);
482 tag = pSdbGetTagFromTagID(
pdb, tagstr);
484 size = pSdbGetTagDataSize(
pdb, tagstr);
485 ok(
size == 4,
"Expected size to be 4, was 0x%x\n",
size);
488 ok(tagdb == 48,
"Expected tag to be 48, was %u\n", tagdb);
489 size = pSdbGetTagDataSize(
pdb, tagdb);
490 ok(
size == 32,
"Expected size to be 32, was %u\n",
size);
492 tagstr = pSdbGetFirstChild(
pdb, tagdb);
493 ok(tagstr == 54,
"Expected string tag to be 54, was %u\n", tagstr);
494 tag = pSdbGetTagFromTagID(
pdb, tagstr);
496 size = pSdbGetTagDataSize(
pdb, tagstr);
497 ok(
size == 10,
"Expected size to be 10, was %u\n",
size);
498 ptr = pSdbGetStringTagPtr(
pdb, tagstr);
499 ok(
ptr !=
NULL,
"Expected a valid pointer\n");
503 tagstr = pSdbGetNextChild(
pdb, tagdb, tagstr);
504 ok(tagstr == 70,
"Expected string tag to be 70, was %u\n", tagstr);
505 tag = pSdbGetTagFromTagID(
pdb, tagstr);
507 size = pSdbGetTagDataSize(
pdb, tagstr);
508 ok(
size == 10,
"Expected size to be 10, was %u\n",
size);
509 ptr = pSdbGetStringTagPtr(
pdb, tagstr);
510 ok(
ptr !=
NULL,
"Expected a valid pointer\n");
514 pSdbCloseDatabase(
pdb);
529 ok(
ret,
"Failed to write string %u/%u\n",
n,
count);
531 pSdbCloseDatabaseWrite(
pdb);
536 static const WCHAR path1[] = {
't',
'e',
's',
't',
'.',
's',
'd',
'b',0};
537 static const WCHAR test1[] = {
't',
'e',
's',
't',
'1',0};
538 static const WCHAR test2[] = {
'T',
'e',
's',
't',
'1',0};
539 static const WCHAR test3[] = {
'T',
'E',
's',
't',
'1',0};
540 static const WCHAR test4[] = {
'T',
'E',
'S',
'T',
'1',0};
541 static const WCHAR test5[] = {
'T',
'E',
'S',
'T',
'2',0};
542 static const WCHAR lipsum[] = {
'L',
'o',
'r',
'e',
'm',
' ',
'i',
'p',
's',
'u',
'm',
' ',
'd',
'o',
'l',
'o',
'r',
' ',
's',
'i',
't',
' ',
'a',
'm',
'e',
't',
',',
' ',
'c',
'o',
'n',
's',
'e',
'c',
't',
'e',
't',
'u',
'r',
' ',
'a',
'd',
'i',
'p',
'i',
's',
'c',
'i',
'n',
'g',
' ',
'e',
'l',
'i',
't',
'.',
' ',
'N',
'u',
'l',
'l',
'a',
' ',
'a',
'n',
't',
'e',
' ',
'r',
'i',
's',
'u',
's',
',',
' ',
'm',
'a',
'l',
'e',
's',
'u',
'a',
'd',
'a',
' ',
's',
'e',
'd',
' ',
'i',
'a',
'c',
'u',
'l',
'i',
's',
' ',
'l',
'u',
'c',
't',
'u',
's',
',',
' ',
'o',
'r',
'n',
'a',
'r',
'e',
' ',
'p',
'u',
'l',
'v',
'i',
'n',
'a',
'r',
' ',
'v',
'e',
'l',
'i',
't',
'.',
' ',
'L',
'o',
'r',
'e',
'm',
' ',
'i',
'p',
's',
'u',
'm',
' ',
'd',
'o',
'l',
'o',
'r',
' ',
's',
'i',
't',
' ',
'a',
'm',
'e',
't',
',',
' ',
'c',
'o',
'n',
's',
'e',
'c',
't',
'e',
't',
'u',
'r',
' ',
'a',
'd',
'i',
'p',
'i',
's',
'c',
'i',
'n',
'g',
' ',
'e',
'l',
'i',
't',
'.',
' ',
'I',
'n',
't',
'e',
'g',
'e',
'r',
' ',
'q',
'u',
'i',
's',
' ',
'f',
'e',
'l',
'i',
's',
' ',
'u',
't',
' ',
'l',
'e',
'o',
' ',
'e',
'l',
'e',
'i',
'f',
'e',
'n',
'd',
' ',
'u',
'l',
't',
'r',
'i',
'c',
'e',
's',
' ',
'f',
'i',
'n',
'i',
'b',
'u',
's',
' ',
'e',
'u',
' ',
'd',
'o',
'l',
'o',
'r',
'.',
' ',
'I',
'n',
' ',
'b',
'i',
'b',
'e',
'n',
'd',
'u',
'm',
',',
' ',
'e',
'r',
'o',
's',
' ',
'e',
'u',
' ',
'f',
'a',
'u',
'c',
'i',
'b',
'u',
's',
' ',
'c',
'o',
'n',
's',
'e',
'q',
'u',
'a',
't',
',',
' ',
'n',
'i',
's',
'i',
' ',
'm',
'a',
'g',
'n',
'a',
' ',
'v',
'e',
'n',
'e',
'n',
'a',
't',
'i',
's',
' ',
'j',
'u',
's',
't',
'o',
',',
' ',
'a',
't',
' ',
't',
'r',
'i',
's',
't',
'i',
'q',
'u',
'e',
' ',
'm',
'e',
't',
'u',
's',
' ',
'd',
'o',
'l',
'o',
'r',
' ',
'u',
't',
' ',
'r',
'i',
's',
'u',
's',
'.',
' ',
'N',
'u',
'n',
'c',
' ',
'e',
'u',
' ',
'o',
'd',
'i',
'o',
' ',
'd',
'i',
'g',
'n',
'i',
's',
's',
'i',
'm',
',',
' ',
'o',
'r',
'n',
'a',
'r',
'e',
' ',
'a',
'n',
't',
'e',
' ',
'g',
'r',
'a',
'v',
'i',
'd',
'a',
',',
' ',
'l',
'o',
'b',
'o',
'r',
't',
'i',
's',
' ',
'e',
'r',
'o',
's',
'.',
' ',
'C',
'r',
'a',
's',
' ',
's',
'e',
'm',
' ',
'e',
'x',
',',
' ',
'c',
'o',
'n',
's',
'e',
'c',
't',
'e',
't',
'u',
'r',
' ',
'p',
'u',
'l',
'v',
'i',
'n',
'a',
'r',
' ',
't',
'i',
'n',
'c',
'i',
'd',
'u',
'n',
't',
' ',
'e',
'u',
',',
' ',
'c',
'o',
'n',
'g',
'u',
'e',
' ',
'a',
' ',
'e',
'r',
'o',
's',
'.',
' ',
'C',
'u',
'r',
'a',
'b',
'i',
't',
'u',
'r',
' ',
'e',
'r',
'o',
's',
' ',
'e',
'r',
'a',
't',
',',
' ',
'p',
'e',
'l',
'l',
'e',
'n',
't',
'e',
's',
'q',
'u',
'e',
' ',
'e',
't',
' ',
'n',
'i',
'b',
'h',
' ',
'q',
'u',
'i',
's',
',',
' ',
'i',
'n',
't',
'e',
'r',
'd',
'u',
'm',
' ',
't',
'e',
'm',
'p',
'o',
'r',
' ',
'o',
'd',
'i',
'o',
'.',
' ',
'E',
't',
'i',
'a',
'm',
' ',
's',
'a',
'p',
'i',
'e',
'n',
' ',
's',
'a',
'p',
'i',
'e',
'n',
',',
' ',
'a',
'l',
'i',
'q',
'u',
'a',
'm',
' ',
'u',
't',
' ',
'a',
'l',
'i',
'q',
'u',
'a',
'm',
' ',
'a',
't',
',',
' ',
's',
'a',
'g',
'i',
't',
't',
'i',
's',
' ',
'e',
'u',
' ',
'm',
'a',
'g',
'n',
'a',
'.',
' ',
'M',
'a',
'e',
'c',
'e',
'n',
'a',
's',
' ',
'm',
'a',
'g',
'n',
'a',
' ',
'm',
'a',
'g',
'n',
'a',
',',
' ',
's',
'u',
's',
'c',
'i',
'p',
'i',
't',
' ',
'u',
't',
' ',
'l',
'o',
'r',
'e',
'm',
' ',
'u',
't',
',',
' ',
'v',
'a',
'r',
'i',
'u',
's',
' ',
'p',
'r',
'e',
't',
'i',
'u',
'm',
' ',
'f',
'e',
'l',
'i',
's',
'.',
' ',
'I',
'n',
't',
'e',
'g',
'e',
'r',
' ',
't',
'i',
'n',
'c',
'i',
'd',
'u',
'n',
't',
',',
' ',
'm',
'e',
't',
'u',
's',
' ',
'v',
'e',
'l',
' ',
's',
'o',
'l',
'l',
'i',
'c',
'i',
't',
'u',
'd',
'i',
'n',
' ',
'f',
'i',
'n',
'i',
'b',
'u',
's',
',',
' ',
'f',
'e',
'l',
'i',
's',
' ',
'e',
'r',
'a',
't',
' ',
'm',
'o',
'l',
'e',
's',
't',
'i',
'e',
' ',
'u',
'r',
'n',
'a',
',',
' ',
'a',
' ',
'c',
'o',
'n',
'd',
'i',
'm',
'e',
'n',
't',
'u',
'm',
' ',
'a',
'u',
'g',
'u',
'e',
' ',
'a',
'r',
'c',
'u',
' ',
'v',
'i',
't',
'a',
'e',
' ',
'r',
'i',
's',
'u',
's',
'.',
' ',
'E',
't',
'i',
'a',
'm',
' ',
'i',
'd',
' ',
's',
'a',
'g',
'i',
't',
't',
'i',
's',
' ',
'q',
'u',
'a',
'm',
'.',
' ',
'M',
'o',
'r',
'b',
'i',
' ',
'a',
' ',
'u',
'l',
't',
'r',
'i',
'c',
'i',
'e',
's',
' ',
'n',
'u',
'n',
'c',
'.',
' ',
'P',
'h',
'a',
's',
'e',
'l',
'l',
'u',
's',
' ',
'e',
'r',
'o',
's',
' ',
'r',
'i',
's',
'u',
's',
',',
' ',
'c',
'u',
'r',
's',
'u',
's',
' ',
'u',
'l',
'l',
'a',
'm',
'c',
'o',
'r',
'p',
'e',
'r',
' ',
'm',
'a',
's',
's',
'a',
' ',
's',
'e',
'd',
',',
' ',
'd',
'i',
'g',
'n',
'i',
's',
's',
'i',
'm',
' ',
'c',
'o',
'n',
's',
'e',
'q',
'u',
'a',
't',
' ',
'l',
'i',
'g',
'u',
'l',
'a',
'.',
' ',
'A',
'l',
'i',
'q',
'u',
'a',
'm',
' ',
't',
'u',
'r',
'p',
'i',
's',
' ',
'a',
'r',
'c',
'u',
',',
' ',
'a',
'c',
'c',
'u',
'm',
's',
'a',
'n',
' ',
'q',
'u',
'i',
's',
' ',
's',
'a',
'p',
'i',
'e',
'n',
' ',
'v',
'i',
't',
'a',
'e',
',',
' ',
'l',
'a',
'c',
'i',
'n',
'i',
'a',
' ',
'e',
'u',
'i',
's',
'm',
'o',
'd',
' ',
'n',
'i',
's',
'l',
'.',
' ',
'M',
'a',
'u',
'r',
'i',
's',
' ',
'i',
'd',
' ',
'f',
'e',
'l',
'i',
's',
' ',
's',
'e',
'm',
'.',0};
544 static const WCHAR lipsum2[] = {
'L',
'o',
'r',
'e',
'm',
' ',
'i',
'p',
's',
'u',
'm',
' ',
'd',
'o',
'l',
'o',
'r',
' ',
's',
'i',
't',
' ',
'a',
'm',
'e',
't',
',',
' ',
'c',
'o',
'n',
's',
'e',
'c',
't',
'e',
't',
'u',
'r',
' ',
'a',
'd',
'i',
'p',
'i',
's',
'c',
'i',
'n',
'g',
' ',
'e',
'l',
'i',
't',
'.',
' ',
'N',
'u',
'l',
'l',
'a',
' ',
'a',
'n',
't',
'e',
' ',
'r',
'i',
's',
'u',
's',
',',
' ',
'm',
'a',
'l',
'e',
's',
'u',
'a',
'd',
'a',
' ',
's',
'e',
'd',
' ',
'i',
'a',
'c',
'u',
'l',
'i',
's',
' ',
'l',
'u',
'c',
't',
'u',
's',
',',
' ',
'o',
'r',
'n',
'a',
'r',
'e',
' ',
'p',
'u',
'l',
'v',
'i',
'n',
'a',
'r',
' ',
'v',
'e',
'l',
'i',
't',
'.',
' ',
'L',
'o',
'r',
'e',
'm',
' ',
'i',
'p',
's',
'u',
'm',
' ',
'd',
'o',
'l',
'o',
'r',
' ',
's',
'i',
't',
' ',
'a',
'm',
'e',
't',
',',
' ',
'c',
'o',
'n',
's',
'e',
'c',
't',
'e',
't',
'u',
'r',
' ',
'a',
'd',
'i',
'p',
'i',
's',
'c',
'i',
'n',
'g',
' ',
'e',
'l',
'i',
't',
'.',
' ',
'I',
'n',
't',
'e',
'g',
'e',
'r',
' ',
'q',
'u',
'i',
's',
' ',
'f',
'e',
'l',
'i',
's',
' ',
'u',
't',
' ',
'l',
'e',
'o',
' ',
'e',
'l',
'e',
'i',
'f',
'e',
'n',
'd',
' ',
'u',
'l',
't',
'r',
'i',
'c',
'e',
's',
' ',
'f',
'i',
'n',
'i',
'b',
'u',
's',
' ',
'e',
'u',
' ',
'd',
'o',
'l',
'o',
'r',
'.',
' ',
'I',
'n',
' ',
'b',
'i',
'b',
'e',
'n',
'd',
'u',
'm',
',',
' ',
'e',
'r',
'o',
's',
' ',
'e',
'u',
' ',
'f',
'a',
'u',
'c',
'i',
'b',
'u',
's',
' ',
'c',
'o',
'n',
's',
'e',
'q',
'u',
'a',
't',
',',
' ',
'n',
'i',
's',
'i',
' ',
'm',
'a',
'g',
'n',
'a',
' ',
'v',
'e',
'n',
'e',
'n',
'a',
't',
'i',
's',
' ',
'j',
'u',
's',
't',
'o',
',',
' ',
'a',
't',
' ',
't',
'r',
'i',
's',
't',
'i',
'q',
'u',
'e',
' ',
'm',
'e',
't',
'u',
's',
' ',
'd',
'o',
'l',
'o',
'r',
' ',
'u',
't',
' ',
'r',
'i',
's',
'u',
's',
'.',
' ',
'N',
'u',
'n',
'c',
' ',
'e',
'u',
' ',
'o',
'd',
'i',
'o',
' ',
'd',
'i',
'g',
'n',
'i',
's',
's',
'i',
'm',
',',
' ',
'o',
'r',
'n',
'a',
'r',
'e',
' ',
'a',
'n',
't',
'e',
' ',
'g',
'r',
'a',
'v',
'i',
'd',
'a',
',',
' ',
'l',
'o',
'b',
'o',
'r',
't',
'i',
's',
' ',
'e',
'r',
'o',
's',
'.',
' ',
'C',
'r',
'a',
's',
' ',
's',
'e',
'm',
' ',
'e',
'x',
',',
' ',
'c',
'o',
'n',
's',
'e',
'c',
't',
'e',
't',
'u',
'r',
' ',
'p',
'u',
'l',
'v',
'i',
'n',
'a',
'r',
' ',
't',
'i',
'n',
'c',
'i',
'd',
'u',
'n',
't',
' ',
'e',
'u',
',',
' ',
'c',
'o',
'n',
'g',
'u',
'e',
' ',
'a',
' ',
'e',
'r',
'o',
's',
'.',
' ',
'C',
'u',
'r',
'a',
'b',
'i',
't',
'u',
'r',
' ',
'e',
'r',
'o',
's',
' ',
'e',
'r',
'a',
't',
',',
' ',
'p',
'e',
'l',
'l',
'e',
'n',
't',
'e',
's',
'q',
'u',
'e',
' ',
'e',
't',
' ',
'n',
'i',
'b',
'h',
' ',
'q',
'u',
'i',
's',
',',
' ',
'i',
'n',
't',
'e',
'r',
'd',
'u',
'm',
' ',
't',
'e',
'm',
'p',
'o',
'r',
' ',
'o',
'd',
'i',
'o',
'.',
' ',
'E',
't',
'i',
'a',
'm',
' ',
's',
'a',
'p',
'i',
'e',
'n',
' ',
's',
'a',
'p',
'i',
'e',
'n',
',',
' ',
'a',
'l',
'i',
'q',
'u',
'a',
'm',
' ',
'u',
't',
' ',
'a',
'l',
'i',
'q',
'u',
'a',
'm',
' ',
'a',
't',
',',
' ',
's',
'a',
'g',
'i',
't',
't',
'i',
's',
' ',
'e',
'u',
' ',
'm',
'a',
'g',
'n',
'a',
'.',
' ',
'M',
'a',
'e',
'c',
'e',
'n',
'a',
's',
' ',
'm',
'a',
'g',
'n',
'a',
' ',
'm',
'a',
'g',
'n',
'a',
',',
' ',
's',
'u',
's',
'c',
'i',
'p',
'i',
't',
' ',
'u',
't',
' ',
'l',
'o',
'r',
'e',
'm',
' ',
'u',
't',
',',
' ',
'v',
'a',
'r',
'i',
'u',
's',
' ',
'p',
'r',
'e',
't',
'i',
'u',
'm',
' ',
'f',
'e',
'l',
'i',
's',
'.',
' ',
'I',
'n',
't',
'e',
'g',
'e',
'r',
' ',
't',
'i',
'n',
'c',
'i',
'd',
'u',
'n',
't',
',',
' ',
'm',
'e',
't',
'u',
's',
' ',
'v',
'e',
'l',
' ',
's',
'o',
'l',
'l',
'i',
'c',
'i',
't',
'u',
'd',
'i',
'n',
' ',
'f',
'i',
'n',
'i',
'b',
'u',
's',
',',
' ',
'f',
'e',
'l',
'i',
's',
' ',
'e',
'r',
'a',
't',
' ',
'm',
'o',
'l',
'e',
's',
't',
'i',
'e',
' ',
'u',
'r',
'n',
'a',
',',
' ',
'a',
' ',
'c',
'o',
'n',
'd',
'i',
'm',
'e',
'n',
't',
'u',
'm',
' ',
'a',
'u',
'g',
'u',
'e',
' ',
'a',
'r',
'c',
'u',
' ',
'v',
'i',
't',
'a',
'e',
' ',
'r',
'i',
's',
'u',
's',
'.',
' ',
'E',
't',
'i',
'a',
'm',
' ',
'i',
'd',
' ',
's',
'a',
'g',
'i',
't',
't',
'i',
's',
' ',
'q',
'u',
'a',
'm',
'.',
' ',
'M',
'o',
'r',
'b',
'i',
' ',
'a',
' ',
'u',
'l',
't',
'r',
'i',
'c',
'i',
'e',
's',
' ',
'n',
'u',
'n',
'c',
'.',
' ',
'P',
'h',
'a',
's',
'e',
'l',
'l',
'u',
's',
' ',
'e',
'r',
'o',
's',
' ',
'r',
'i',
's',
'u',
's',
',',
' ',
'c',
'u',
'r',
's',
'u',
's',
' ',
'u',
'l',
'l',
'a',
'm',
'c',
'o',
'r',
'p',
'e',
'r',
' ',
'm',
'a',
's',
's',
'a',
' ',
's',
'e',
'd',
',',
' ',
'd',
'i',
'g',
'n',
'i',
's',
's',
'i',
'm',
' ',
'c',
'o',
'n',
's',
'e',
'q',
'u',
'a',
't',
' ',
'l',
'i',
'g',
'u',
'l',
'a',
'.',
' ',
'A',
'l',
'i',
'q',
'u',
'a',
'm',
' ',
't',
'u',
'r',
'p',
'i',
's',
' ',
'a',
'r',
'c',
'u',
',',
' ',
'a',
'c',
'c',
'u',
'm',
's',
'a',
'n',
' ',
'q',
'u',
'i',
's',
' ',
's',
'a',
'p',
'i',
'e',
'n',
' ',
'v',
'i',
't',
'a',
'e',
',',
' ',
'l',
'a',
'c',
'i',
'n',
'i',
'a',
' ',
'e',
'u',
'i',
's',
'm',
'o',
'd',
' ',
'n',
'i',
's',
'l',
'.',
' ',
'M',
'a',
'u',
'r',
'i',
's',
' ',
'i',
'd',
' ',
'f',
'e',
'l',
'i',
's',
' ',
's',
'e',
'm',
'!',0};
547 static const TAGID expected_str[] = { 0xc, 0x12, 0x18, 0x1e, 0x24, 0x2a, 0x30, 0x36 };
548 static const TAGID expected_tab[] = { 6, 0x18, 0x2a, 0x3c, 0x4e, 0x60, 0x846, 0x102c };
551 for (
n = 0;
n < (
sizeof(all) /
sizeof(all[0])); ++
n)
559 ok(
pdb !=
NULL,
"Expected a valid database\n");
566 for (
j = 0;
j <=
n; ++
j)
568 ok(tagstr == expected_str[
j],
"Expected tagstr to be 0x%x, was 0x%x for %u/%u\n", expected_str[
j], tagstr,
j,
n);
573 TAG tag = pSdbGetTagFromTagID(
pdb, tagstr);
575 size = pSdbGetTagDataSize(
pdb, tagstr);
576 ok(
size == 4,
"Expected datasize to be 4, was %u for %u/%u\n",
size,
j,
n);
577 data = pSdbGetStringTagPtr(
pdb, tagstr);
582 ok(tagstr ==
TAGID_NULL,
"Expected to be at the end for %u\n",
n);
586 expected_table = 0xc + (
n+1)*6;
587 ok(
table == expected_table,
"Expected to find a stringtable at 0x%x instead of 0x%x for %u\n", expected_table,
table,
n);
591 for (
j = 0;
j <=
n; ++
j)
593 ok(tagstr == (expected_tab[
j] + expected_table),
"Expected tagstr to be 0x%x, was 0x%x for %u/%u\n", (expected_tab[
j] + expected_table), tagstr,
j,
n);
598 TAG tag = pSdbGetTagFromTagID(
pdb, tagstr);
600 size = pSdbGetTagDataSize(
pdb, tagstr);
601 expected_size = (
lstrlenW(all[
j])+1) * 2;
602 ok(
size == expected_size,
"Expected datasize to be %u, was %u for %u/%u\n", expected_size,
size,
j,
n);
603 data = pSdbGetStringTagPtr(
pdb, tagstr);
608 ok(tagstr ==
TAGID_NULL,
"Expected to be at the end for %u\n",
n);
611 pSdbCloseDatabase(
pdb);
666#define match_strw_attr (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_strw_attr_imp
667#define match_dw_attr (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_dw_attr_imp
668#define match_qw_attr (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_qw_attr_imp
669#define match_guid_attr (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : match_guid_attr_imp
678 ok(iter !=
TAGID_NULL,
"expected a result, got TAGID_NULL\n");
683 ok(
result,
"expected SdbReadBinaryTag not to fail.\n");
687 result = pSdbGUIDToString(&
guid, guid_wstr, 50);
688 ok(
result,
"expected SdbGUIDToString not to fail.\n");
693 ok_str(guid_str,
"{e39b0eb0-55db-450b-9bd4-d20c9484260f}");
695 ok(pSdbGetDatabaseID(
pdb, &
guid2),
"expected SdbGetDatabaseID not to fail.\n");
707 TAGID shimref, inexclude, is_include;
714 ok(shimref !=
TAGID_NULL,
"Expected a valid shim ref, got NULL\n");
721 ok(inexclude !=
TAGID_NULL,
"Expected a valid in/exclude ref, got NULL\n");
726 ok(is_include ==
TAGID_NULL,
"Expected a NULL include ref, but got one anyway.\n");
729 inexclude = pSdbFindNextTag(
pdb, shimref, inexclude);
730 ok(inexclude !=
TAGID_NULL,
"Expected a valid in/exclude ref, got NULL\n");
735 ok(is_include !=
TAGID_NULL,
"Expected a valid include ref, got NULL\n");
741 ok(matching_file !=
TAGID_NULL,
"Expected to find atleast 1 matching file.\n");
745 ok(
num < 4,
"Too many matches, expected only 4!\n");
787 ok(0,
"unknown case: %d\n",
num);
789 matching_file = pSdbFindNextTag(
pdb, exe, matching_file);
792 ok(matching_file !=
TAGID_NULL,
"Did expect a secondary match on %d\n",
num);
799 ok(matching_file ==
TAGID_NULL,
"Did not expect a secondary match on %d\n",
num);
850 apphelp = pSdbFindNextTag(
pdb, apphelp, apphelp);
851 ok(apphelp ==
TAGID_NULL,
"Did not expect a secondary match on %d\n",
num);
864 ok(layer_tagid ==
TAGID_NULL,
"expected not to find a layer tagid, got %x\n", layer_tagid);
885 L"apphelp_name_allow",
886 L"apphelp_vendor_allow",
887 { 0x4e50c93f, 0xb863, 0x4dfa, { 0xba, 0xe2, 0xd8, 0x0e, 0xf4, 0xce, 0x5c, 0x89 } },
897 L"test_disallow.exe",
898 L"apphelp_name_disallow",
899 L"apphelp_vendor_disallow",
900 { 0x156720e1, 0xef98, 0x4d04, { 0x96, 0x5a, 0xd8, 0x5d, 0xe0, 0x5e, 0x6d, 0x9f } },
913 { 0xce70ef69, 0xa21d, 0x408b, { 0x84, 0x5b, 0xf9, 0x9e, 0xac, 0x06, 0x09, 0xe7 } },
914 L"test_checkfile.txt",
926 { 0xb4ead144, 0xf640, 0x4e4b, { 0x94, 0xc4, 0x0c, 0x7f, 0xa8, 0x66, 0x23, 0xb0 } },
936 L"test_unknown_file.exe",
937 L"apphelp_name_allow",
938 L"apphelp_vendor_allow",
939 { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
959 ok(
num < 4,
"Too many matches, expected only 4!\n");
970 ok(apphelp !=
TAGID_NULL,
"Expected to find a valid apphelp match on %d.\n",
num);
976 ok(apphelp ==
TAGID_NULL,
"Did not expect an apphelp match on %d\n",
num);
990 exe = pSdbFindNextTag(
pdb,
root, exe);
992 ok(
num == 4,
"Expected to find 4 exe tags, found: %d\n",
num);
1004 L"http://reactos.org/disallow",
1005 L"apphelp_name_disallow",
1010 L"http://reactos.org/allow",
1011 L"apphelp_name_allow",
1023 ok(
num < 2,
"Too many matches, expected only 4!\n");
1035 apphelp = pSdbFindNextTag(
pdb,
root, apphelp);
1038 ok(
num == 2,
"Expected to find 2 layer tags, found: %d\n",
num);
1046 if (!pSdbGetDatabaseInformation || !pSdbFreeDatabaseInformation)
1048 skip(
"GetDatabaseInformation or SdbFreeDatabaseInformation not found\n");
1054 pSdbFreeDatabaseInformation(
NULL);
1058 ok(0,
"SdbFreeDatabaseInformation did not handle a NULL pointer very gracefully.\n");
1064 memset(pInfo, 0xDE,
sizeof(*pInfo) * 2);
1066 fResult = pSdbGetDatabaseInformation(
pdb, pInfo);
1067 ok(fResult,
"SdbGetDatabaseInformation failed\n");
1071 ok(
IsEqualGUID(GUID_DATABASE_TEST, pInfo->
Id),
"expected guids to be equal(%s:%s)\n",
1079 ok(pInfo->
dwMajor == 3,
"Expected pInfo->dwMajor to be 3, was: %d\n", pInfo->
dwMajor);
1080 ok(pInfo->
dwMinor == 0,
"Expected pInfo->dwMinor to be 0, was: %d\n", pInfo->
dwMinor);
1084 ok(pInfo[1].dwMajor == 0xdededede,
"Cookie2 corrupt: 0x%x\n", pInfo[1].dwMajor);
1088 ok(pInfo->
dwMajor == 2,
"Expected pInfo->dwMajor to be 2, was: %d\n", pInfo->
dwMajor);
1089 ok(pInfo->
dwMinor == 1,
"Expected pInfo->dwMinor to be 1, was: %d\n", pInfo->
dwMinor);
1092 ok(pInfo[1].dwMajor == 0xdededede,
"Cookie2 corrupt: 0x%x\n", pInfo[1].dwMajor);
1101 static const WCHAR path[] = {
't',
'e',
's',
't',
'_',
'd',
'b',
'.',
's',
'd',
'b',0};
1105 DWORD ver_hi, ver_lo;
1110 ver_hi = ver_lo = 0x12345678;
1111 ret = pSdbGetDatabaseVersion(
path, &ver_hi, &ver_lo);
1112 ok(
ret,
"Expected SdbGetDatabaseVersion to succeed\n");
1115 ok(ver_hi == 3,
"Expected ver_hi to be 3, was: %d\n", ver_hi);
1116 ok(ver_lo == 0,
"Expected ver_lo to be 0, was: %d\n", ver_lo);
1120 ok(ver_hi == 2,
"Expected ver_hi to be 2, was: %d\n", ver_hi);
1121 ok(ver_lo == 1,
"Expected ver_lo to be 1, was: %d\n", ver_lo);
1124 ver_hi = ver_lo = 0x12345678;
1125 ret = pSdbGetDatabaseVersion(
NULL, &ver_hi, &ver_lo);
1128 ok(
ret ==
FALSE,
"Expected SdbGetDatabaseVersion to fail\n");
1129 ok(ver_hi == 0,
"Expected ver_hi to be 0, was: 0x%x\n", ver_hi);
1130 ok(ver_lo == 0,
"Expected ver_lo to be 0, was: 0x%x\n", ver_lo);
1134 ok(
ret,
"Expected SdbGetDatabaseVersion to succeed\n");
1135 ok(ver_hi == 0x12345678,
"Expected ver_hi to be 0x12345678, was: 0x%x\n", ver_hi);
1136 ok(ver_lo == 0x12345678,
"Expected ver_lo to be 0x12345678, was: 0x%x\n", ver_lo);
1139 ver_hi = ver_lo = 0x12345678;
1140 ret = pSdbGetDatabaseVersion(
path + 1, &ver_hi, &ver_lo);
1143 ok(
ret ==
FALSE,
"Expected SdbGetDatabaseVersion to fail\n");
1144 ok(ver_hi == 0,
"Expected ver_hi to be 0, was: 0x%x\n", ver_hi);
1145 ok(ver_lo == 0,
"Expected ver_lo to be 0, was: 0x%x\n", ver_lo);
1149 ok(
ret,
"Expected SdbGetDatabaseVersion to succeed\n");
1150 ok(ver_hi == 0x12345678,
"Expected ver_hi to be 0x12345678, was: 0x%x\n", ver_hi);
1151 ok(ver_lo == 0x12345678,
"Expected ver_lo to be 0x12345678, was: 0x%x\n", ver_lo);
1155 ok(
pdb !=
NULL,
"unexpected NULL handle\n");
1165 ok_hex(tagLayer, (
int)tagAlt);
1166 ok_hex(tagLayer, (
int)tagAlt2);
1167 ok_hex(tagLayer, (
int)tagAlt3);
1175 pSdbCloseDatabase(
pdb);
1185 ok(pSdbGetDatabaseID(
pdb, &
guid),
"expected SdbGetDatabaseID not to fail.\n");
1190 skip(
"Not checking DB GUID, received a null pdb\n");
1195template<
typename SDBQUERYRESULT_T>
1200 ok_(
file,
line)(
query.adwExeFlags[
n] == 0,
"Expected adwExeFlags[%d] to be 0, was: %x for %d\n",
n,
query.adwExeFlags[0],
cur);
1209template<
typename SDBQUERYRESULT_T>
1214 SDBQUERYRESULT_T
query;
1232 ok(
ret == 0,
"SdbGetMatchingExe should have failed for %d.\n",
cur);
1243 ok(
ret == 0,
"SdbGetMatchingExe should have failed for %d.\n",
cur);
1255 ok(
ret,
"SdbGetMatchingExe should not fail for %d.\n",
cur);
1259 ok(
query.dwExeCount == exe_count,
"Expected dwExeCount to be %d, was %d for %d\n", exe_count,
query.dwExeCount,
cur);
1261 ok(
query.dwCustomSDBMap == 1,
"Expected dwCustomSDBMap to be 1, was %d for %d\n",
query.dwCustomSDBMap,
cur);
1262 ok(
query.dwLayerFlags == 0,
"Expected dwLayerFlags to be 0, was 0x%x for %d\n",
query.dwLayerFlags,
cur);
1271 expect_flags = 0x101;
1274 expect_flags = 0x121;
1276 expect_flags &= ~0x20;
1280 expect_flags &= ~0x100;
1282 ok(
query.dwFlags == expect_flags,
"Expected dwFlags to be 0x%x, was 0x%x for %d\n", expect_flags,
query.dwFlags,
cur);
1286 ok(
query.atrExes[
n] == 0,
"Expected atrExes[%d] to be 0, was: %x for %d\n",
n,
query.atrExes[
n],
cur);
1293 ok(
query.atrLayers[
n] == 0,
"Expected atrLayers[%d] to be 0, was: %x for %d\n",
n,
query.atrLayers[0],
cur);
1302 if (
query.atrExes[0])
1306 ret = pSdbTagRefToTagID(hsdb,
query.atrExes[0], &
pdb, &tagid);
1307 ok(
ret,
"SdbTagRefToTagID failed for %d.\n",
cur);
1308 ok(
pdb !=
NULL &&
pdb != (
PDB)0x12345678,
"SdbTagRefToTagID failed to return a pdb for %d.\n",
cur);
1309 ok(tagid != 0 && tagid != 0x76543210,
"SdbTagRefToTagID failed to return a tagid for %d.\n",
cur);
1314 TAG tag = pSdbGetTagFromTagID(
pdb, tagid);
1320 ret = pSdbTagIDToTagRef(hsdb,
pdb, tagid, &tr);
1321 ok(
ret,
"SdbTagIDToTagRef failed for %d.\n",
cur);
1322 ok(tr ==
query.atrExes[0],
"Expected tr to be 0x%x, was 0x%x for %d.\n",
query.atrExes[0], tr,
cur);
1326 skip(
"Skipping a bunch of tests because of an invalid pointer\n");
1334 ret = pSdbTagRefToTagID(hsdb,
query.atrLayers[0], &
pdb, &tagid);
1335 ok(
ret,
"SdbTagRefToTagID failed for %d.\n",
cur);
1336 ok(
pdb !=
NULL &&
pdb != (
PDB)0x12345678,
"SdbTagRefToTagID failed to return a pdb for %d.\n",
cur);
1337 ok(tagid != 0 && tagid != 0x76543210,
"SdbTagRefToTagID failed to return a tagid for %d.\n",
cur);
1342 TAG tag = pSdbGetTagFromTagID(
pdb, tagid);
1348 ret = pSdbTagIDToTagRef(hsdb,
pdb, tagid, &tr);
1349 ok(
ret,
"SdbTagIDToTagRef failed for %d.\n",
cur);
1354 skip(
"Skipping a bunch of tests because of an invalid pointer\n");
1360 ret = pSdbTagRefToTagID(hsdb, 0, &
pdb, &tagid);
1361 ok(
pdb !=
NULL &&
pdb != (
PDB)0x12345678,
"Expected pdb to be set to a valid pdb, was: %p\n",
pdb);
1362 ok(tagid == 0,
"Expected tagid to be set to 0, was: 0x%x\n", tagid);
1375 ok(
ret ==
FALSE,
"SdbGetMatchingExe should not succeed for %d.\n",
cur);
1391template<
typename SDBQUERYRESULT_T>
1412 ok(hsdb !=
NULL,
"Expected a valid database handle\n");
1416 skip(
"SdbInitDatabase not implemented?\n");
1423 test_mode_generic<SDBQUERYRESULT_T>(
workdir, hsdb,
n);
1424 pSdbReleaseDatabase(hsdb);
1446 ok(dwWritten ==
Size,
"WriteFile wrote %u bytes instead of %u\n", dwWritten,
Size);
1472template<
typename SDBQUERYRESULT_T>
1477 SDBQUERYRESULT_T
query;
1478 TAGID dbtag, exetag, tagid;
1484 ret = pSdbTagRefToTagID(hsdb, 0, &
pdb, &tagid);
1485 ok(
pdb !=
NULL &&
pdb != (
PDB)0x12345678,
"Expected pdb to be set to a valid pdb, was: %p\n",
pdb);
1488 ok(dbtag !=
TAGID_NULL,
"Expected to get a valid TAG_DATABASE\n");
1490 for (exetag = pSdbFindFirstTag(
pdb, dbtag,
TAG_EXE); exetag; exetag = pSdbFindNextTag(
pdb, dbtag, exetag))
1493 Vendor = pSdbGetStringTagPtr(
pdb, tagid);
1496 Succeed = !
_wcsicmp(Vendor,
L"Succeed");
1497 if (!Succeed &&
_wcsicmp(Vendor,
L"Fail"))
1513 DWORD exe_count = Succeed ? 1 : 0;
1517 skip(
"As long as we do not have indexes, we will hit a bug in W2k3\n");
1521[
Info][SdbpSearchDB ] Searching database with
no index.
1522[Err ][SdbpSearchDB ] No DATABASE
tag found.
1539template<
typename SDBQUERYRESULT_T>
1560 ok(hsdb !=
NULL,
"Expected a valid database handle\n");
1564 skip(
"SdbInitDatabase not implemented?\n");
1569 test_match_ex<SDBQUERYRESULT_T>(
workdir, hsdb);
1570 pSdbReleaseDatabase(hsdb);
1575 ok(0,
"Unable to extract database\n");
1607 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1613 ret = pSdbTagRefToTagID(hsdb,
size - 1, &
pdb, &db);
1614 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1616 ok(db == (
size - 1),
"Expected %u, got: %u\n",
size - 1, db);
1620 ret = pSdbTagIDToTagRef(hsdb,
pdb, db, &tr);
1621 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1622 ok(tr == (
size - 1),
"Expected %u, got: %u\n",
size - 1, tr);
1626 ret = pSdbTagRefToTagID(hsdb,
size, &
pdb, &db);
1627 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1629 ok(db ==
size,
"Expected %u, got: %u\n",
size, db);
1632 ret = pSdbTagIDToTagRef(hsdb,
pdb, db, &tr);
1633 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1634 ok(tr ==
size,
"Expected %u, got: %u\n",
size, tr);
1638 ret = pSdbTagRefToTagID(hsdb,
size + 1, &
pdb, &db);
1639 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1641 ok(db == (
size + 1),
"Expected %u, got: %u\n",
size + 1, db);
1644 ret = pSdbTagIDToTagRef(hsdb,
pdb, db, &tr);
1645 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1646 ok(tr == (
size + 1),
"Expected %u, got: %u\n", (
size + 1), tr);
1650 ret = pSdbTagRefToTagID(hsdb, 0x0fffffff, &
pdb, &db);
1651 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1653 ok(db == 0x0fffffff,
"Expected %u, got: %u\n", 0x0fffffff, db);
1656 ret = pSdbTagIDToTagRef(hsdb,
pdb, db, &tr);
1657 ok(
ret ==
TRUE,
"Expected ret to be TRUE, was: %d\n",
ret);
1658 ok(tr == 0x0fffffff,
"Expected %u, got: %u\n", 0x0fffffff, tr);
1662 ret = pSdbTagRefToTagID(hsdb, 0x10000000, &
pdb, &db);
1663 ok(
ret ==
FALSE,
"Expected ret to be FALSE, was: %d\n",
ret);
1665 ok(db == 0,
"Expected no result, got: 0x%x\n", db);
1668 ret = pSdbTagIDToTagRef(hsdb,
pdb, 0x10000000, &tr);
1669 ok(
ret ==
FALSE,
"Expected ret to be TRUE, was: %d\n",
ret);
1670 ok(tr == 0,
"Expected %u, got: %u\n", 0, tr);
1675 ok(
ret !=
FALSE,
"Expected ret to be TRUE, was: %d\n",
ret);
1676 ok(
pdb !=
NULL,
"Expected pdb to be valid\n");
1680 skip(
"Cannot run tests without pdb\n");
1688 child = pSdbGetFirstChild(
pdb, db);
1694 ret = pSdbTagRefToTagID(hsdb,
child, &pdb_res, &tagid_res);
1695 ok(
ret,
"Expected SdbTagRefToTagID to succeed\n");
1699 ret = pSdbTagIDToTagRef(hsdb, pdb_res, tagid_res, &tr);
1700 ok(
ret,
"Expected SdbTagIDToTagRef to succeed\n");
1701 ok_hex(tr, (
int)tagid_res);
1708 skip(
"Cannot run tests without valid db tag\n");
1713 tr = pSdbGetLayerTagRef(hsdb,
L"TestNewMode");
1717 tr = pSdbGetLayerTagRef(hsdb,
L"256Color");
1720 pSdbReleaseDatabase(hsdb);
1732 DWORD dwBufferSize, dwDataType, dwRet;
1737 ok(
ret !=
FALSE,
"Expected ret to be TRUE, was: %d\n",
ret);
1738 ok(
pdb !=
NULL,
"Expected pdb to be valid\n");
1742 skip(
"Cannot run tests without pdb\n");
1747 ok(db !=
NULL,
"Expected db to be valid\n");
1750 skip(
"Cannot run tests without db\n");
1755 ok(
layer !=
NULL,
"Expected layer to be valid\n");
1758 skip(
"Cannot run tests without layer\n");
1763 dwBufferSize =
sizeof(
Buffer);
1764 dwDataType = 0x12345;
1766 dwRet = pSdbQueryDataExTagID(
pdb,
layer,
L"TESTDATA1", &dwDataType,
Buffer, &dwBufferSize, &tiData);
1771 ok(tiData !=
NULL && tiData != 0x111111,
"Expected tiData, got NULL\n");
1775 dwBufferSize =
sizeof(
Buffer);
1784 dwBufferSize =
sizeof(
Buffer);
1798 dwBufferSize =
sizeof(
Buffer);
1805 dwBufferSize =
sizeof(
Buffer);
1812 dwBufferSize =
sizeof(
Buffer);
1813 dwDataType = 0x12345;
1815 dwRet = pSdbQueryDataExTagID(
pdb,
layer,
L"TESTDATA2", &dwDataType,
Buffer, &dwBufferSize, &tiData);
1820 ok(tiData !=
NULL && tiData != 0x111111,
"Expected tiData, got NULL\n");
1825 dwBufferSize =
sizeof(
Buffer);
1826 dwDataType = 0x12345;
1828 dwRet = pSdbQueryDataExTagID(
pdb,
layer,
L"TESTDATA3", &dwDataType,
Buffer, &dwBufferSize, &tiData);
1834 ok(tiData !=
NULL && tiData != 0x111111,
"Expected tiData, got NULL\n");
1839 dwBufferSize =
sizeof(
Buffer);
1840 dwDataType = 0x12345;
1842 dwRet = pSdbQueryDataEx(hsdb,
layer,
L"TESTDATA1", &dwDataType,
Buffer, &dwBufferSize, &trData);
1847 ok(trData !=
NULL && trData != 0x111111,
"Expected trData, got NULL\n");
1851 dwBufferSize =
sizeof(
Buffer);
1852 dwDataType = 0x12345;
1853 dwRet = pSdbQueryData(hsdb,
layer,
L"TESTDATA1", &dwDataType,
Buffer, &dwBufferSize);
1860 ok(exe !=
NULL,
"Expected exe to be valid\n");
1863 skip(
"Cannot run tests without exe\n");
1868 dwBufferSize =
sizeof(
Buffer);
1869 dwDataType = 0x12345;
1871 dwRet = pSdbQueryDataExTagID(
pdb, exe,
L"TESTDATA1", &dwDataType,
Buffer, &dwBufferSize, &tiData);
1873 ok_hex(dwDataType, 0x12345);
1876 ok(tiData == 0x111111,
"Expected 0x111111, got 0x%x\n", tiData);
1880 dwBufferSize =
sizeof(
Buffer);
1881 dwDataType = 0x12345;
1883 dwRet = pSdbQueryDataEx(hsdb, exe,
L"TESTDATA1", &dwDataType,
Buffer, &dwBufferSize, &trData);
1885 ok_hex(dwDataType, 0x12345);
1889 ok(trData == 0,
"Expected 0, got 0x%x\n", trData);
1891 ok(trData == 0x111111,
"Expected 0x111111, got 0x%x\n", trData);
1895 dwBufferSize =
sizeof(
Buffer);
1896 dwDataType = 0x12345;
1897 dwRet = pSdbQueryData(hsdb, exe,
L"TESTDATA1", &dwDataType,
Buffer, &dwBufferSize);
1899 ok_hex(dwDataType, 0x12345);
1925 ok(hsdb !=
NULL,
"Expected a valid database handle\n");
1929 skip(
"SdbInitDatabase not implemented?\n");
1934 pSdbReleaseDatabase(hsdb);
1939 ok(0,
"Unable to extract database\n");
1951 static WCHAR wide_string[100] = { 0 };
1955 result = pSdbMakeIndexKeyFromString(wide_string);
1959#define expect_indexA (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_indexA_imp
1964 static WCHAR tmp[] = { 0xabba, 0xbcde, 0x2020, 0x20, 0x4444, 0 };
1965 static WCHAR tmp2[] = { 0xabba, 0xbcde, 0x20, 0x4444, 0 };
1966 static WCHAR tmp3[] = { 0x20, 0xbcde, 0x4041, 0x4444, 0 };
1967 static WCHAR tmp4[] = { 0x20, 0xbcde, 0x4041, 0x4444, 0x4444, 0 };
1968 static WCHAR tmp5[] = { 0x2020, 0xbcde, 0x4041, 0x4444, 0x4444, 0 };
1969 static WCHAR tmp6 [] = { 0x20, 0xbcde, 0x4041, 0x4444, 0x4444, 0x4444, 0};
1970 static WCHAR tmp7 [] = { 0xbcde, 0x4041, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0};
1971 static WCHAR tmp8 [] = { 0xbc00, 0x4041, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0};
1976 pSdbMakeIndexKeyFromString(
NULL);
1997 expect_indexA(
"ABABABABZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ", 0x4142414241424142);
2001 result = pSdbMakeIndexKeyFromString(tmp);
2005 result = pSdbMakeIndexKeyFromString(tmp2);
2009 result = pSdbMakeIndexKeyFromString(tmp3);
2013 result = pSdbMakeIndexKeyFromString(tmp4);
2017 result = pSdbMakeIndexKeyFromString(tmp5);
2021 result = pSdbMakeIndexKeyFromString(tmp6);
2025 result = pSdbMakeIndexKeyFromString(tmp7);
2029 result = pSdbMakeIndexKeyFromString(tmp8);
2047 trace(
"SdbGetMatchingExe didnt do anything, cannot determine SDBQUERYRESULT size\n");
2065 trace(
"Unknown size: %i\n",
n);
2091 *(
void**)&pSdbGetDatabaseVersion = (
void *)
GetProcAddress(
hdll,
"SdbGetDatabaseVersion");
2093 *(
void**)&pSdbCloseDatabaseWrite = (
void *)
GetProcAddress(
hdll,
"SdbCloseDatabaseWrite");
2099 *(
void**)&pSdbWriteBinaryTagFromFile = (
void *)
GetProcAddress(
hdll,
"SdbWriteBinaryTagFromFile");
2101 *(
void**)&pSdbWriteStringRefTag = (
void *)
GetProcAddress(
hdll,
"SdbWriteStringRefTag");
2102 *(
void**)&pSdbBeginWriteListTag = (
void *)
GetProcAddress(
hdll,
"SdbBeginWriteListTag");
2106 *(
void**)&pSdbFindFirstNamedTag = (
void *)
GetProcAddress(
hdll,
"SdbFindFirstNamedTag");
2113 *(
void**)&pSdbGetBinaryTagData = (
void *)
GetProcAddress(
hdll,
"SdbGetBinaryTagData");
2124 *(
void**)&pSdbMakeIndexKeyFromString = (
void *)
GetProcAddress(
hdll,
"SdbMakeIndexKeyFromString");
2127 *(
void**)&pSdbQueryDataExTagID = (
void *)
GetProcAddress(
hdll,
"SdbQueryDataExTagID");
2129 *(
void**)&pSdbGetDatabaseInformation = (
void *)
GetProcAddress(
hdll,
"SdbGetDatabaseInformation");
2130 *(
void**)&pSdbFreeDatabaseInformation = (
void *)
GetProcAddress(
hdll,
"SdbFreeDatabaseInformation");
2140 test_MatchApplications<SDBQUERYRESULT_2k3>();
2141 test_MatchApplicationsEx<SDBQUERYRESULT_2k3>();
2144 test_MatchApplications<SDBQUERYRESULT_VISTA>();
2145 test_MatchApplicationsEx<SDBQUERYRESULT_VISTA>();
2148 skip(
"Skipping tests with SDBQUERYRESULT due to a wrong size reported\n");
2152 skip(
"FIXME: We need a new db test for non-x86!\n");
2156 skip(
"test_SecondaryDB()\n");
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
DWORD get_module_version(HMODULE mod)
void silence_debug_output(void)
#define SDBQUERYRESULT_EXPECTED_SIZE_2k3
#define SDBQUERYRESULT_EXPECTED_SIZE_VISTA
#define ok_hex(expression, result)
#define ok_int(expression, result)
static void test_GetDatabaseInformationEmpty(PDB pdb)
#define TAG_UPTO_BIN_FILE_VERSION
static void check_adwExeFlags(DWORD adwExeFlags_0, SDBQUERYRESULT_T &query, const char *file, int line, size_t cur)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
static TAGREF LPCWSTR lpszDataName
static void match_dw_attr_imp(PDB pdb, TAGID parent, TAG find, DWORD compare)
#define TAG_ORIGINAL_FILENAME
static void check_db_apphelp(PDB pdb, TAGID root)
#define DB_INFO_FLAGS_VALID_GUID
#define TAG_LINKER_VERSION
#define TAG_UPTO_LINK_DATE
static PDB_INFORMATION information
struct _DB_INFORMATION DB_INFORMATION
static void test_GetDatabaseInformation(PDB pdb)
#define TAG_FILE_DESCRIPTION
#define TAG_BIN_FILE_VERSION
static void test_mode_generic(const WCHAR *workdir, HSDB hsdb, size_t cur)
static struct @1702 test_layerdata[2]
static bool extract_resource(const WCHAR *Filename, LPCWSTR ResourceName)
#define TAG_APP_NAME_RC_ID
static void test_is_testdb(PDB pdb)
static LPCWSTR LPCWSTR LPCWSTR DWORD PSDBQUERYRESULT_VISTA result
static LPCWSTR LPCWSTR LPCWSTR DWORD flags
static void test_IndexKeyFromString(void)
static void Write(HANDLE file, LPCVOID buffer, DWORD size)
static int validate_SDBQUERYRESULT_size()
#define HID_DATABASE_FULLPATH
static void test_MatchApplicationsEx(void)
#define TAG_UPTO_BIN_PRODUCT_VERSION
static TAGREF PDB TAGID * ptiWhich
#define TAG_LEGAL_COPYRIGHT
static void test_Sdb(void)
static TAGID TAGID TAGID LPCWSTR find_name
#define TAG_SUMMARY_MSG_RC_ID
static void test_CheckDatabaseManually(void)
static void check_db_properties(PDB pdb, TAGID root)
#define TAG_MATCHING_FILE
#define TAG_PROBLEMSEVERITY
static void check_matching_file(PDB pdb, TAGID exe, TAGID matching_file, int num)
static TAGREF LPCWSTR LPDWORD lpdwDataType
static void test_TagRef(void)
const WCHAR * apphelp_details
#define TAG_COMPILER_VERSION
const WCHAR * apphelp_title
static void test_MatchApplications(void)
#define TAG_APPHELP_DETAILS
static void test_write_ex(void)
static void check_db_layer(PDB pdb, TAGID layer)
static TAGID LPCWSTR LPDWORD LPVOID LPDWORD TAGID * ptiData
struct _DB_INFORMATION * PDB_INFORMATION
static PDB TAGID TAGREF * ptrWhich
static void match_strw_attr_imp(PDB pdb, TAGID parent, TAG find, const WCHAR *compare)
static void match_qw_attr_imp(PDB pdb, TAGID parent, TAG find, QWORD compare)
static struct @1701 test_exedata[5]
#define TAG_BIN_PRODUCT_VERSION
static void test_Data(void)
static void check_db_exes(PDB pdb, TAGID root)
static BOOL write_raw_file(const WCHAR *FileName, const void *Data, DWORD Size)
static void test_stringtable()
static GUID *static SIZE_T
#define TAG_INTERNAL_NAME
static LPCWSTR LPCWSTR module_name
#define TAG_VENDOR_NAME_RC_ID
static LPCWSTR LPCWSTR LPCWSTR env
#define TAG_APPHELP_TITLE
static void check_matching_layer(PDB pdb, TAGID layer, int num)
#define TAG_PRODUCT_VERSION
static void test_DataTags(HSDB hsdb)
static void write_db_strings(const WCHAR *name, const WCHAR *data[], size_t count)
static void expect_indexA_imp(const char *text, LONGLONG expected)
static TAGID TAGID TAGID nametag
static TAGREF LPCWSTR LPDWORD LPVOID LPDWORD TAGREF * ptrData
static void test_match_ex(const WCHAR *workdir, HSDB hsdb)
static void match_guid_attr_imp(PDB pdb, TAGID parent, TAG find, const GUID *compare)
#define TAG_STRINGTABLE_ITEM
static GUID *static PCWSTR
static TAGREF LPCWSTR LPDWORD LPVOID LPDWORD lpcbBufferSize
static void check_matching_apphelp(PDB pdb, TAGID apphelp, int num)
#define ERROR_INSUFFICIENT_BUFFER
static CHAR AppName[MAX_PATH]
static WCHAR no[MAX_STRING_RESOURCE_LEN]
static const WCHAR empty[]
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define MultiByteToWideChar
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableA(IN LPCSTR lpName, IN LPCSTR lpValue)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
LPVOID WINAPI LockResource(HGLOBAL handle)
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLint GLint layer
const GLuint GLenum const GLvoid * binary
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define EXCEPTION_EXECUTE_HANDLER
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
void __cdecl winetest_ok(int condition, const char *msg,...) __WINE_PRINTF_ATTR(2
LPCWSTR LPCWSTR LPCWSTR DWORD dwFlags
static char workdir[MAX_PATH]
static const WCHAR path1[]
static const WCHAR path2[]
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
static BOOL IsUserAdmin(VOID)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
#define IsEqualGUID(rguid1, rguid2)
#define _SEH2_EXCEPT(...)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define _WIN32_WINNT_WIN10
#define _WIN32_WINNT_WS03
#define _WIN32_WINNT_VISTA
static char tmpdir[MAX_PATH]
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
DWORD WINAPI GetLastError(void)
#define UnlockResource(handle)
#define MAKEINTRESOURCEW(i)