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 rawData
[2356] = {
573 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x64, 0x62, 0x66,
574 0x02, 0x78, 0x3E, 0x01, 0x00, 0x00, 0x03, 0x78, 0x44, 0x00, 0x00, 0x00,
575 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00,
576 0x00, 0x00, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x41, 0x5F,
577 0x54, 0x53, 0x45, 0x54, 0xC6, 0x01, 0x00, 0x00, 0x53, 0x49, 0x44, 0x5F,
578 0x54, 0x53, 0x45, 0x54, 0x56, 0x02, 0x00, 0x00, 0x57, 0x45, 0x4E, 0x5F,
579 0x54, 0x53, 0x45, 0x54, 0xEC, 0x02, 0x00, 0x00, 0x4B, 0x32, 0x57, 0x5F,
580 0x54, 0x53, 0x45, 0x54, 0x7C, 0x03, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00,
581 0x00, 0x00, 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x0B, 0x60, 0x01, 0x98,
582 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38,
583 0x07, 0x70, 0x03, 0x38, 0x20, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
584 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38, 0x04, 0x70, 0x03, 0x38,
585 0x01, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x26, 0x00,
586 0x00, 0x00, 0x02, 0x38, 0x0D, 0x70, 0x03, 0x38, 0x15, 0x40, 0x01, 0x98,
587 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x74, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
589 0x50, 0x04, 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38,
590 0x10, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00,
591 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00,
592 0x02, 0x38, 0x12, 0x70, 0x03, 0x38, 0x06, 0x90, 0x01, 0x98, 0x00, 0x00,
593 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38, 0x12, 0x70,
594 0x03, 0x38, 0x04, 0x90, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x98,
595 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x3E, 0x00, 0x00, 0x00, 0x02, 0x38,
596 0x07, 0x70, 0x03, 0x38, 0x04, 0x90, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00,
597 0xED, 0xB4, 0x89, 0x50, 0xB1, 0xA4, 0x82, 0xA7, 0xEC, 0x02, 0x00, 0x00,
598 0x85, 0x2B, 0x88, 0x40, 0x97, 0x76, 0xA6, 0xC4, 0xC6, 0x01, 0x00, 0x00,
599 0x77, 0x7A, 0xBF, 0x48, 0x78, 0xB1, 0x69, 0xD2, 0x56, 0x02, 0x00, 0x00,
600 0xD0, 0x15, 0xE6, 0xCB, 0xE8, 0x90, 0x68, 0xFE, 0x7C, 0x03, 0x00, 0x00,
601 0x01, 0x70, 0x42, 0x03, 0x00, 0x00, 0x01, 0x50, 0x3E, 0xD6, 0xC0, 0x02,
602 0x1A, 0xB9, 0xD1, 0x01, 0x22, 0x60, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60,
603 0x1C, 0x00, 0x00, 0x00, 0x23, 0x40, 0x01, 0x00, 0x00, 0x00, 0x07, 0x90,
604 0x10, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x9B, 0xE3, 0xDB, 0x55, 0x0B, 0x45,
605 0x9B, 0xD4, 0xD2, 0x0C, 0x94, 0x84, 0x26, 0x0F, 0x02, 0x70, 0x00, 0x00,
606 0x00, 0x00, 0x0B, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00,
607 0x00, 0x00, 0x09, 0x70, 0x26, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x00,
608 0x00, 0x00, 0x08, 0x60, 0x82, 0x00, 0x00, 0x00, 0x03, 0x70, 0x06, 0x00,
609 0x00, 0x00, 0x03, 0x60, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x08, 0x00,
610 0x00, 0x00, 0x01, 0x10, 0x03, 0x60, 0xBE, 0x00, 0x00, 0x00, 0x07, 0x70,
611 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60, 0xDC, 0x00, 0x00, 0x00, 0x06, 0x60,
612 0x00, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x90,
613 0x10, 0x00, 0x00, 0x00, 0x3F, 0xC9, 0x50, 0x4E, 0x63, 0xB8, 0xFA, 0x4D,
614 0xBA, 0xE2, 0xD8, 0x0E, 0xF4, 0xCE, 0x5C, 0x89, 0x0D, 0x70, 0x24, 0x00,
615 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00,
616 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x40, 0x72, 0x00,
617 0x6F, 0x00, 0x25, 0x40, 0x67, 0x00, 0x72, 0x00, 0x26, 0x40, 0x00, 0x00,
618 0x00, 0x00, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
619 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
620 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x13, 0x60, 0xB8, 0x01,
621 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
622 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x70,
623 0x90, 0x00, 0x00, 0x00, 0x01, 0x60, 0xCE, 0x01, 0x00, 0x00, 0x06, 0x60,
624 0xF8, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2A, 0x02, 0x00, 0x00, 0x04, 0x90,
625 0x10, 0x00, 0x00, 0x00, 0xE1, 0x20, 0x67, 0x15, 0x98, 0xEF, 0x04, 0x4D,
626 0x96, 0x5A, 0xD8, 0x5D, 0xE0, 0x5E, 0x6D, 0x9F, 0x0D, 0x70, 0x24, 0x00,
627 0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x02, 0x00,
628 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00, 0x24, 0x40, 0x20, 0x00,
629 0x32, 0x00, 0x25, 0x40, 0x2E, 0x00, 0x38, 0x00, 0x26, 0x40, 0x00, 0x00,
630 0x00, 0x00, 0x08, 0x70, 0x38, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
631 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
632 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
633 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
634 0x00, 0x00, 0x01, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x13, 0x60,
635 0xB8, 0x01, 0x00, 0x00, 0x07, 0x70, 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60,
636 0x60, 0x02, 0x00, 0x00, 0x06, 0x60, 0x80, 0x02, 0x00, 0x00, 0x05, 0x60,
637 0x9E, 0x02, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x69, 0xEF,
638 0x70, 0xCE, 0x1D, 0xA2, 0x8B, 0x40, 0x84, 0x5B, 0xF9, 0x9E, 0xAC, 0x06,
639 0x09, 0xE7, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
640 0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
641 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
643 0x00, 0x00, 0x01, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x08, 0x70,
644 0x12, 0x00, 0x00, 0x00, 0x01, 0x60, 0xC0, 0x02, 0x00, 0x00, 0x01, 0x40,
645 0x04, 0x00, 0x00, 0x00, 0x03, 0x40, 0xB0, 0xB0, 0xB0, 0xB0, 0x0B, 0x70,
646 0x0C, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x1A, 0x40,
647 0x8E, 0x01, 0x00, 0x00, 0x07, 0x70, 0xCE, 0x00, 0x00, 0x00, 0x01, 0x60,
648 0xEC, 0x02, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x03, 0x00, 0x00, 0x05, 0x60,
649 0x26, 0x03, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x44, 0xD1,
650 0xEA, 0xB4, 0x40, 0xF6, 0x4B, 0x4E, 0x94, 0xC4, 0x0C, 0x7F, 0xA8, 0x66,
651 0x23, 0xB0, 0x08, 0x70, 0x94, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
652 0x00, 0x00, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x03, 0x40, 0x29, 0xD6,
653 0x8B, 0x17, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
654 0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x12, 0x60, 0x42, 0x03,
655 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
656 0x03, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x40,
657 0x03, 0x00, 0x00, 0x00, 0x09, 0x40, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x40,
658 0x01, 0x00, 0x00, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x1C, 0x40,
659 0x02, 0x00, 0x04, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x14, 0x60,
660 0x68, 0x03, 0x00, 0x00, 0x15, 0x60, 0x90, 0x03, 0x00, 0x00, 0x16, 0x60,
661 0xB0, 0x03, 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
662 0x01, 0x00, 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
663 0x1D, 0x40, 0x45, 0x23, 0x01, 0x00, 0x1E, 0x40, 0x45, 0x23, 0x01, 0x00,
664 0x0B, 0x70, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60, 0xD4, 0x03, 0x00, 0x00,
665 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00,
666 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0xEC, 0x03, 0x00, 0x00,
667 0x1B, 0x60, 0xF8, 0x01, 0x00, 0x00, 0x18, 0x60, 0x2A, 0x04, 0x00, 0x00,
668 0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00,
669 0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0x4A, 0x04, 0x00, 0x00,
670 0x1B, 0x60, 0x00, 0x01, 0x00, 0x00, 0x18, 0x60, 0x82, 0x04, 0x00, 0x00,
671 0x01, 0x78, 0x96, 0x04, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00, 0x00, 0x00,
672 0x32, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
673 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x61, 0x00,
674 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
675 0x5F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
676 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
677 0x73, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4D, 0x00,
678 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00,
679 0x00, 0x00, 0x56, 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00,
680 0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00,
681 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x88,
682 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6D, 0x00,
683 0x65, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00,
684 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x65, 0x00,
685 0x78, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00,
686 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88,
687 0x18, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00,
688 0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00,
689 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x00,
690 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x61, 0x00, 0x6C, 0x00,
691 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
692 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00,
693 0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
694 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00,
695 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
696 0x01, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
697 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x76, 0x00,
698 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00,
699 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
700 0x01, 0x88, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x01, 0x88,
701 0x18, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00,
702 0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00,
703 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00,
704 0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00,
705 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
706 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
707 0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00,
708 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00,
709 0x2E, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x88, 0x24, 0x00, 0x00, 0x00,
710 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x64, 0x00,
711 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
712 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
713 0x01, 0x88, 0x2C, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
714 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x6E, 0x00,
715 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00,
716 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
717 0x00, 0x00, 0x01, 0x88, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00,
718 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00,
719 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00,
720 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00,
721 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1A, 0x00,
722 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
723 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
724 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00,
725 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00,
726 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
727 0x1C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00,
728 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00,
729 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00,
730 0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
731 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x66, 0x00,
732 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x78, 0x00,
733 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x74, 0x00,
734 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x77, 0x00, 0x32, 0x00,
735 0x6B, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00,
736 0x00, 0x00, 0x01, 0x88, 0x12, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
737 0x78, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00,
738 0x00, 0x00, 0x01, 0x88, 0x16, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
739 0x78, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00,
740 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00, 0x00, 0x00,
741 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00,
742 0x73, 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00,
743 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x00,
744 0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00,
745 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00,
746 0x65, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00,
747 0x01, 0x88, 0x1A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00,
748 0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00,
749 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00,
750 0x00, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6C, 0x00,
751 0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
752 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x12, 0x00,
753 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x72, 0x00,
754 0x76, 0x00, 0x30, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x38, 0x00,
755 0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00,
756 0x2F, 0x00, 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00,
757 0x74, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00,
758 0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00,
759 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88,
760 0x1A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00,
761 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00,
762 0x64, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x88, 0x32, 0x00, 0x00, 0x00,
763 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
764 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00,
765 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x67, 0x00,
766 0x2F, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
767 0x00, 0x00, 0x01, 0x88, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x6C, 0x00,
768 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x20, 0x00, 0x69, 0x00, 0x74, 0x00,
769 0x21, 0x00, 0x00, 0x00
772 DWORD
test_get_db_size()
774 return sizeof(rawData
);
777 void test_create_db_imp(const char* name
)
779 HANDLE file
= CreateFileA(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
780 winetest_ok(file
!= INVALID_HANDLE_VALUE
, "can't create file '%s'\n", name
);
781 if (file
!= INVALID_HANDLE_VALUE
)
784 WriteFile(file
, rawData
, sizeof(rawData
), &size
, NULL
);
789 static DWORD g_WinVersion
;
790 DWORD
get_host_winver(void)
794 RTL_OSVERSIONINFOEXW rtlinfo
= {0};
795 void (__stdcall
* pRtlGetVersion
)(RTL_OSVERSIONINFOEXW
*);
796 pRtlGetVersion
= (void (__stdcall
*)(RTL_OSVERSIONINFOEXW
*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
798 rtlinfo
.dwOSVersionInfoSize
= sizeof(rtlinfo
);
799 pRtlGetVersion(&rtlinfo
);
800 g_WinVersion
= (rtlinfo
.dwMajorVersion
<< 8) | rtlinfo
.dwMinorVersion
;
805 void silence_debug_output(void)
807 if (GetEnvironmentVariableA("SHIM_DEBUG_LEVEL", NULL
, 0) == ERROR_ENVVAR_NOT_FOUND
)
808 SetEnvironmentVariableA("SHIM_DEBUG_LEVEL", "0");
809 if (GetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", NULL
, 0) == ERROR_ENVVAR_NOT_FOUND
)
810 SetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", "0");