2 * Copyright 2015,2016 Mark Jansen
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "wine/test.h"
24 static IMAGE_DOS_HEADER dos_header
=
26 IMAGE_DOS_SIGNATURE
, /* e_magic */
32 65535, /* e_maxalloc */
43 { 0 }, /* e_res2[10] */
47 static IMAGE_NT_HEADERS32 nt_header
=
49 IMAGE_NT_SIGNATURE
, /* Signature */
51 IMAGE_FILE_MACHINE_I386
, /* Machine */
52 2, /* NumberOfSections */
53 0x12345, /* TimeDateStamp */
54 0, /* PointerToSymbolTable */
55 0, /* NumberOfSymbols */
56 sizeof(IMAGE_OPTIONAL_HEADER
), /* SizeOfOptionalHeader */
57 IMAGE_FILE_RELOCS_STRIPPED
| IMAGE_FILE_EXECUTABLE_IMAGE
| IMAGE_FILE_LINE_NUMS_STRIPPED
| IMAGE_FILE_32BIT_MACHINE
/* Characteristics */
60 IMAGE_NT_OPTIONAL_HDR_MAGIC
, /* Magic */
61 6, /* MajorLinkerVersion */
62 3, /* MinorLinkerVersion */
64 0, /* SizeOfInitializedData */
65 0, /* SizeOfUninitializedData */
66 0x1000, /* AddressOfEntryPoint */
67 0x1000, /* BaseOfCode */
69 0x400000, /* ImageBase */
70 0x1000, /* SectionAlignment */
71 0x200, /* FileAlignment */
72 4, /* MajorOperatingSystemVersion */
73 1, /* MinorOperatingSystemVersion */
74 4, /* MajorImageVersion */
75 2, /* MinorImageVersion */
76 4, /* MajorSubsystemVersion */
77 3, /* MinorSubsystemVersion */
78 0, /* Win32VersionValue */
79 0x3000, /* SizeOfImage */
80 0x200, /* SizeOfHeaders */
81 0xBAAD, /* CheckSum: This checksum is not the correct checksum, intentionally! */
82 IMAGE_SUBSYSTEM_WINDOWS_CUI
, /* Subsystem */
83 0, /* DllCharacteristics */
84 0x100000, /* SizeOfStackReserve */
85 0x1000, /* SizeOfStackCommit */
86 0x100000, /* SizeOfHeapReserve */
87 0x1000, /* SizeOfHeapCommit */
89 0x10, /* NumberOfRvaAndSizes */
91 /* IMAGE_DIRECTORY_ENTRY_EXPORT */
93 0x2370, /* VirtualAddress */
97 /* IMAGE_DIRECTORY_ENTRY_RESOURCE */
99 0x2000, /* VirtualAddress */
102 } /* DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] */
106 static IMAGE_SECTION_HEADER section_headers
[] =
109 { '.','t','e','x','t',0 }, /* Name */
110 { 24 }, /* VirtualSize */
111 0x1000, /* VirtualAddress */
112 0x200, /* SizeOfRawData */
113 0x200, /* PointerToRawData */
114 0, /* PointerToRelocations */
115 0, /* PointerToLinenumbers */
116 0, /* NumberOfRelocations */
117 0, /* NumberOfLinenumbers */
118 IMAGE_SCN_CNT_CODE
| IMAGE_SCN_MEM_EXECUTE
| IMAGE_SCN_MEM_READ
/* Characteristics */
121 { '.','r','s','r','c',0 }, /* Name */
122 { 880 }, /* VirtualSize */
123 0x2000, /* VirtualAddress */
124 0x400, /* SizeOfRawData */
125 0x400, /* PointerToRawData */
126 0, /* PointerToRelocations */
127 0, /* PointerToLinenumbers */
128 0, /* NumberOfRelocations */
129 0, /* NumberOfLinenumbers */
130 IMAGE_SCN_CNT_INITIALIZED_DATA
| IMAGE_SCN_MEM_READ
/* Characteristics */
134 static const unsigned char text_section
[] =
136 0x33, 0xc0, /* xor eax, eax */
141 /* taken from fusionpriv.h */
148 VS_FIXEDFILEINFO Value
;
191 typedef struct rsrc_section_t
193 IMAGE_RESOURCE_DIRECTORY header
;
194 IMAGE_RESOURCE_DIRECTORY_ENTRY file_info_id
;
195 IMAGE_RESOURCE_DIRECTORY file_info_header
;
196 IMAGE_RESOURCE_DIRECTORY_ENTRY version_info_id
;
197 IMAGE_RESOURCE_DIRECTORY version_info_header
;
198 IMAGE_RESOURCE_DIRECTORY_ENTRY version_lang_id
;
199 IMAGE_RESOURCE_DATA_ENTRY version_data_entry
;
201 VS_VERSIONINFO version_info
;
202 STRINGFILEINFO string_file_info
;
203 STRINGTABLE string_table
;
205 STRINGHDR FileVersion_hdr
;
206 WCHAR FileVersion_key
[13];
207 WCHAR FileVersion_val
[8];
209 STRINGHDR ProductVersion_hdr
;
210 WCHAR ProductVersion_key
[15];
211 WCHAR ProductVersion_val
[8];
213 STRINGHDR CompanyName_hdr
;
214 WCHAR CompanyName_key
[13];
215 WCHAR CompanyName_val
[12];
217 STRINGHDR FileDescription_hdr
;
218 WCHAR FileDescription_key
[17];
219 WCHAR FileDescription_val
[16];
221 STRINGHDR InternalName_hdr
;
222 WCHAR InternalName_key
[13];
223 WCHAR InternalName_val
[14];
225 STRINGHDR LegalCopyright_hdr
;
226 WCHAR LegalCopyright_key
[15];
227 WCHAR LegalCopyright_val
[16];
229 STRINGHDR LegalTrademarks_hdr
;
230 WCHAR LegalTrademarks_key
[17];
231 WCHAR LegalTrademarks_val
[16];
233 STRINGHDR OriginalFilename_hdr
;
234 WCHAR OriginalFilename_key
[17];
235 WCHAR OriginalFilename_val
[18];
237 STRINGHDR Productname_hdr
;
238 WCHAR Productname_key
[13];
239 WCHAR Productname_val
[12];
241 VARFILEINFO file_info
;
245 static const rsrc_section_t rsrc_section
=
249 0, /* Characteristics */
250 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
251 0, /* MajorVersion */
252 0, /* MinorVersion */
253 0, /* NumberOfNamedEntries */
254 1, /* NumberOfIdEntries */
259 (DWORD
)VS_FILE_INFO
, /* NameOffset:31 */
260 0 /* NameIsString:1 */
263 0x80000018 /* OffsetToData */
266 /* file_info_header */
268 0, /* Characteristics */
269 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
270 0, /* MajorVersion */
271 0, /* MinorVersion */
272 0, /* NumberOfNamedEntries */
273 1, /* NumberOfIdEntries */
275 /* version_info_id */
278 VS_VERSION_INFO
, /* NameOffset:31 */
279 0 /* NameIsString:1 */
282 0x80000030 /* OffsetToData */
285 /* version_info_header */
287 0, /* Characteristics */
288 0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
289 0, /* MajorVersion */
290 0, /* MinorVersion */
291 0, /* NumberOfNamedEntries */
292 1, /* NumberOfIdEntries */
294 /* version_lang_id */
297 1033, /* NameOffset:31 */
298 0 /* NameIsString:1 */
301 0x48 /* OffsetToDirectory */
304 /* version_data_entry */
306 0x2058, /* OffsetToData */
315 0x34, /* wValueLength */
316 0, /* wType: Binary */
317 { 'V','S','_','V','E','R','S','I','O','N','_','I','N','F','O','\0','\0' }, /* szKey[17] */
320 0xFEEF04BD, /* dwSignature */
321 0x10000, /* dwStrucVersion */
322 0x10000, /* dwFileVersionMS */
323 0, /* dwFileVersionLS */
324 0x10000, /* dwProductVersionMS */
325 1, /* dwProductVersionLS */
326 0, /* dwFileFlagsMask */
328 VOS__WINDOWS32
, /* dwFileOS */
329 VFT_APP
, /* dwFileType */
330 0, /* dwFileSubtype */
331 0x01d1a019, /* dwFileDateMS */
332 0xac754c50 /* dwFileDateLS */
336 /* string_file_info */
339 0, /* wValueLength */
341 { 'S','t','r','i','n','g','F','i','l','e','I','n','f','o','\0' } /* szKey[15] */
346 0, /* wValueLength */
348 { 'F','F','F','F','0','0','0','0','\0' } /* szKey[9] */
354 8, /* wValueLength */
357 { 'F','i','l','e','V','e','r','s','i','o','n','\0' },
358 { '1','.','0','.','0','.','0','\0' },
363 8, /* wValueLength */
366 { 'P','r','o','d','u','c','t','V','e','r','s','i','o','n','\0' },
367 { '1','.','0','.','0','.','1','\0' },
372 12, /* wValueLength */
375 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
376 { 'C','o','m','p','a','n','y','N','a','m','e','\0' },
378 /* FileDescription */
381 16, /* wValueLength */
384 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
385 { 'F','i','l','e','D','e','s','c','r','i','p','t','i','o','n','\0' },
390 13, /* wValueLength */
393 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
394 { 'I','n','t','e','r','n','a','l','N','a','m','e','\0' },
399 15, /* wValueLength */
402 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
403 { 'L','e','g','a','l','C','o','p','y','r','i','g','h','t','\0' },
405 /* LegalTrademarks */
408 16, /* wValueLength */
411 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
412 { 'L','e','g','a','l','T','r','a','d','e','m','a','r','k','s','\0' },
414 /* OriginalFilename */
417 17, /* wValueLength */
420 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
421 { 'O','r','i','g','i','n','a','l','F','i','l','e','n','a','m','e','\0' },
426 12, /* wValueLength */
429 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
430 { 'P','r','o','d','u','c','t','N','a','m','e','\0' },
436 0, /* wValueLength */
438 { 'V','a','r','F','i','l','e','I','n','f','o','\0' } /* szKey[13] */
444 4, /* wValueLength */
445 0, /* wType: Binary */
446 { 'T','r','a','n','s','l','a','t','i','o','n','\0' }, /* szKey[13] */
451 typedef struct export_section_t
453 IMAGE_EXPORT_DIRECTORY desc
;
454 char binary_name
[10];
457 /* This export section is not complete, but the Name RVA is only taken into account */
458 static export_section_t export_dir
=
461 0, /* Characteristics */
462 0, /* TimeDateStamp */
463 0, /* MajorVersion */
464 0, /* MinorVersion */
465 0x2398, /* Name (RVA) */
467 0, /* NumberOfFunctions */
468 0, /* NumberOfNames */
469 0, /* AddressOfFunctions (RVA) */
470 0, /* AddressOfNames (RVA) */
471 0, /* AddressOfNameOrdinals (RVA) */
473 { 'T','e','S','t','2','.','e','x','e',0 }, /* binary_name */
477 void test_create_exe_imp(const char* name
, int skip_rsrc_exports
)
484 file
= CreateFileA(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
485 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file\n");
486 if(file
== INVALID_HANDLE_VALUE
)
489 memset(buf
, 0, size
);
491 cur
= memcpy(buf
, &dos_header
, sizeof(dos_header
));
492 cur
+= dos_header
.e_lfanew
;
494 memcpy(cur
, &nt_header
, sizeof(nt_header
));
495 if (skip_rsrc_exports
)
497 ((IMAGE_NT_HEADERS32
*)cur
)->OptionalHeader
.DataDirectory
[IMAGE_DIRECTORY_ENTRY_EXPORT
].VirtualAddress
= 0;
498 ((IMAGE_NT_HEADERS32
*)cur
)->OptionalHeader
.DataDirectory
[IMAGE_DIRECTORY_ENTRY_RESOURCE
].VirtualAddress
= 0;
500 cur
+= sizeof(nt_header
);
501 memcpy(cur
, section_headers
, sizeof(section_headers
));
503 /* write code section: */
504 cur
= buf
+ section_headers
[0].PointerToRawData
;
505 memcpy(cur
, text_section
, sizeof(text_section
));
507 if (!skip_rsrc_exports
)
509 /* write resource section: */
510 cur
= buf
+ section_headers
[1].PointerToRawData
;
511 memcpy(cur
, &rsrc_section
, sizeof(rsrc_section
));
513 /* write minimal export directory: */
515 memcpy(cur
, &export_dir
, sizeof(export_dir
));
518 WriteFile(file
, buf
, size
, &size
, NULL
);
524 /* Almost everything in this filetype is ignored, only e_lfanew, ne_restab and ne_nrestab are relevant */
525 void test_create_ne_imp(const char* name
, int skip_names
)
529 IMAGE_DOS_HEADER MZ_hdr
= { IMAGE_DOS_SIGNATURE
, 0 };
530 IMAGE_OS2_HEADER NE_hdr
= { IMAGE_OS2_SIGNATURE
, 0 };
531 static const BYTE NE_names
[] =
533 /* Show that the length is used, not the nullterm*/
534 11,'T','E','S','T','M','O','D','.','h','X','x','x',0,0,0,
535 20,'M','O','D',' ','D','E','S','C','R','I','P','T','I','O','N',' ','H','E','R','E',0,0,0
538 file
= CreateFileA(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
539 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file\n");
540 if(file
== INVALID_HANDLE_VALUE
)
543 MZ_hdr
.e_lfanew
= sizeof(MZ_hdr
);
546 NE_hdr
.ne_restab
= sizeof(NE_hdr
); /* First entry (pascal string + ordinal) = module name */
547 NE_hdr
.ne_nrestab
= sizeof(MZ_hdr
) + sizeof(NE_hdr
) + 16; /* First entry (pascal string + ordinal) = module description */
550 WriteFile(file
, &MZ_hdr
, sizeof(MZ_hdr
), &size
, NULL
);
551 WriteFile(file
, &NE_hdr
, sizeof(NE_hdr
), &size
, NULL
);
552 WriteFile(file
, NE_names
, sizeof(NE_names
), &size
, NULL
);
557 void test_create_file_imp(const char* name
, const char* contents
, size_t len
)
559 HANDLE file
= CreateFileA(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
560 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file\n");
561 if (file
!= INVALID_HANDLE_VALUE
)
566 WriteFile(file
, contents
, len
, &size
, NULL
);
572 static unsigned char win10Header
[8] = {
573 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
575 static unsigned char rawData
[2356] = {
576 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x64, 0x62, 0x66,
577 0x02, 0x78, 0x3E, 0x01, 0x00, 0x00, 0x03, 0x78, 0x44, 0x00, 0x00, 0x00,
578 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00,
579 0x00, 0x00, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x41, 0x5F,
580 0x54, 0x53, 0x45, 0x54, 0xC6, 0x01, 0x00, 0x00, 0x53, 0x49, 0x44, 0x5F,
581 0x54, 0x53, 0x45, 0x54, 0x56, 0x02, 0x00, 0x00, 0x57, 0x45, 0x4E, 0x5F,
582 0x54, 0x53, 0x45, 0x54, 0xEC, 0x02, 0x00, 0x00, 0x4B, 0x32, 0x57, 0x5F,
583 0x54, 0x53, 0x45, 0x54, 0x7C, 0x03, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00,
584 0x00, 0x00, 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x0B, 0x60, 0x01, 0x98,
585 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38,
586 0x07, 0x70, 0x03, 0x38, 0x20, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
587 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38, 0x04, 0x70, 0x03, 0x38,
588 0x01, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x26, 0x00,
589 0x00, 0x00, 0x02, 0x38, 0x0D, 0x70, 0x03, 0x38, 0x15, 0x40, 0x01, 0x98,
590 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
591 0x74, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
592 0x50, 0x04, 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38,
593 0x10, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00,
594 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00,
595 0x02, 0x38, 0x12, 0x70, 0x03, 0x38, 0x06, 0x90, 0x01, 0x98, 0x00, 0x00,
596 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38, 0x12, 0x70,
597 0x03, 0x38, 0x04, 0x90, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x98,
598 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x3E, 0x00, 0x00, 0x00, 0x02, 0x38,
599 0x07, 0x70, 0x03, 0x38, 0x04, 0x90, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00,
600 0xED, 0xB4, 0x89, 0x50, 0xB1, 0xA4, 0x82, 0xA7, 0xEC, 0x02, 0x00, 0x00,
601 0x85, 0x2B, 0x88, 0x40, 0x97, 0x76, 0xA6, 0xC4, 0xC6, 0x01, 0x00, 0x00,
602 0x77, 0x7A, 0xBF, 0x48, 0x78, 0xB1, 0x69, 0xD2, 0x56, 0x02, 0x00, 0x00,
603 0xD0, 0x15, 0xE6, 0xCB, 0xE8, 0x90, 0x68, 0xFE, 0x7C, 0x03, 0x00, 0x00,
604 0x01, 0x70, 0x42, 0x03, 0x00, 0x00, 0x01, 0x50, 0x3E, 0xD6, 0xC0, 0x02,
605 0x1A, 0xB9, 0xD1, 0x01, 0x22, 0x60, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60,
606 0x1C, 0x00, 0x00, 0x00, 0x23, 0x40, 0x01, 0x00, 0x00, 0x00, 0x07, 0x90,
607 0x10, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x9B, 0xE3, 0xDB, 0x55, 0x0B, 0x45,
608 0x9B, 0xD4, 0xD2, 0x0C, 0x94, 0x84, 0x26, 0x0F, 0x02, 0x70, 0x00, 0x00,
609 0x00, 0x00, 0x0B, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00,
610 0x00, 0x00, 0x09, 0x70, 0x26, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x00,
611 0x00, 0x00, 0x08, 0x60, 0x82, 0x00, 0x00, 0x00, 0x03, 0x70, 0x06, 0x00,
612 0x00, 0x00, 0x03, 0x60, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x08, 0x00,
613 0x00, 0x00, 0x01, 0x10, 0x03, 0x60, 0xBE, 0x00, 0x00, 0x00, 0x07, 0x70,
614 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60, 0xDC, 0x00, 0x00, 0x00, 0x06, 0x60,
615 0x00, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x90,
616 0x10, 0x00, 0x00, 0x00, 0x3F, 0xC9, 0x50, 0x4E, 0x63, 0xB8, 0xFA, 0x4D,
617 0xBA, 0xE2, 0xD8, 0x0E, 0xF4, 0xCE, 0x5C, 0x89, 0x0D, 0x70, 0x24, 0x00,
618 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00,
619 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x40, 0x72, 0x00,
620 0x6F, 0x00, 0x25, 0x40, 0x67, 0x00, 0x72, 0x00, 0x26, 0x40, 0x00, 0x00,
621 0x00, 0x00, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
622 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
623 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x13, 0x60, 0xB8, 0x01,
624 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
625 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x70,
626 0x90, 0x00, 0x00, 0x00, 0x01, 0x60, 0xCE, 0x01, 0x00, 0x00, 0x06, 0x60,
627 0xF8, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2A, 0x02, 0x00, 0x00, 0x04, 0x90,
628 0x10, 0x00, 0x00, 0x00, 0xE1, 0x20, 0x67, 0x15, 0x98, 0xEF, 0x04, 0x4D,
629 0x96, 0x5A, 0xD8, 0x5D, 0xE0, 0x5E, 0x6D, 0x9F, 0x0D, 0x70, 0x24, 0x00,
630 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x02, 0x00,
631 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00, 0x24, 0x40, 0x20, 0x00,
632 0x32, 0x00, 0x25, 0x40, 0x2E, 0x00, 0x38, 0x00, 0x26, 0x40, 0x00, 0x00,
633 0x00, 0x00, 0x08, 0x70, 0x38, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
634 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
635 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
636 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
637 0x00, 0x00, 0x01, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x13, 0x60,
638 0xB8, 0x01, 0x00, 0x00, 0x07, 0x70, 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60,
639 0x60, 0x02, 0x00, 0x00, 0x06, 0x60, 0x80, 0x02, 0x00, 0x00, 0x05, 0x60,
640 0x9E, 0x02, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x69, 0xEF,
641 0x70, 0xCE, 0x1D, 0xA2, 0x8B, 0x40, 0x84, 0x5B, 0xF9, 0x9E, 0xAC, 0x06,
642 0x09, 0xE7, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
643 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
644 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
645 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
646 0x00, 0x00, 0x01, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x08, 0x70,
647 0x12, 0x00, 0x00, 0x00, 0x01, 0x60, 0xC0, 0x02, 0x00, 0x00, 0x01, 0x40,
648 0x04, 0x00, 0x00, 0x00, 0x03, 0x40, 0xB0, 0xB0, 0xB0, 0xB0, 0x0B, 0x70,
649 0x0C, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x1A, 0x40,
650 0x8E, 0x01, 0x00, 0x00, 0x07, 0x70, 0xCE, 0x00, 0x00, 0x00, 0x01, 0x60,
651 0xEC, 0x02, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x03, 0x00, 0x00, 0x05, 0x60,
652 0x26, 0x03, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x44, 0xD1,
653 0xEA, 0xB4, 0x40, 0xF6, 0x4B, 0x4E, 0x94, 0xC4, 0x0C, 0x7F, 0xA8, 0x66,
654 0x23, 0xB0, 0x08, 0x70, 0x94, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
655 0x00, 0x00, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x03, 0x40, 0x29, 0xD6,
656 0x8B, 0x17, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
657 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x12, 0x60, 0x42, 0x03,
658 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
659 0x03, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x40,
660 0x03, 0x00, 0x00, 0x00, 0x09, 0x40, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x40,
661 0x01, 0x00, 0x00, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x1C, 0x40,
662 0x02, 0x00, 0x04, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x14, 0x60,
663 0x68, 0x03, 0x00, 0x00, 0x15, 0x60, 0x90, 0x03, 0x00, 0x00, 0x16, 0x60,
664 0xB0, 0x03, 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
665 0x01, 0x00, 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
666 0x1D, 0x40, 0x45, 0x23, 0x01, 0x00, 0x1E, 0x40, 0x45, 0x23, 0x01, 0x00,
667 0x0B, 0x70, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60, 0xD4, 0x03, 0x00, 0x00,
668 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00,
669 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0xEC, 0x03, 0x00, 0x00,
670 0x1B, 0x60, 0xF8, 0x01, 0x00, 0x00, 0x18, 0x60, 0x2A, 0x04, 0x00, 0x00,
671 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00,
672 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0x4A, 0x04, 0x00, 0x00,
673 0x1B, 0x60, 0x00, 0x01, 0x00, 0x00, 0x18, 0x60, 0x82, 0x04, 0x00, 0x00,
674 0x01, 0x78, 0x96, 0x04, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00, 0x00, 0x00,
675 0x32, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
676 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x61, 0x00,
677 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
678 0x5F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
679 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
680 0x73, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4D, 0x00,
681 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00,
682 0x00, 0x00, 0x56, 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00,
683 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00,
684 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x88,
685 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6D, 0x00,
686 0x65, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00,
687 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x65, 0x00,
688 0x78, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00,
689 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88,
690 0x18, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00,
691 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00,
692 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x00,
693 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x61, 0x00, 0x6C, 0x00,
694 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
695 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00,
696 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
697 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00,
698 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
699 0x01, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
700 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x76, 0x00,
701 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00,
702 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
703 0x01, 0x88, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x01, 0x88,
704 0x18, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00,
705 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00,
706 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00,
707 0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00,
708 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
709 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
710 0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00,
711 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00,
712 0x2E, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x88, 0x24, 0x00, 0x00, 0x00,
713 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x64, 0x00,
714 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
715 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
716 0x01, 0x88, 0x2C, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
717 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x6E, 0x00,
718 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00,
719 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
720 0x00, 0x00, 0x01, 0x88, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00,
721 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00,
722 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00,
723 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00,
724 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1A, 0x00,
725 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
726 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
727 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00,
728 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00,
729 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
730 0x1C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00,
731 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00,
732 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00,
733 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
734 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x66, 0x00,
735 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x78, 0x00,
736 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x74, 0x00,
737 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x77, 0x00, 0x32, 0x00,
738 0x6B, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00,
739 0x00, 0x00, 0x01, 0x88, 0x12, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
740 0x78, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00,
741 0x00, 0x00, 0x01, 0x88, 0x16, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
742 0x78, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00,
743 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00, 0x00, 0x00,
744 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00,
745 0x73, 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00,
746 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x00,
747 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00,
748 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00,
749 0x65, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00,
750 0x01, 0x88, 0x1A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00,
751 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00,
752 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00,
753 0x00, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6C, 0x00,
754 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
755 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x12, 0x00,
756 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x72, 0x00,
757 0x76, 0x00, 0x30, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x38, 0x00,
758 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00,
759 0x2F, 0x00, 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00,
760 0x74, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00,
761 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00,
762 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88,
763 0x1A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00,
764 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00,
765 0x64, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x88, 0x32, 0x00, 0x00, 0x00,
766 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
767 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00,
768 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x67, 0x00,
769 0x2F, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
770 0x00, 0x00, 0x01, 0x88, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x6C, 0x00,
771 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x20, 0x00, 0x69, 0x00, 0x74, 0x00,
772 0x21, 0x00, 0x00, 0x00
775 DWORD
test_get_db_size()
777 return sizeof(rawData
);
780 void test_create_db_imp(const char* name
, int win10
)
782 HANDLE file
= CreateFileA(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
783 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file '%s'\n", name
);
784 if (file
!= INVALID_HANDLE_VALUE
)
787 WriteFile(file
, rawData
, sizeof(rawData
), &size
, NULL
);
790 SetFilePointer(file
, 0, NULL
, FILE_BEGIN
);
791 WriteFile(file
, win10Header
, sizeof(win10Header
), &size
, NULL
);
797 static DWORD g_WinVersion
;
798 DWORD
get_host_winver(void)
802 RTL_OSVERSIONINFOEXW rtlinfo
= {0};
803 void (__stdcall
* pRtlGetVersion
)(RTL_OSVERSIONINFOEXW
*);
804 pRtlGetVersion
= (void (__stdcall
*)(RTL_OSVERSIONINFOEXW
*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
806 rtlinfo
.dwOSVersionInfoSize
= sizeof(rtlinfo
);
807 pRtlGetVersion(&rtlinfo
);
808 g_WinVersion
= (rtlinfo
.dwMajorVersion
<< 8) | rtlinfo
.dwMinorVersion
;
813 DWORD
get_module_version(HMODULE mod
)
816 HRSRC hResInfo
= FindResource(mod
, MAKEINTRESOURCE(VS_VERSION_INFO
), RT_VERSION
);
817 DWORD dwSize
= SizeofResource(mod
, hResInfo
);
818 if (hResInfo
&& dwSize
)
820 VS_FIXEDFILEINFO
*lpFfi
;
823 HGLOBAL hResData
= LoadResource(mod
, hResInfo
);
824 LPVOID pRes
= LockResource(hResData
);
825 HLOCAL pResCopy
= LocalAlloc(LMEM_FIXED
, dwSize
);
827 CopyMemory(pResCopy
, pRes
, dwSize
);
828 FreeResource(hResData
);
830 if (VerQueryValueW(pResCopy
, L
"\\", (LPVOID
*)&lpFfi
, &uLen
))
832 dwVersion
= (HIWORD(lpFfi
->dwProductVersionMS
) << 8) | LOWORD(lpFfi
->dwProductVersionMS
);
834 dwVersion
= (HIWORD(lpFfi
->dwFileVersionMS
) << 8) | LOWORD(lpFfi
->dwFileVersionMS
);
843 void silence_debug_output(void)
845 if (GetEnvironmentVariableA("SHIM_DEBUG_LEVEL", NULL
, 0) == ERROR_ENVVAR_NOT_FOUND
)
846 SetEnvironmentVariableA("SHIM_DEBUG_LEVEL", "0");
847 if (GetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", NULL
, 0) == ERROR_ENVVAR_NOT_FOUND
)
848 SetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", "0");