2 * PROJECT: apphelp_apitest
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Common data / functions for apphelp_apitest
5 * COPYRIGHT: Copyright 2015-2018 Mark Jansen (mark.jansen@reactos.org)
10 #include "wine/test.h"
13 static IMAGE_DOS_HEADER dos_header
=
15 IMAGE_DOS_SIGNATURE
, /* e_magic */
21 65535, /* e_maxalloc */
32 { 0 }, /* e_res2[10] */
36 static IMAGE_NT_HEADERS32 nt_header
=
38 IMAGE_NT_SIGNATURE
, /* Signature */
40 IMAGE_FILE_MACHINE_I386
, /* Machine */
41 2, /* NumberOfSections */
42 0x12345, /* TimeDateStamp */
43 0, /* PointerToSymbolTable */
44 0, /* NumberOfSymbols */
45 sizeof(IMAGE_OPTIONAL_HEADER
), /* SizeOfOptionalHeader */
46 IMAGE_FILE_RELOCS_STRIPPED
| IMAGE_FILE_EXECUTABLE_IMAGE
| IMAGE_FILE_LINE_NUMS_STRIPPED
| IMAGE_FILE_32BIT_MACHINE
/* Characteristics */
49 IMAGE_NT_OPTIONAL_HDR_MAGIC
, /* Magic */
50 6, /* MajorLinkerVersion */
51 3, /* MinorLinkerVersion */
53 0, /* SizeOfInitializedData */
54 0, /* SizeOfUninitializedData */
55 0x1000, /* AddressOfEntryPoint */
56 0x1000, /* BaseOfCode */
58 0x400000, /* ImageBase */
59 0x1000, /* SectionAlignment */
60 0x200, /* FileAlignment */
61 4, /* MajorOperatingSystemVersion */
62 1, /* MinorOperatingSystemVersion */
63 4, /* MajorImageVersion */
64 2, /* MinorImageVersion */
65 4, /* MajorSubsystemVersion */
66 3, /* MinorSubsystemVersion */
67 0, /* Win32VersionValue */
68 0x3000, /* SizeOfImage */
69 0x200, /* SizeOfHeaders */
70 0xBAAD, /* CheckSum: This checksum is not the correct checksum, intentionally! */
71 IMAGE_SUBSYSTEM_WINDOWS_CUI
, /* Subsystem */
72 0, /* DllCharacteristics */
73 0x100000, /* SizeOfStackReserve */
74 0x1000, /* SizeOfStackCommit */
75 0x100000, /* SizeOfHeapReserve */
76 0x1000, /* SizeOfHeapCommit */
78 0x10, /* NumberOfRvaAndSizes */
80 /* IMAGE_DIRECTORY_ENTRY_EXPORT */
82 0x2370, /* VirtualAddress */
86 /* IMAGE_DIRECTORY_ENTRY_RESOURCE */
88 0x2000, /* VirtualAddress */
91 } /* DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] */
95 static IMAGE_SECTION_HEADER section_headers
[] =
98 { '.','t','e','x','t',0 }, /* Name */
99 { 24 }, /* VirtualSize */
100 0x1000, /* VirtualAddress */
101 0x200, /* SizeOfRawData */
102 0x200, /* PointerToRawData */
103 0, /* PointerToRelocations */
104 0, /* PointerToLinenumbers */
105 0, /* NumberOfRelocations */
106 0, /* NumberOfLinenumbers */
107 IMAGE_SCN_CNT_CODE
| IMAGE_SCN_MEM_EXECUTE
| IMAGE_SCN_MEM_READ
/* Characteristics */
110 { '.','r','s','r','c',0 }, /* Name */
111 { 880 }, /* VirtualSize */
112 0x2000, /* VirtualAddress */
113 0x400, /* SizeOfRawData */
114 0x400, /* PointerToRawData */
115 0, /* PointerToRelocations */
116 0, /* PointerToLinenumbers */
117 0, /* NumberOfRelocations */
118 0, /* NumberOfLinenumbers */
119 IMAGE_SCN_CNT_INITIALIZED_DATA
| IMAGE_SCN_MEM_READ
/* Characteristics */
123 static const unsigned char text_section
[] =
125 0x33, 0xc0, /* xor eax, eax */
130 /* taken from fusionpriv.h */
137 VS_FIXEDFILEINFO Value
;
180 typedef struct rsrc_section_t
182 IMAGE_RESOURCE_DIRECTORY header
;
183 IMAGE_RESOURCE_DIRECTORY_ENTRY file_info_id
;
184 IMAGE_RESOURCE_DIRECTORY file_info_header
;
185 IMAGE_RESOURCE_DIRECTORY_ENTRY version_info_id
;
186 IMAGE_RESOURCE_DIRECTORY version_info_header
;
187 IMAGE_RESOURCE_DIRECTORY_ENTRY version_lang_id
;
188 IMAGE_RESOURCE_DATA_ENTRY version_data_entry
;
190 VS_VERSIONINFO version_info
;
191 STRINGFILEINFO string_file_info
;
192 STRINGTABLE string_table
;
194 STRINGHDR FileVersion_hdr
;
195 WCHAR FileVersion_key
[13];
196 WCHAR FileVersion_val
[8];
198 STRINGHDR ProductVersion_hdr
;
199 WCHAR ProductVersion_key
[15];
200 WCHAR ProductVersion_val
[8];
202 STRINGHDR CompanyName_hdr
;
203 WCHAR CompanyName_key
[13];
204 WCHAR CompanyName_val
[12];
206 STRINGHDR FileDescription_hdr
;
207 WCHAR FileDescription_key
[17];
208 WCHAR FileDescription_val
[16];
210 STRINGHDR InternalName_hdr
;
211 WCHAR InternalName_key
[13];
212 WCHAR InternalName_val
[14];
214 STRINGHDR LegalCopyright_hdr
;
215 WCHAR LegalCopyright_key
[15];
216 WCHAR LegalCopyright_val
[16];
218 STRINGHDR LegalTrademarks_hdr
;
219 WCHAR LegalTrademarks_key
[17];
220 WCHAR LegalTrademarks_val
[16];
222 STRINGHDR OriginalFilename_hdr
;
223 WCHAR OriginalFilename_key
[17];
224 WCHAR OriginalFilename_val
[18];
226 STRINGHDR Productname_hdr
;
227 WCHAR Productname_key
[13];
228 WCHAR Productname_val
[12];
230 VARFILEINFO file_info
;
234 #define RT_VERSION_DW 16
235 static const rsrc_section_t rsrc_section
=
239 0, /* Characteristics */
240 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
241 0, /* MajorVersion */
242 0, /* MinorVersion */
243 0, /* NumberOfNamedEntries */
244 1, /* NumberOfIdEntries */
249 RT_VERSION_DW
, /* NameOffset:31 */
250 0 /* NameIsString:1 */
253 0x80000018 /* OffsetToData */
256 /* file_info_header */
258 0, /* Characteristics */
259 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
260 0, /* MajorVersion */
261 0, /* MinorVersion */
262 0, /* NumberOfNamedEntries */
263 1, /* NumberOfIdEntries */
265 /* version_info_id */
268 VS_VERSION_INFO
, /* NameOffset:31 */
269 0 /* NameIsString:1 */
272 0x80000030 /* OffsetToData */
275 /* version_info_header */
277 0, /* Characteristics */
278 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
279 0, /* MajorVersion */
280 0, /* MinorVersion */
281 0, /* NumberOfNamedEntries */
282 1, /* NumberOfIdEntries */
284 /* version_lang_id */
287 1033, /* NameOffset:31 */
288 0 /* NameIsString:1 */
291 0x48 /* OffsetToDirectory */
294 /* version_data_entry */
296 0x2058, /* OffsetToData */
305 0x34, /* wValueLength */
306 0, /* wType: Binary */
307 { 'V','S','_','V','E','R','S','I','O','N','_','I','N','F','O','\0','\0' }, /* szKey[17] */
310 0xFEEF04BD, /* dwSignature */
311 0x10000, /* dwStrucVersion */
312 0x10000, /* dwFileVersionMS */
313 0, /* dwFileVersionLS */
314 0x10000, /* dwProductVersionMS */
315 1, /* dwProductVersionLS */
316 0, /* dwFileFlagsMask */
318 VOS__WINDOWS32
, /* dwFileOS */
319 VFT_APP
, /* dwFileType */
320 0, /* dwFileSubtype */
321 0x01d1a019, /* dwFileDateMS */
322 0xac754c50 /* dwFileDateLS */
326 /* string_file_info */
329 0, /* wValueLength */
331 { 'S','t','r','i','n','g','F','i','l','e','I','n','f','o','\0' } /* szKey[15] */
336 0, /* wValueLength */
338 { 'F','F','F','F','0','0','0','0','\0' } /* szKey[9] */
344 8, /* wValueLength */
347 { 'F','i','l','e','V','e','r','s','i','o','n','\0' },
348 { '1','.','0','.','0','.','0','\0' },
353 8, /* wValueLength */
356 { 'P','r','o','d','u','c','t','V','e','r','s','i','o','n','\0' },
357 { '1','.','0','.','0','.','1','\0' },
362 12, /* wValueLength */
365 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
366 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
368 /* FileDescription */
371 16, /* wValueLength */
374 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
375 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
380 13, /* wValueLength */
383 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
384 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
389 15, /* wValueLength */
392 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
393 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
395 /* LegalTrademarks */
398 16, /* wValueLength */
401 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
402 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
404 /* OriginalFilename */
407 17, /* wValueLength */
410 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
411 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
416 12, /* wValueLength */
419 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
420 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
426 0, /* wValueLength */
428 { 'V','a','r','F','i','l','e','I','n','f','o','\0' } /* szKey[13] */
434 4, /* wValueLength */
435 0, /* wType: Binary */
436 { 'T','r','a','n','s','l','a','t','i','o','n','\0' }, /* szKey[13] */
441 typedef struct export_section_t
443 IMAGE_EXPORT_DIRECTORY desc
;
444 char binary_name
[10];
447 /* This export section is not complete, but the Name RVA is only taken into account */
448 static export_section_t export_dir
=
451 0, /* Characteristics */
452 0, /* TimeDateStamp */
453 0, /* MajorVersion */
454 0, /* MinorVersion */
455 0x2398, /* Name (RVA) */
457 0, /* NumberOfFunctions */
458 0, /* NumberOfNames */
459 0, /* AddressOfFunctions (RVA) */
460 0, /* AddressOfNames (RVA) */
461 0, /* AddressOfNameOrdinals (RVA) */
463 { 'T','e','S','t','2','.','e','x','e',0 }, /* binary_name */
467 void test_create_exe_imp(const WCHAR
* name
, int skip_rsrc_exports
)
474 winetest_ok(buf
!= NULL
, "malloc failed\n");
480 file
= CreateFileW(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
481 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file\n");
482 if (file
== INVALID_HANDLE_VALUE
)
488 memset(buf
, 0, size
);
489 cur
= memcpy(buf
, &dos_header
, sizeof(dos_header
));
490 cur
+= dos_header
.e_lfanew
;
492 memcpy(cur
, &nt_header
, sizeof(nt_header
));
493 if (skip_rsrc_exports
)
495 ((IMAGE_NT_HEADERS32
*)cur
)->OptionalHeader
.DataDirectory
[IMAGE_DIRECTORY_ENTRY_EXPORT
].VirtualAddress
= 0;
496 ((IMAGE_NT_HEADERS32
*)cur
)->OptionalHeader
.DataDirectory
[IMAGE_DIRECTORY_ENTRY_RESOURCE
].VirtualAddress
= 0;
498 cur
+= sizeof(nt_header
);
499 memcpy(cur
, section_headers
, sizeof(section_headers
));
501 /* write code section: */
502 cur
= buf
+ section_headers
[0].PointerToRawData
;
503 memcpy(cur
, text_section
, sizeof(text_section
));
505 if (!skip_rsrc_exports
)
507 /* write resource section: */
508 cur
= buf
+ section_headers
[1].PointerToRawData
;
509 memcpy(cur
, &rsrc_section
, sizeof(rsrc_section
));
511 /* write minimal export directory: */
513 memcpy(cur
, &export_dir
, sizeof(export_dir
));
516 WriteFile(file
, buf
, size
, &size
, NULL
);
522 /* Almost everything in this filetype is ignored, only e_lfanew, ne_restab and ne_nrestab are relevant */
523 void test_create_ne_imp(const WCHAR
* name
, int skip_names
)
527 IMAGE_DOS_HEADER MZ_hdr
= { IMAGE_DOS_SIGNATURE
, 0 };
528 IMAGE_OS2_HEADER NE_hdr
= { IMAGE_OS2_SIGNATURE
, 0 };
529 static const BYTE NE_names
[] =
531 /* Show that the length is used, not the nullterm*/
532 11,'T','E','S','T','M','O','D','.','h','X','x','x',0,0,0,
533 20,'M','O','D',' ','D','E','S','C','R','I','P','T','I','O','N',' ','H','E','R','E',0,0,0
536 file
= CreateFileW(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
537 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file\n");
538 if(file
== INVALID_HANDLE_VALUE
)
541 MZ_hdr
.e_lfanew
= sizeof(MZ_hdr
);
544 NE_hdr
.ne_restab
= sizeof(NE_hdr
); /* First entry (pascal string + ordinal) = module name */
545 NE_hdr
.ne_nrestab
= sizeof(MZ_hdr
) + sizeof(NE_hdr
) + 16; /* First entry (pascal string + ordinal) = module description */
548 WriteFile(file
, &MZ_hdr
, sizeof(MZ_hdr
), &size
, NULL
);
549 WriteFile(file
, &NE_hdr
, sizeof(NE_hdr
), &size
, NULL
);
550 WriteFile(file
, NE_names
, sizeof(NE_names
), &size
, NULL
);
555 void test_create_file_imp(const WCHAR
* name
, const char* contents
, size_t len
)
557 HANDLE file
= CreateFileW(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
558 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file\n");
559 if (file
!= INVALID_HANDLE_VALUE
)
564 WriteFile(file
, contents
, (DWORD
)len
, &size
, NULL
);
570 static unsigned char win10Header
[8] = {
571 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
573 static unsigned char rawData
[2356] = {
574 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x64, 0x62, 0x66,
575 0x02, 0x78, 0x3E, 0x01, 0x00, 0x00, 0x03, 0x78, 0x44, 0x00, 0x00, 0x00,
576 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00,
577 0x00, 0x00, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x41, 0x5F,
578 0x54, 0x53, 0x45, 0x54, 0xC6, 0x01, 0x00, 0x00, 0x53, 0x49, 0x44, 0x5F,
579 0x54, 0x53, 0x45, 0x54, 0x56, 0x02, 0x00, 0x00, 0x57, 0x45, 0x4E, 0x5F,
580 0x54, 0x53, 0x45, 0x54, 0xEC, 0x02, 0x00, 0x00, 0x4B, 0x32, 0x57, 0x5F,
581 0x54, 0x53, 0x45, 0x54, 0x7C, 0x03, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00,
582 0x00, 0x00, 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x0B, 0x60, 0x01, 0x98,
583 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38,
584 0x07, 0x70, 0x03, 0x38, 0x20, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
585 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38, 0x04, 0x70, 0x03, 0x38,
586 0x01, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x26, 0x00,
587 0x00, 0x00, 0x02, 0x38, 0x0D, 0x70, 0x03, 0x38, 0x15, 0x40, 0x01, 0x98,
588 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
589 0x74, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
590 0x50, 0x04, 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38,
591 0x10, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00,
592 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00,
593 0x02, 0x38, 0x12, 0x70, 0x03, 0x38, 0x06, 0x90, 0x01, 0x98, 0x00, 0x00,
594 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38, 0x12, 0x70,
595 0x03, 0x38, 0x04, 0x90, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x98,
596 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x3E, 0x00, 0x00, 0x00, 0x02, 0x38,
597 0x07, 0x70, 0x03, 0x38, 0x04, 0x90, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00,
598 0xED, 0xB4, 0x89, 0x50, 0xB1, 0xA4, 0x82, 0xA7, 0xEC, 0x02, 0x00, 0x00,
599 0x85, 0x2B, 0x88, 0x40, 0x97, 0x76, 0xA6, 0xC4, 0xC6, 0x01, 0x00, 0x00,
600 0x77, 0x7A, 0xBF, 0x48, 0x78, 0xB1, 0x69, 0xD2, 0x56, 0x02, 0x00, 0x00,
601 0xD0, 0x15, 0xE6, 0xCB, 0xE8, 0x90, 0x68, 0xFE, 0x7C, 0x03, 0x00, 0x00,
602 0x01, 0x70, 0x42, 0x03, 0x00, 0x00, 0x01, 0x50, 0x3E, 0xD6, 0xC0, 0x02,
603 0x1A, 0xB9, 0xD1, 0x01, 0x22, 0x60, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60,
604 0x1C, 0x00, 0x00, 0x00, 0x23, 0x40, 0x01, 0x00, 0x00, 0x00, 0x07, 0x90,
605 0x10, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x9B, 0xE3, 0xDB, 0x55, 0x0B, 0x45,
606 0x9B, 0xD4, 0xD2, 0x0C, 0x94, 0x84, 0x26, 0x0F, 0x02, 0x70, 0x00, 0x00,
607 0x00, 0x00, 0x0B, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00,
608 0x00, 0x00, 0x09, 0x70, 0x26, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x00,
609 0x00, 0x00, 0x08, 0x60, 0x82, 0x00, 0x00, 0x00, 0x03, 0x70, 0x06, 0x00,
610 0x00, 0x00, 0x03, 0x60, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x08, 0x00,
611 0x00, 0x00, 0x01, 0x10, 0x03, 0x60, 0xBE, 0x00, 0x00, 0x00, 0x07, 0x70,
612 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60, 0xDC, 0x00, 0x00, 0x00, 0x06, 0x60,
613 0x00, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x90,
614 0x10, 0x00, 0x00, 0x00, 0x3F, 0xC9, 0x50, 0x4E, 0x63, 0xB8, 0xFA, 0x4D,
615 0xBA, 0xE2, 0xD8, 0x0E, 0xF4, 0xCE, 0x5C, 0x89, 0x0D, 0x70, 0x24, 0x00,
616 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00,
617 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x40, 0x72, 0x00,
618 0x6F, 0x00, 0x25, 0x40, 0x67, 0x00, 0x72, 0x00, 0x26, 0x40, 0x00, 0x00,
619 0x00, 0x00, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
620 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
621 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x13, 0x60, 0xB8, 0x01,
622 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
623 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x70,
624 0x90, 0x00, 0x00, 0x00, 0x01, 0x60, 0xCE, 0x01, 0x00, 0x00, 0x06, 0x60,
625 0xF8, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2A, 0x02, 0x00, 0x00, 0x04, 0x90,
626 0x10, 0x00, 0x00, 0x00, 0xE1, 0x20, 0x67, 0x15, 0x98, 0xEF, 0x04, 0x4D,
627 0x96, 0x5A, 0xD8, 0x5D, 0xE0, 0x5E, 0x6D, 0x9F, 0x0D, 0x70, 0x24, 0x00,
628 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x02, 0x00,
629 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00, 0x24, 0x40, 0x20, 0x00,
630 0x32, 0x00, 0x25, 0x40, 0x2E, 0x00, 0x38, 0x00, 0x26, 0x40, 0x00, 0x00,
631 0x00, 0x00, 0x08, 0x70, 0x38, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
632 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
633 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
634 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
635 0x00, 0x00, 0x01, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x13, 0x60,
636 0xB8, 0x01, 0x00, 0x00, 0x07, 0x70, 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60,
637 0x60, 0x02, 0x00, 0x00, 0x06, 0x60, 0x80, 0x02, 0x00, 0x00, 0x05, 0x60,
638 0x9E, 0x02, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x69, 0xEF,
639 0x70, 0xCE, 0x1D, 0xA2, 0x8B, 0x40, 0x84, 0x5B, 0xF9, 0x9E, 0xAC, 0x06,
640 0x09, 0xE7, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
641 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
642 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
643 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
644 0x00, 0x00, 0x01, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x08, 0x70,
645 0x12, 0x00, 0x00, 0x00, 0x01, 0x60, 0xC0, 0x02, 0x00, 0x00, 0x01, 0x40,
646 0x04, 0x00, 0x00, 0x00, 0x03, 0x40, 0xB0, 0xB0, 0xB0, 0xB0, 0x0B, 0x70,
647 0x0C, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x1A, 0x40,
648 0x8E, 0x01, 0x00, 0x00, 0x07, 0x70, 0xCE, 0x00, 0x00, 0x00, 0x01, 0x60,
649 0xEC, 0x02, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x03, 0x00, 0x00, 0x05, 0x60,
650 0x26, 0x03, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x44, 0xD1,
651 0xEA, 0xB4, 0x40, 0xF6, 0x4B, 0x4E, 0x94, 0xC4, 0x0C, 0x7F, 0xA8, 0x66,
652 0x23, 0xB0, 0x08, 0x70, 0x94, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
653 0x00, 0x00, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x03, 0x40, 0x29, 0xD6,
654 0x8B, 0x17, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
655 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x12, 0x60, 0x42, 0x03,
656 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
657 0x03, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x40,
658 0x03, 0x00, 0x00, 0x00, 0x09, 0x40, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x40,
659 0x01, 0x00, 0x00, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x1C, 0x40,
660 0x02, 0x00, 0x04, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x14, 0x60,
661 0x68, 0x03, 0x00, 0x00, 0x15, 0x60, 0x90, 0x03, 0x00, 0x00, 0x16, 0x60,
662 0xB0, 0x03, 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
663 0x01, 0x00, 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
664 0x1D, 0x40, 0x45, 0x23, 0x01, 0x00, 0x1E, 0x40, 0x45, 0x23, 0x01, 0x00,
665 0x0B, 0x70, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60, 0xD4, 0x03, 0x00, 0x00,
666 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00,
667 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0xEC, 0x03, 0x00, 0x00,
668 0x1B, 0x60, 0xF8, 0x01, 0x00, 0x00, 0x18, 0x60, 0x2A, 0x04, 0x00, 0x00,
669 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00,
670 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0x4A, 0x04, 0x00, 0x00,
671 0x1B, 0x60, 0x00, 0x01, 0x00, 0x00, 0x18, 0x60, 0x82, 0x04, 0x00, 0x00,
672 0x01, 0x78, 0x96, 0x04, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00, 0x00, 0x00,
673 0x32, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
674 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x61, 0x00,
675 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
676 0x5F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
677 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
678 0x73, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4D, 0x00,
679 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00,
680 0x00, 0x00, 0x56, 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00,
681 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00,
682 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x88,
683 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6D, 0x00,
684 0x65, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00,
685 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x65, 0x00,
686 0x78, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00,
687 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88,
688 0x18, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00,
689 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00,
690 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x00,
691 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x61, 0x00, 0x6C, 0x00,
692 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
693 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00,
694 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
695 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00,
696 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
697 0x01, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
698 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x76, 0x00,
699 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00,
700 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
701 0x01, 0x88, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x01, 0x88,
702 0x18, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00,
703 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00,
704 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00,
705 0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00,
706 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
707 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
708 0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00,
709 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00,
710 0x2E, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x88, 0x24, 0x00, 0x00, 0x00,
711 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x64, 0x00,
712 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
713 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
714 0x01, 0x88, 0x2C, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
715 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x6E, 0x00,
716 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00,
717 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
718 0x00, 0x00, 0x01, 0x88, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00,
719 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00,
720 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00,
721 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00,
722 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1A, 0x00,
723 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
724 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
725 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00,
726 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00,
727 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
728 0x1C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00,
729 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00,
730 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00,
731 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
732 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x66, 0x00,
733 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x78, 0x00,
734 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x74, 0x00,
735 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x77, 0x00, 0x32, 0x00,
736 0x6B, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00,
737 0x00, 0x00, 0x01, 0x88, 0x12, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
738 0x78, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00,
739 0x00, 0x00, 0x01, 0x88, 0x16, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
740 0x78, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00,
741 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00, 0x00, 0x00,
742 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00,
743 0x73, 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00,
744 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x00,
745 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00,
746 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00,
747 0x65, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00,
748 0x01, 0x88, 0x1A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00,
749 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00,
750 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00,
751 0x00, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6C, 0x00,
752 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
753 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x12, 0x00,
754 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x72, 0x00,
755 0x76, 0x00, 0x30, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x38, 0x00,
756 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00,
757 0x2F, 0x00, 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00,
758 0x74, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00,
759 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00,
760 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88,
761 0x1A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00,
762 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00,
763 0x64, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x88, 0x32, 0x00, 0x00, 0x00,
764 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
765 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00,
766 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x67, 0x00,
767 0x2F, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
768 0x00, 0x00, 0x01, 0x88, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x6C, 0x00,
769 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x20, 0x00, 0x69, 0x00, 0x74, 0x00,
770 0x21, 0x00, 0x00, 0x00
773 DWORD
test_get_db_size()
775 return sizeof(rawData
);
778 void test_create_db_imp(const WCHAR
* name
, int win10
)
780 HANDLE file
= CreateFileW(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
781 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file '%s'\n", wine_dbgstr_w(name
));
782 if (file
!= INVALID_HANDLE_VALUE
)
785 WriteFile(file
, rawData
, sizeof(rawData
), &size
, NULL
);
788 SetFilePointer(file
, 0, NULL
, FILE_BEGIN
);
789 WriteFile(file
, win10Header
, sizeof(win10Header
), &size
, NULL
);
795 static DWORD g_WinVersion
;
796 DWORD
get_host_winver(void)
800 RTL_OSVERSIONINFOEXW rtlinfo
= {0};
801 void (__stdcall
* pRtlGetVersion
)(RTL_OSVERSIONINFOEXW
*);
802 pRtlGetVersion
= (void (__stdcall
*)(RTL_OSVERSIONINFOEXW
*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
804 rtlinfo
.dwOSVersionInfoSize
= sizeof(rtlinfo
);
805 pRtlGetVersion(&rtlinfo
);
806 g_WinVersion
= (rtlinfo
.dwMajorVersion
<< 8) | rtlinfo
.dwMinorVersion
;
811 DWORD
get_module_version(HMODULE mod
)
814 HRSRC hResInfo
= FindResource(mod
, MAKEINTRESOURCE(VS_VERSION_INFO
), RT_VERSION
);
815 DWORD dwSize
= SizeofResource(mod
, hResInfo
);
816 if (hResInfo
&& dwSize
)
818 VS_FIXEDFILEINFO
*lpFfi
;
821 HGLOBAL hResData
= LoadResource(mod
, hResInfo
);
822 LPVOID pRes
= LockResource(hResData
);
823 HLOCAL pResCopy
= LocalAlloc(LMEM_FIXED
, dwSize
);
825 CopyMemory(pResCopy
, pRes
, dwSize
);
826 FreeResource(hResData
);
828 if (VerQueryValueW(pResCopy
, L
"\\", (LPVOID
*)&lpFfi
, &uLen
))
830 dwVersion
= (HIWORD(lpFfi
->dwProductVersionMS
) << 8) | LOWORD(lpFfi
->dwProductVersionMS
);
832 dwVersion
= (HIWORD(lpFfi
->dwFileVersionMS
) << 8) | LOWORD(lpFfi
->dwFileVersionMS
);
841 void silence_debug_output(void)
843 if (GetEnvironmentVariableA("SHIM_DEBUG_LEVEL", NULL
, 0) == ERROR_ENVVAR_NOT_FOUND
)
844 SetEnvironmentVariableA("SHIM_DEBUG_LEVEL", "0");
845 if (GetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", NULL
, 0) == ERROR_ENVVAR_NOT_FOUND
)
846 SetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", "0");