ReactOS  0.4.14-dev-115-g4576127
data.c
Go to the documentation of this file.
1 /*
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)
6  */
7 
8 #include <exdisp.h>
9 #include <winbase.h>
10 #include "wine/test.h"
11 
12 
14 {
15  IMAGE_DOS_SIGNATURE, /* e_magic */
16  144, /* e_cblp */
17  3, /* e_cp */
18  0, /* e_crlc */
19  4, /* e_cparhdr */
20  0, /* e_minalloc */
21  65535, /* e_maxalloc */
22  0, /* e_ss */
23  184, /* e_sp */
24  0, /* e_csum */
25  0, /* e_ip */
26  0, /* e_cs */
27  64, /* e_lfarlc */
28  0, /* e_ovno */
29  { 0 }, /* e_res[4] */
30  0, /* e_oemid */
31  0, /* e_oeminfo */
32  { 0 }, /* e_res2[10] */
33  0x80 /* e_lfanew */
34 };
35 
37 {
38  IMAGE_NT_SIGNATURE, /* Signature */
39  {
40  IMAGE_FILE_MACHINE_I386, /* Machine */
41  2, /* NumberOfSections */
42  0x12345, /* TimeDateStamp */
43  0, /* PointerToSymbolTable */
44  0, /* NumberOfSymbols */
45  sizeof(IMAGE_OPTIONAL_HEADER), /* SizeOfOptionalHeader */
47  },
48  {
49  IMAGE_NT_OPTIONAL_HDR_MAGIC, /* Magic */
50  6, /* MajorLinkerVersion */
51  3, /* MinorLinkerVersion */
52  0, /* SizeOfCode */
53  0, /* SizeOfInitializedData */
54  0, /* SizeOfUninitializedData */
55  0x1000, /* AddressOfEntryPoint */
56  0x1000, /* BaseOfCode */
57  0, /* BaseOfData */
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 */
77  0, /* LoaderFlags */
78  0x10, /* NumberOfRvaAndSizes */
79  {
80  /* IMAGE_DIRECTORY_ENTRY_EXPORT */
81  {
82  0x2370, /* VirtualAddress */
83  76, /* Size */
84  },
85  { 0 },
86  /* IMAGE_DIRECTORY_ENTRY_RESOURCE */
87  {
88  0x2000, /* VirtualAddress */
89  868, /* Size */
90  },
91  } /* DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] */
92  }
93 };
94 
96 {
97  {
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 */
108  },
109  {
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 */
120  }
121 };
122 
123 static const unsigned char text_section[] =
124 {
125  0x33, 0xc0, /* xor eax, eax */
126  0xc3 /* ret */
127 };
128 
129 
130 /* taken from fusionpriv.h */
131 typedef struct
132 {
133  WORD wLength;
134  WORD wValueLength;
135  WORD wType;
136  WCHAR szKey[17];
139 
140 typedef struct
141 {
142  WORD wLength;
143  WORD wValueLength;
144  WORD wType;
145  WCHAR szKey[15];
147 
148 typedef struct
149 {
150  WORD wLength;
151  WORD wValueLength;
152  WORD wType;
153  WCHAR szKey[9];
154 } STRINGTABLE;
155 
156 typedef struct
157 {
158  WORD wLength;
159  WORD wValueLength;
160  WORD wType;
161 } STRINGHDR;
162 
163 typedef struct
164 {
165  WORD wLength;
166  WORD wValueLength;
167  WORD wType;
168  WCHAR szKey[13];
169 } VARFILEINFO;
170 
171 typedef struct
172 {
173  WORD wLength;
174  WORD wValueLength;
175  WORD wType;
176  WCHAR szKey[13];
177  DWORD Value;
178 } VAR;
179 
180 typedef struct rsrc_section_t
181 {
189 
193 
197 
201 
205 
209 
213 
217 
221 
225 
229 
233 
234 #define RT_VERSION_DW 16
236 {
237  /* header */
238  {
239  0, /* Characteristics */
240  0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
241  0, /* MajorVersion */
242  0, /* MinorVersion */
243  0, /* NumberOfNamedEntries */
244  1, /* NumberOfIdEntries */
245  },
246  /* file_info_id */
247  {
248  {{
249  RT_VERSION_DW, /* NameOffset:31 */
250  0 /* NameIsString:1 */
251  }},
252  {
253  0x80000018 /* OffsetToData */
254  }
255  },
256  /* file_info_header */
257  {
258  0, /* Characteristics */
259  0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
260  0, /* MajorVersion */
261  0, /* MinorVersion */
262  0, /* NumberOfNamedEntries */
263  1, /* NumberOfIdEntries */
264  },
265  /* version_info_id */
266  {
267  {{
268  VS_VERSION_INFO, /* NameOffset:31 */
269  0 /* NameIsString:1 */
270  }},
271  {
272  0x80000030 /* OffsetToData */
273  },
274  },
275  /* version_info_header */
276  {
277  0, /* Characteristics */
278  0x55FE8E21, /* TimeDateStamp, 20/09/2015 10:44:49 */
279  0, /* MajorVersion */
280  0, /* MinorVersion */
281  0, /* NumberOfNamedEntries */
282  1, /* NumberOfIdEntries */
283  },
284  /* version_lang_id */
285  {
286  {{
287  1033, /* NameOffset:31 */
288  0 /* NameIsString:1 */
289  }},
290  {
291  0x48 /* OffsetToDirectory */
292  }
293  },
294  /* version_data_entry */
295  {
296  0x2058, /* OffsetToData */
297  0x30C, /* Size */
298  0, /* CodePage */
299  0, /* Reserved */
300  },
301 
302  /* version_info */
303  {
304  0x30C, /* wLength */
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] */
308  /* Value */
309  {
310  0xFEEF04BD, /* dwSignature */
311  0x10000, /* dwStrucVersion */
312  0x10000, /* dwFileVersionMS */
313  0, /* dwFileVersionLS */
314  0x10000, /* dwProductVersionMS */
315  1, /* dwProductVersionLS */
316  0, /* dwFileFlagsMask */
317  0, /* dwFileFlags */
318  VOS__WINDOWS32, /* dwFileOS */
319  VFT_APP, /* dwFileType */
320  0, /* dwFileSubtype */
321  0x01d1a019, /* dwFileDateMS */
322  0xac754c50 /* dwFileDateLS */
323  },
324  },
325 
326  /* string_file_info */
327  {
328  0x26C, /* wLength */
329  0, /* wValueLength */
330  1, /* wType: Text */
331  { 'S','t','r','i','n','g','F','i','l','e','I','n','f','o','\0' } /* szKey[15] */
332  },
333  /* string_table */
334  {
335  0x248, /* wLength */
336  0, /* wValueLength */
337  1, /* wType: Text */
338  { 'F','F','F','F','0','0','0','0','\0' } /* szKey[9] */
339  },
340 
341  /* FileVersion */
342  {
343  48, /* wLength */
344  8, /* wValueLength */
345  1, /* wType: Text */
346  },
347  { 'F','i','l','e','V','e','r','s','i','o','n','\0' },
348  { '1','.','0','.','0','.','0','\0' },
349 
350  /* ProductVersion */
351  {
352  52, /* wLength */
353  8, /* wValueLength */
354  1, /* wType: Text */
355  },
356  { 'P','r','o','d','u','c','t','V','e','r','s','i','o','n','\0' },
357  { '1','.','0','.','0','.','1','\0' },
358 
359  /* CompanyName */
360  {
361  56, /* wLength */
362  12, /* wValueLength */
363  1, /* wType: Text */
364  },
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' },
367 
368  /* FileDescription */
369  {
370  72, /* wLength */
371  16, /* wValueLength */
372  1, /* wType: Text */
373  },
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' },
376 
377  /* InternalName */
378  {
379  58, /* wLength */
380  13, /* wValueLength */
381  1, /* wType: Text */
382  },
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' },
385 
386  /* LegalCopyright */
387  {
388  66, /* wLength */
389  15, /* wValueLength */
390  1, /* wType: Text */
391  },
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' },
394 
395  /* LegalTrademarks */
396  {
397  72, /* wLength */
398  16, /* wValueLength */
399  1, /* wType: Text */
400  },
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' },
403 
404  /* OriginalFilename */
405  {
406  74, /* wLength */
407  17, /* wValueLength */
408  1, /* wType: Text */
409  },
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' },
412 
413  /* ProductName */
414  {
415  56, /* wLength */
416  12, /* wValueLength */
417  1, /* wType: Text */
418  },
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' },
421 
422 
423  /* file_info */
424  {
425  0x44, /* wLength */
426  0, /* wValueLength */
427  1, /* wType: Text */
428  { 'V','a','r','F','i','l','e','I','n','f','o','\0' } /* szKey[13] */
429  },
430 
431  /* translation */
432  {
433  0x24, /* wLength */
434  4, /* wValueLength */
435  0, /* wType: Binary */
436  { 'T','r','a','n','s','l','a','t','i','o','n','\0' }, /* szKey[13] */
437  0xffff /* Value */
438  }
439 };
440 
441 typedef struct export_section_t
442 {
444  char binary_name[10];
446 
447 /* This export section is not complete, but the Name RVA is only taken into account */
449 {
450  {
451  0, /* Characteristics */
452  0, /* TimeDateStamp */
453  0, /* MajorVersion */
454  0, /* MinorVersion */
455  0x2398, /* Name (RVA) */
456  1, /* Base */
457  0, /* NumberOfFunctions */
458  0, /* NumberOfNames */
459  0, /* AddressOfFunctions (RVA) */
460  0, /* AddressOfNames (RVA) */
461  0, /* AddressOfNameOrdinals (RVA) */
462  },
463  { 'T','e','S','t','2','.','e','x','e',0 }, /* binary_name */
464 };
465 
466 
467 void test_create_exe_imp(const WCHAR* name, int skip_rsrc_exports)
468 {
469  HANDLE file;
470  char *buf, *cur;
471  DWORD size = 0x800;
472  buf = malloc(size);
473 
475  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
477  return;
478 
479  memset(buf, 0, size);
480  cur = buf;
481  cur = memcpy(buf, &dos_header, sizeof(dos_header));
482  cur += dos_header.e_lfanew;
483 
484  memcpy(cur, &nt_header, sizeof(nt_header));
485  if (skip_rsrc_exports)
486  {
487  ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = 0;
488  ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = 0;
489  }
490  cur += sizeof(nt_header);
491  memcpy(cur, section_headers, sizeof(section_headers));
492 
493  /* write code section: */
495  memcpy(cur, text_section, sizeof(text_section));
496 
497  if (!skip_rsrc_exports)
498  {
499  /* write resource section: */
501  memcpy(cur, &rsrc_section, sizeof(rsrc_section));
502 
503  /* write minimal export directory: */
504  cur += 0x370;
505  memcpy(cur, &export_dir, sizeof(export_dir));
506  }
507 
508  WriteFile(file, buf, size, &size, NULL);
509  free(buf);
510  CloseHandle(file);
511 }
512 
513 
514 /* Almost everything in this filetype is ignored, only e_lfanew, ne_restab and ne_nrestab are relevant */
515 void test_create_ne_imp(const WCHAR* name, int skip_names)
516 {
517  HANDLE file;
518  DWORD size;
519  IMAGE_DOS_HEADER MZ_hdr = { IMAGE_DOS_SIGNATURE, 0 };
520  IMAGE_OS2_HEADER NE_hdr = { IMAGE_OS2_SIGNATURE, 0 };
521  static const BYTE NE_names[] =
522  {
523  /* Show that the length is used, not the nullterm*/
524  11,'T','E','S','T','M','O','D','.','h','X','x','x',0,0,0,
525  20,'M','O','D',' ','D','E','S','C','R','I','P','T','I','O','N',' ','H','E','R','E',0,0,0
526  };
527 
529  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
531  return;
532 
533  MZ_hdr.e_lfanew = sizeof(MZ_hdr);
534  if (!skip_names)
535  {
536  NE_hdr.ne_restab = sizeof(NE_hdr); /* First entry (pascal string + ordinal) = module name */
537  NE_hdr.ne_nrestab = sizeof(MZ_hdr) + sizeof(NE_hdr) + 16; /* First entry (pascal string + ordinal) = module description */
538  }
539 
540  WriteFile(file, &MZ_hdr, sizeof(MZ_hdr), &size, NULL);
541  WriteFile(file, &NE_hdr, sizeof(NE_hdr), &size, NULL);
542  WriteFile(file, NE_names, sizeof(NE_names), &size, NULL);
543 
544  CloseHandle(file);
545 }
546 
547 void test_create_file_imp(const WCHAR* name, const char* contents, size_t len)
548 {
550  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
551  if (file != INVALID_HANDLE_VALUE)
552  {
553  if (contents && len)
554  {
555  DWORD size;
556  WriteFile(file, contents, (DWORD)len, &size, NULL);
557  }
558  CloseHandle(file);
559  }
560 }
561 
562 static unsigned char win10Header[8] = {
563  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
564 };
565 static unsigned char rawData[2356] = {
566  0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x64, 0x62, 0x66,
567  0x02, 0x78, 0x3E, 0x01, 0x00, 0x00, 0x03, 0x78, 0x44, 0x00, 0x00, 0x00,
568  0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00,
569  0x00, 0x00, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x41, 0x5F,
570  0x54, 0x53, 0x45, 0x54, 0xC6, 0x01, 0x00, 0x00, 0x53, 0x49, 0x44, 0x5F,
571  0x54, 0x53, 0x45, 0x54, 0x56, 0x02, 0x00, 0x00, 0x57, 0x45, 0x4E, 0x5F,
572  0x54, 0x53, 0x45, 0x54, 0xEC, 0x02, 0x00, 0x00, 0x4B, 0x32, 0x57, 0x5F,
573  0x54, 0x53, 0x45, 0x54, 0x7C, 0x03, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00,
574  0x00, 0x00, 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x0B, 0x60, 0x01, 0x98,
575  0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38,
576  0x07, 0x70, 0x03, 0x38, 0x20, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
577  0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38, 0x04, 0x70, 0x03, 0x38,
578  0x01, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x26, 0x00,
579  0x00, 0x00, 0x02, 0x38, 0x0D, 0x70, 0x03, 0x38, 0x15, 0x40, 0x01, 0x98,
580  0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
581  0x74, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
582  0x50, 0x04, 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38,
583  0x10, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00,
584  0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00,
585  0x02, 0x38, 0x12, 0x70, 0x03, 0x38, 0x06, 0x90, 0x01, 0x98, 0x00, 0x00,
586  0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38, 0x12, 0x70,
587  0x03, 0x38, 0x04, 0x90, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x98,
588  0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x3E, 0x00, 0x00, 0x00, 0x02, 0x38,
589  0x07, 0x70, 0x03, 0x38, 0x04, 0x90, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00,
590  0xED, 0xB4, 0x89, 0x50, 0xB1, 0xA4, 0x82, 0xA7, 0xEC, 0x02, 0x00, 0x00,
591  0x85, 0x2B, 0x88, 0x40, 0x97, 0x76, 0xA6, 0xC4, 0xC6, 0x01, 0x00, 0x00,
592  0x77, 0x7A, 0xBF, 0x48, 0x78, 0xB1, 0x69, 0xD2, 0x56, 0x02, 0x00, 0x00,
593  0xD0, 0x15, 0xE6, 0xCB, 0xE8, 0x90, 0x68, 0xFE, 0x7C, 0x03, 0x00, 0x00,
594  0x01, 0x70, 0x42, 0x03, 0x00, 0x00, 0x01, 0x50, 0x3E, 0xD6, 0xC0, 0x02,
595  0x1A, 0xB9, 0xD1, 0x01, 0x22, 0x60, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60,
596  0x1C, 0x00, 0x00, 0x00, 0x23, 0x40, 0x01, 0x00, 0x00, 0x00, 0x07, 0x90,
597  0x10, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x9B, 0xE3, 0xDB, 0x55, 0x0B, 0x45,
598  0x9B, 0xD4, 0xD2, 0x0C, 0x94, 0x84, 0x26, 0x0F, 0x02, 0x70, 0x00, 0x00,
599  0x00, 0x00, 0x0B, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00,
600  0x00, 0x00, 0x09, 0x70, 0x26, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x00,
601  0x00, 0x00, 0x08, 0x60, 0x82, 0x00, 0x00, 0x00, 0x03, 0x70, 0x06, 0x00,
602  0x00, 0x00, 0x03, 0x60, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x08, 0x00,
603  0x00, 0x00, 0x01, 0x10, 0x03, 0x60, 0xBE, 0x00, 0x00, 0x00, 0x07, 0x70,
604  0x8A, 0x00, 0x00, 0x00, 0x01, 0x60, 0xDC, 0x00, 0x00, 0x00, 0x06, 0x60,
605  0x00, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x90,
606  0x10, 0x00, 0x00, 0x00, 0x3F, 0xC9, 0x50, 0x4E, 0x63, 0xB8, 0xFA, 0x4D,
607  0xBA, 0xE2, 0xD8, 0x0E, 0xF4, 0xCE, 0x5C, 0x89, 0x0D, 0x70, 0x24, 0x00,
608  0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00,
609  0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x40, 0x72, 0x00,
610  0x6F, 0x00, 0x25, 0x40, 0x67, 0x00, 0x72, 0x00, 0x26, 0x40, 0x00, 0x00,
611  0x00, 0x00, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
612  0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
613  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x13, 0x60, 0xB8, 0x01,
614  0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
615  0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x70,
616  0x90, 0x00, 0x00, 0x00, 0x01, 0x60, 0xCE, 0x01, 0x00, 0x00, 0x06, 0x60,
617  0xF8, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2A, 0x02, 0x00, 0x00, 0x04, 0x90,
618  0x10, 0x00, 0x00, 0x00, 0xE1, 0x20, 0x67, 0x15, 0x98, 0xEF, 0x04, 0x4D,
619  0x96, 0x5A, 0xD8, 0x5D, 0xE0, 0x5E, 0x6D, 0x9F, 0x0D, 0x70, 0x24, 0x00,
620  0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x02, 0x00,
621  0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00, 0x24, 0x40, 0x20, 0x00,
622  0x32, 0x00, 0x25, 0x40, 0x2E, 0x00, 0x38, 0x00, 0x26, 0x40, 0x00, 0x00,
623  0x00, 0x00, 0x08, 0x70, 0x38, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
624  0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
625  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
626  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
627  0x00, 0x00, 0x01, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x13, 0x60,
628  0xB8, 0x01, 0x00, 0x00, 0x07, 0x70, 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60,
629  0x60, 0x02, 0x00, 0x00, 0x06, 0x60, 0x80, 0x02, 0x00, 0x00, 0x05, 0x60,
630  0x9E, 0x02, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x69, 0xEF,
631  0x70, 0xCE, 0x1D, 0xA2, 0x8B, 0x40, 0x84, 0x5B, 0xF9, 0x9E, 0xAC, 0x06,
632  0x09, 0xE7, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
633  0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
634  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
635  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
636  0x00, 0x00, 0x01, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x08, 0x70,
637  0x12, 0x00, 0x00, 0x00, 0x01, 0x60, 0xC0, 0x02, 0x00, 0x00, 0x01, 0x40,
638  0x04, 0x00, 0x00, 0x00, 0x03, 0x40, 0xB0, 0xB0, 0xB0, 0xB0, 0x0B, 0x70,
639  0x0C, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x1A, 0x40,
640  0x8E, 0x01, 0x00, 0x00, 0x07, 0x70, 0xCE, 0x00, 0x00, 0x00, 0x01, 0x60,
641  0xEC, 0x02, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x03, 0x00, 0x00, 0x05, 0x60,
642  0x26, 0x03, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x44, 0xD1,
643  0xEA, 0xB4, 0x40, 0xF6, 0x4B, 0x4E, 0x94, 0xC4, 0x0C, 0x7F, 0xA8, 0x66,
644  0x23, 0xB0, 0x08, 0x70, 0x94, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
645  0x00, 0x00, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x03, 0x40, 0x29, 0xD6,
646  0x8B, 0x17, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
647  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x12, 0x60, 0x42, 0x03,
648  0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
649  0x03, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x40,
650  0x03, 0x00, 0x00, 0x00, 0x09, 0x40, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x40,
651  0x01, 0x00, 0x00, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x1C, 0x40,
652  0x02, 0x00, 0x04, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x14, 0x60,
653  0x68, 0x03, 0x00, 0x00, 0x15, 0x60, 0x90, 0x03, 0x00, 0x00, 0x16, 0x60,
654  0xB0, 0x03, 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
655  0x01, 0x00, 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
656  0x1D, 0x40, 0x45, 0x23, 0x01, 0x00, 0x1E, 0x40, 0x45, 0x23, 0x01, 0x00,
657  0x0B, 0x70, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60, 0xD4, 0x03, 0x00, 0x00,
658  0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00,
659  0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0xEC, 0x03, 0x00, 0x00,
660  0x1B, 0x60, 0xF8, 0x01, 0x00, 0x00, 0x18, 0x60, 0x2A, 0x04, 0x00, 0x00,
661  0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00,
662  0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0x4A, 0x04, 0x00, 0x00,
663  0x1B, 0x60, 0x00, 0x01, 0x00, 0x00, 0x18, 0x60, 0x82, 0x04, 0x00, 0x00,
664  0x01, 0x78, 0x96, 0x04, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00, 0x00, 0x00,
665  0x32, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
666  0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x61, 0x00,
667  0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
668  0x5F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
669  0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
670  0x73, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4D, 0x00,
671  0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00,
672  0x00, 0x00, 0x56, 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00,
673  0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00,
674  0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x88,
675  0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6D, 0x00,
676  0x65, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00,
677  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x65, 0x00,
678  0x78, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00,
679  0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88,
680  0x18, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00,
681  0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00,
682  0x6C, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x00,
683  0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x61, 0x00, 0x6C, 0x00,
684  0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
685  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00,
686  0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
687  0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00,
688  0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
689  0x01, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
690  0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x76, 0x00,
691  0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00,
692  0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
693  0x01, 0x88, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x01, 0x88,
694  0x18, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00,
695  0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00,
696  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00,
697  0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00,
698  0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
699  0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
700  0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00,
701  0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00,
702  0x2E, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x88, 0x24, 0x00, 0x00, 0x00,
703  0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x64, 0x00,
704  0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
705  0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
706  0x01, 0x88, 0x2C, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
707  0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x6E, 0x00,
708  0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00,
709  0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
710  0x00, 0x00, 0x01, 0x88, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00,
711  0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00,
712  0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00,
713  0x5F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00,
714  0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1A, 0x00,
715  0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
716  0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
717  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00,
718  0x69, 0x00, 0x78, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00,
719  0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
720  0x1C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00,
721  0x65, 0x00, 0x77, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00,
722  0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00,
723  0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
724  0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x66, 0x00,
725  0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x78, 0x00,
726  0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x74, 0x00,
727  0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x77, 0x00, 0x32, 0x00,
728  0x6B, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00,
729  0x00, 0x00, 0x01, 0x88, 0x12, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
730  0x78, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00,
731  0x00, 0x00, 0x01, 0x88, 0x16, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
732  0x78, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00,
733  0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00, 0x00, 0x00,
734  0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00,
735  0x73, 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00,
736  0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x00,
737  0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00,
738  0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00,
739  0x65, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00,
740  0x01, 0x88, 0x1A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00,
741  0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00,
742  0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00,
743  0x00, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6C, 0x00,
744  0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
745  0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x12, 0x00,
746  0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x72, 0x00,
747  0x76, 0x00, 0x30, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x38, 0x00,
748  0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00,
749  0x2F, 0x00, 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00,
750  0x74, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00,
751  0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00,
752  0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88,
753  0x1A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00,
754  0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00,
755  0x64, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x88, 0x32, 0x00, 0x00, 0x00,
756  0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
757  0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00,
758  0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x67, 0x00,
759  0x2F, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
760  0x00, 0x00, 0x01, 0x88, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x6C, 0x00,
761  0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x20, 0x00, 0x69, 0x00, 0x74, 0x00,
762  0x21, 0x00, 0x00, 0x00
763 };
764 
766 {
767  return sizeof(rawData);
768 }
769 
771 {
773  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file '%s'\n", wine_dbgstr_w(name));
774  if (file != INVALID_HANDLE_VALUE)
775  {
776  DWORD size;
777  WriteFile(file, rawData, sizeof(rawData), &size, NULL);
778  if (win10)
779  {
782  }
783  CloseHandle(file);
784  }
785 }
786 
789 {
790  if (!g_WinVersion)
791  {
792  RTL_OSVERSIONINFOEXW rtlinfo = {0};
793  void (__stdcall* pRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
794  pRtlGetVersion = (void (__stdcall*)(RTL_OSVERSIONINFOEXW*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
795 
796  rtlinfo.dwOSVersionInfoSize = sizeof(rtlinfo);
797  pRtlGetVersion(&rtlinfo);
798  g_WinVersion = (rtlinfo.dwMajorVersion << 8) | rtlinfo.dwMinorVersion;
799  }
800  return g_WinVersion;
801 }
802 
804 {
805  DWORD dwVersion = 0;
807  DWORD dwSize = SizeofResource(mod, hResInfo);
808  if (hResInfo && dwSize)
809  {
810  VS_FIXEDFILEINFO *lpFfi;
811  UINT uLen;
812 
813  HGLOBAL hResData = LoadResource(mod, hResInfo);
814  LPVOID pRes = LockResource(hResData);
815  HLOCAL pResCopy = LocalAlloc(LMEM_FIXED, dwSize);
816 
817  CopyMemory(pResCopy, pRes, dwSize);
818  FreeResource(hResData);
819 
820  if (VerQueryValueW(pResCopy, L"\\", (LPVOID*)&lpFfi, &uLen))
821  {
822  dwVersion = (HIWORD(lpFfi->dwProductVersionMS) << 8) | LOWORD(lpFfi->dwProductVersionMS);
823  if (!dwVersion)
824  dwVersion = (HIWORD(lpFfi->dwFileVersionMS) << 8) | LOWORD(lpFfi->dwFileVersionMS);
825  }
826 
827  LocalFree(pResCopy);
828  }
829 
830  return dwVersion;
831 }
832 
834 {
835  if (GetEnvironmentVariableA("SHIM_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
836  SetEnvironmentVariableA("SHIM_DEBUG_LEVEL", "0");
837  if (GetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
838  SetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", "0");
839 }
840 
WCHAR FileVersion_key[13]
Definition: data.c:195
_In_opt_ ULONG _Out_ PULONG Value
Definition: rtlfuncs.h:2343
WCHAR OriginalFilename_val[18]
Definition: data.c:224
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:265
WCHAR ProductVersion_val[8]
Definition: data.c:200
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define VOS__WINDOWS32
Definition: verrsrc.h:64
#define CloseHandle
Definition: compat.h:398
#define FindResource
Definition: winbase.h:3617
WCHAR InternalName_key[13]
Definition: data.c:211
STRINGHDR LegalTrademarks_hdr
Definition: data.c:218
char binary_name[10]
Definition: data.c:444
ULONG dwMinorVersion
Definition: rtltypes.h:267
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static IMAGE_SECTION_HEADER section_headers[]
Definition: data.c:95
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
WCHAR CompanyName_val[12]
Definition: data.c:204
#define free
Definition: debug_ros.c:5
DWORD get_module_version(HMODULE mod)
Definition: data.c:803
#define IMAGE_SCN_MEM_READ
Definition: ntimage.h:240
IMAGE_RESOURCE_DIRECTORY_ENTRY file_info_id
Definition: data.c:183
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
STRINGHDR FileDescription_hdr
Definition: data.c:206
DWORD PointerToRawData
Definition: pedump.c:290
STRINGHDR CompanyName_hdr
Definition: data.c:202
#define ERROR_ENVVAR_NOT_FOUND
Definition: winerror.h:261
IMAGE_RESOURCE_DIRECTORY_ENTRY version_lang_id
Definition: data.c:187
void silence_debug_output(void)
Definition: data.c:833
static void(__cdecl *p_initterm)(_INITTERMFUN *start
IMAGE_RESOURCE_DIRECTORY version_info_header
Definition: data.c:186
WCHAR OriginalFilename_key[17]
Definition: data.c:223
WCHAR CompanyName_key[13]
Definition: data.c:203
STRINGHDR ProductVersion_hdr
Definition: data.c:198
IMAGE_RESOURCE_DIRECTORY_ENTRY version_info_id
Definition: data.c:185
DWORD get_host_winver(void)
Definition: data.c:788
DWORD WINAPI DECLSPEC_HOTPATCH SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod)
Definition: fileinfo.c:204
ULONG dwMajorVersion
Definition: rtltypes.h:266
#define IMAGE_DOS_SIGNATURE
Definition: pedump.c:89
STRINGHDR LegalCopyright_hdr
Definition: data.c:214
#define GENERIC_WRITE
Definition: nt_native.h:90
BOOL WINAPI FreeResource(HGLOBAL handle)
Definition: res.c:559
void test_create_exe_imp(const WCHAR *name, int skip_rsrc_exports)
Definition: data.c:467
WCHAR LegalCopyright_val[16]
Definition: data.c:216
WCHAR FileDescription_val[16]
Definition: data.c:208
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
#define IMAGE_SUBSYSTEM_WINDOWS_CUI
Definition: ntimage.h:438
smooth NULL
Definition: ftsmooth.c:416
struct _tagVS_VERSIONINFO VS_VERSIONINFO
WCHAR LegalTrademarks_key[17]
Definition: data.c:219
#define RT_VERSION
Definition: pedump.c:376
Definition: pedump.c:457
static export_section_t export_dir
Definition: data.c:448
#define IMAGE_FILE_LINE_NUMS_STRIPPED
Definition: pedump.c:161
#define IMAGE_NT_SIGNATURE
Definition: pedump.c:93
#define LMEM_FIXED
Definition: winbase.h:349
#define IMAGE_FILE_MACHINE_I386
Definition: pedump.c:174
struct rsrc_section_t rsrc_section_t
struct _IMAGE_OPTIONAL_HEADER IMAGE_OPTIONAL_HEADER
STRINGHDR Productname_hdr
Definition: data.c:226
static IMAGE_DOS_HEADER dos_header
Definition: data.c:13
#define IMAGE_SCN_CNT_INITIALIZED_DATA
Definition: ntimage.h:231
void test_create_ne_imp(const WCHAR *name, int skip_names)
Definition: data.c:515
GLsizeiptr size
Definition: glext.h:5919
#define GetEnvironmentVariableA(x, y, z)
Definition: compat.h:411
IMAGE_RESOURCE_DATA_ENTRY version_data_entry
Definition: data.c:188
__wchar_t WCHAR
Definition: xmlstorage.h:180
void __winetest_cdecl winetest_ok(int condition, const char *msg,...)
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableA(IN LPCSTR lpName, IN LPCSTR lpValue)
Definition: environ.c:218
const char file[]
Definition: icontest.c:11
static unsigned char win10Header[8]
Definition: data.c:562
#define CopyMemory
Definition: winbase.h:1640
static DWORD g_WinVersion
Definition: data.c:787
#define IMAGE_FILE_EXECUTABLE_IMAGE
Definition: pedump.c:160
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
static const rsrc_section_t rsrc_section
Definition: data.c:235
#define __stdcall
Definition: typedefs.h:25
WCHAR InternalName_val[14]
Definition: data.c:212
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
STRINGHDR InternalName_hdr
Definition: data.c:210
static const WCHAR L[]
Definition: oid.c:1250
void test_create_db_imp(const WCHAR *name, int win10)
Definition: data.c:770
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define IMAGE_OS2_SIGNATURE
Definition: pedump.c:90
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:821
unsigned char BYTE
Definition: mem.h:68
#define IMAGE_SCN_CNT_CODE
Definition: ntimage.h:230
WCHAR LegalTrademarks_val[16]
Definition: data.c:220
IMAGE_EXPORT_DIRECTORY desc
Definition: data.c:443
#define IMAGE_DIRECTORY_ENTRY_EXPORT
Definition: compat.h:140
WCHAR Productname_val[12]
Definition: data.c:228
#define RT_VERSION_DW
Definition: data.c:234
static BOOL win10
Definition: render.c:66
Definition: pedump.c:413
static const unsigned char text_section[]
Definition: data.c:123
#define CREATE_ALWAYS
Definition: disk.h:72
#define FILE_BEGIN
Definition: winbase.h:112
STRINGHDR OriginalFilename_hdr
Definition: data.c:222
IMAGE_RESOURCE_DIRECTORY header
Definition: data.c:182
STRINGFILEINFO string_file_info
Definition: data.c:191
WCHAR FileVersion_val[8]
Definition: data.c:196
STRINGTABLE string_table
Definition: data.c:192
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
WCHAR Productname_key[13]
Definition: data.c:227
unsigned int UINT
Definition: ndis.h:50
#define VS_VERSION_INFO
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
VARFILEINFO file_info
Definition: data.c:230
#define IMAGE_NT_OPTIONAL_HDR_MAGIC
Definition: ntimage.h:387
WCHAR LegalCopyright_key[15]
Definition: data.c:215
#define CreateFileW
Definition: compat.h:400
struct export_section_t export_section_t
Definition: name.c:36
WCHAR FileDescription_key[17]
Definition: data.c:207
#define HIWORD(l)
Definition: typedefs.h:246
#define IMAGE_FILE_RELOCS_STRIPPED
Definition: pedump.c:159
#define GetProcAddress(x, y)
Definition: compat.h:410
#define malloc
Definition: debug_ros.c:4
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1373
VS_VERSIONINFO version_info
Definition: data.c:190
VAR translation
Definition: data.c:231
static unsigned char rawData[2356]
Definition: data.c:565
void test_create_file_imp(const WCHAR *name, const char *contents, size_t len)
Definition: data.c:547
#define IMAGE_DIRECTORY_ENTRY_RESOURCE
Definition: pedump.c:261
IMAGE_RESOURCE_DIRECTORY file_info_header
Definition: data.c:184
DWORD test_get_db_size()
Definition: data.c:765
WCHAR ProductVersion_key[15]
Definition: data.c:199
#define VFT_APP
Definition: verrsrc.h:75
#define memset(x, y, z)
Definition: compat.h:39
#define LOWORD(l)
Definition: pedump.c:82
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
static IMAGE_NT_HEADERS32 nt_header
Definition: data.c:36
#define IMAGE_SCN_MEM_EXECUTE
Definition: ntimage.h:239
STRINGHDR FileVersion_hdr
Definition: data.c:194
static int mod
Definition: i386-dis.c:1273
BOOL WINAPI VerQueryValueW(LPCVOID pBlock, LPCWSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
Definition: version.c:1054
Definition: fci.c:126
#define IMAGE_FILE_32BIT_MACHINE
Definition: pedump.c:164