ReactOS  0.4.15-dev-494-g1d8c567
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 
473  buf = malloc(size);
474  winetest_ok(buf != NULL, "malloc failed\n");
475  if (buf == NULL)
476  {
477  return;
478  }
479 
481  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
482  if (file == INVALID_HANDLE_VALUE)
483  {
484  free(buf);
485  return;
486  }
487 
488  memset(buf, 0, size);
489  cur = memcpy(buf, &dos_header, sizeof(dos_header));
490  cur += dos_header.e_lfanew;
491 
492  memcpy(cur, &nt_header, sizeof(nt_header));
493  if (skip_rsrc_exports)
494  {
495  ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = 0;
496  ((IMAGE_NT_HEADERS32*)cur)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = 0;
497  }
498  cur += sizeof(nt_header);
499  memcpy(cur, section_headers, sizeof(section_headers));
500 
501  /* write code section: */
503  memcpy(cur, text_section, sizeof(text_section));
504 
505  if (!skip_rsrc_exports)
506  {
507  /* write resource section: */
509  memcpy(cur, &rsrc_section, sizeof(rsrc_section));
510 
511  /* write minimal export directory: */
512  cur += 0x370;
513  memcpy(cur, &export_dir, sizeof(export_dir));
514  }
515 
516  WriteFile(file, buf, size, &size, NULL);
517  free(buf);
518  CloseHandle(file);
519 }
520 
521 
522 /* Almost everything in this filetype is ignored, only e_lfanew, ne_restab and ne_nrestab are relevant */
523 void test_create_ne_imp(const WCHAR* name, int skip_names)
524 {
525  HANDLE file;
526  DWORD size;
527  IMAGE_DOS_HEADER MZ_hdr = { IMAGE_DOS_SIGNATURE, 0 };
528  IMAGE_OS2_HEADER NE_hdr = { IMAGE_OS2_SIGNATURE, 0 };
529  static const BYTE NE_names[] =
530  {
531  /* Show that the length is used, not the nullterm*/
532  11,'T','E','S','T','M','O','D','.','h','X','x','x',0,0,0,
533  20,'M','O','D',' ','D','E','S','C','R','I','P','T','I','O','N',' ','H','E','R','E',0,0,0
534  };
535 
537  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
539  return;
540 
541  MZ_hdr.e_lfanew = sizeof(MZ_hdr);
542  if (!skip_names)
543  {
544  NE_hdr.ne_restab = sizeof(NE_hdr); /* First entry (pascal string + ordinal) = module name */
545  NE_hdr.ne_nrestab = sizeof(MZ_hdr) + sizeof(NE_hdr) + 16; /* First entry (pascal string + ordinal) = module description */
546  }
547 
548  WriteFile(file, &MZ_hdr, sizeof(MZ_hdr), &size, NULL);
549  WriteFile(file, &NE_hdr, sizeof(NE_hdr), &size, NULL);
550  WriteFile(file, NE_names, sizeof(NE_names), &size, NULL);
551 
552  CloseHandle(file);
553 }
554 
555 void test_create_file_imp(const WCHAR* name, const char* contents, size_t len)
556 {
558  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file\n");
559  if (file != INVALID_HANDLE_VALUE)
560  {
561  if (contents && len)
562  {
563  DWORD size;
564  WriteFile(file, contents, (DWORD)len, &size, NULL);
565  }
566  CloseHandle(file);
567  }
568 }
569 
570 static unsigned char win10Header[8] = {
571  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
572 };
573 static unsigned char rawData[2356] = {
574  0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x64, 0x62, 0x66,
575  0x02, 0x78, 0x3E, 0x01, 0x00, 0x00, 0x03, 0x78, 0x44, 0x00, 0x00, 0x00,
576  0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00,
577  0x00, 0x00, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x41, 0x5F,
578  0x54, 0x53, 0x45, 0x54, 0xC6, 0x01, 0x00, 0x00, 0x53, 0x49, 0x44, 0x5F,
579  0x54, 0x53, 0x45, 0x54, 0x56, 0x02, 0x00, 0x00, 0x57, 0x45, 0x4E, 0x5F,
580  0x54, 0x53, 0x45, 0x54, 0xEC, 0x02, 0x00, 0x00, 0x4B, 0x32, 0x57, 0x5F,
581  0x54, 0x53, 0x45, 0x54, 0x7C, 0x03, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00,
582  0x00, 0x00, 0x02, 0x38, 0x07, 0x70, 0x03, 0x38, 0x0B, 0x60, 0x01, 0x98,
583  0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38,
584  0x07, 0x70, 0x03, 0x38, 0x20, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
585  0x03, 0x78, 0x0E, 0x00, 0x00, 0x00, 0x02, 0x38, 0x04, 0x70, 0x03, 0x38,
586  0x01, 0x60, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x26, 0x00,
587  0x00, 0x00, 0x02, 0x38, 0x0D, 0x70, 0x03, 0x38, 0x15, 0x40, 0x01, 0x98,
588  0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
589  0x74, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
590  0x50, 0x04, 0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38,
591  0x10, 0x70, 0x03, 0x38, 0x01, 0x60, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00,
592  0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x0E, 0x00, 0x00, 0x00,
593  0x02, 0x38, 0x12, 0x70, 0x03, 0x38, 0x06, 0x90, 0x01, 0x98, 0x00, 0x00,
594  0x00, 0x00, 0x03, 0x78, 0x14, 0x00, 0x00, 0x00, 0x02, 0x38, 0x12, 0x70,
595  0x03, 0x38, 0x04, 0x90, 0x16, 0x40, 0x01, 0x00, 0x00, 0x00, 0x01, 0x98,
596  0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0x3E, 0x00, 0x00, 0x00, 0x02, 0x38,
597  0x07, 0x70, 0x03, 0x38, 0x04, 0x90, 0x01, 0x98, 0x30, 0x00, 0x00, 0x00,
598  0xED, 0xB4, 0x89, 0x50, 0xB1, 0xA4, 0x82, 0xA7, 0xEC, 0x02, 0x00, 0x00,
599  0x85, 0x2B, 0x88, 0x40, 0x97, 0x76, 0xA6, 0xC4, 0xC6, 0x01, 0x00, 0x00,
600  0x77, 0x7A, 0xBF, 0x48, 0x78, 0xB1, 0x69, 0xD2, 0x56, 0x02, 0x00, 0x00,
601  0xD0, 0x15, 0xE6, 0xCB, 0xE8, 0x90, 0x68, 0xFE, 0x7C, 0x03, 0x00, 0x00,
602  0x01, 0x70, 0x42, 0x03, 0x00, 0x00, 0x01, 0x50, 0x3E, 0xD6, 0xC0, 0x02,
603  0x1A, 0xB9, 0xD1, 0x01, 0x22, 0x60, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60,
604  0x1C, 0x00, 0x00, 0x00, 0x23, 0x40, 0x01, 0x00, 0x00, 0x00, 0x07, 0x90,
605  0x10, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x9B, 0xE3, 0xDB, 0x55, 0x0B, 0x45,
606  0x9B, 0xD4, 0xD2, 0x0C, 0x94, 0x84, 0x26, 0x0F, 0x02, 0x70, 0x00, 0x00,
607  0x00, 0x00, 0x0B, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00,
608  0x00, 0x00, 0x09, 0x70, 0x26, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x00,
609  0x00, 0x00, 0x08, 0x60, 0x82, 0x00, 0x00, 0x00, 0x03, 0x70, 0x06, 0x00,
610  0x00, 0x00, 0x03, 0x60, 0xA0, 0x00, 0x00, 0x00, 0x03, 0x70, 0x08, 0x00,
611  0x00, 0x00, 0x01, 0x10, 0x03, 0x60, 0xBE, 0x00, 0x00, 0x00, 0x07, 0x70,
612  0x8A, 0x00, 0x00, 0x00, 0x01, 0x60, 0xDC, 0x00, 0x00, 0x00, 0x06, 0x60,
613  0x00, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2C, 0x01, 0x00, 0x00, 0x04, 0x90,
614  0x10, 0x00, 0x00, 0x00, 0x3F, 0xC9, 0x50, 0x4E, 0x63, 0xB8, 0xFA, 0x4D,
615  0xBA, 0xE2, 0xD8, 0x0E, 0xF4, 0xCE, 0x5C, 0x89, 0x0D, 0x70, 0x24, 0x00,
616  0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x01, 0x00,
617  0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00, 0x24, 0x40, 0x72, 0x00,
618  0x6F, 0x00, 0x25, 0x40, 0x67, 0x00, 0x72, 0x00, 0x26, 0x40, 0x00, 0x00,
619  0x00, 0x00, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
620  0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
621  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x13, 0x60, 0xB8, 0x01,
622  0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
623  0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x70,
624  0x90, 0x00, 0x00, 0x00, 0x01, 0x60, 0xCE, 0x01, 0x00, 0x00, 0x06, 0x60,
625  0xF8, 0x01, 0x00, 0x00, 0x05, 0x60, 0x2A, 0x02, 0x00, 0x00, 0x04, 0x90,
626  0x10, 0x00, 0x00, 0x00, 0xE1, 0x20, 0x67, 0x15, 0x98, 0xEF, 0x04, 0x4D,
627  0x96, 0x5A, 0xD8, 0x5D, 0xE0, 0x5E, 0x6D, 0x9F, 0x0D, 0x70, 0x24, 0x00,
628  0x00, 0x00, 0x17, 0x40, 0x01, 0x00, 0x00, 0x00, 0x10, 0x40, 0x02, 0x00,
629  0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00, 0x24, 0x40, 0x20, 0x00,
630  0x32, 0x00, 0x25, 0x40, 0x2E, 0x00, 0x38, 0x00, 0x26, 0x40, 0x00, 0x00,
631  0x00, 0x00, 0x08, 0x70, 0x38, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
632  0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
633  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
634  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
635  0x00, 0x00, 0x01, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x13, 0x60,
636  0xB8, 0x01, 0x00, 0x00, 0x07, 0x70, 0x8A, 0x00, 0x00, 0x00, 0x01, 0x60,
637  0x60, 0x02, 0x00, 0x00, 0x06, 0x60, 0x80, 0x02, 0x00, 0x00, 0x05, 0x60,
638  0x9E, 0x02, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x69, 0xEF,
639  0x70, 0xCE, 0x1D, 0xA2, 0x8B, 0x40, 0x84, 0x5B, 0xF9, 0x9E, 0xAC, 0x06,
640  0x09, 0xE7, 0x08, 0x70, 0x32, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
641  0x00, 0x00, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
642  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00,
643  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x50, 0x01, 0x00, 0x00, 0x00,
644  0x00, 0x00, 0x01, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x08, 0x70,
645  0x12, 0x00, 0x00, 0x00, 0x01, 0x60, 0xC0, 0x02, 0x00, 0x00, 0x01, 0x40,
646  0x04, 0x00, 0x00, 0x00, 0x03, 0x40, 0xB0, 0xB0, 0xB0, 0xB0, 0x0B, 0x70,
647  0x0C, 0x00, 0x00, 0x00, 0x01, 0x60, 0x3E, 0x00, 0x00, 0x00, 0x1A, 0x40,
648  0x8E, 0x01, 0x00, 0x00, 0x07, 0x70, 0xCE, 0x00, 0x00, 0x00, 0x01, 0x60,
649  0xEC, 0x02, 0x00, 0x00, 0x06, 0x60, 0x0E, 0x03, 0x00, 0x00, 0x05, 0x60,
650  0x26, 0x03, 0x00, 0x00, 0x04, 0x90, 0x10, 0x00, 0x00, 0x00, 0x44, 0xD1,
651  0xEA, 0xB4, 0x40, 0xF6, 0x4B, 0x4E, 0x94, 0xC4, 0x0C, 0x7F, 0xA8, 0x66,
652  0x23, 0xB0, 0x08, 0x70, 0x94, 0x00, 0x00, 0x00, 0x01, 0x60, 0x5C, 0x01,
653  0x00, 0x00, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x03, 0x40, 0x29, 0xD6,
654  0x8B, 0x17, 0x09, 0x60, 0x66, 0x01, 0x00, 0x00, 0x10, 0x60, 0x84, 0x01,
655  0x00, 0x00, 0x11, 0x60, 0xA2, 0x01, 0x00, 0x00, 0x12, 0x60, 0x42, 0x03,
656  0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
657  0x03, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x40,
658  0x03, 0x00, 0x00, 0x00, 0x09, 0x40, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x40,
659  0x01, 0x00, 0x00, 0x00, 0x0B, 0x40, 0xAD, 0xBA, 0x00, 0x00, 0x1C, 0x40,
660  0x02, 0x00, 0x04, 0x00, 0x13, 0x60, 0xB8, 0x01, 0x00, 0x00, 0x14, 0x60,
661  0x68, 0x03, 0x00, 0x00, 0x15, 0x60, 0x90, 0x03, 0x00, 0x00, 0x16, 0x60,
662  0xB0, 0x03, 0x00, 0x00, 0x06, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
663  0x01, 0x00, 0x0D, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
664  0x1D, 0x40, 0x45, 0x23, 0x01, 0x00, 0x1E, 0x40, 0x45, 0x23, 0x01, 0x00,
665  0x0B, 0x70, 0x06, 0x00, 0x00, 0x00, 0x01, 0x60, 0xD4, 0x03, 0x00, 0x00,
666  0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x02, 0x00, 0x00, 0x00,
667  0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0xEC, 0x03, 0x00, 0x00,
668  0x1B, 0x60, 0xF8, 0x01, 0x00, 0x00, 0x18, 0x60, 0x2A, 0x04, 0x00, 0x00,
669  0x0D, 0x70, 0x1E, 0x00, 0x00, 0x00, 0x15, 0x40, 0x01, 0x00, 0x00, 0x00,
670  0x0E, 0x70, 0x06, 0x00, 0x00, 0x00, 0x19, 0x60, 0x4A, 0x04, 0x00, 0x00,
671  0x1B, 0x60, 0x00, 0x01, 0x00, 0x00, 0x18, 0x60, 0x82, 0x04, 0x00, 0x00,
672  0x01, 0x78, 0x96, 0x04, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00, 0x00, 0x00,
673  0x32, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
674  0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x61, 0x00,
675  0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
676  0x5F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x31, 0x00,
677  0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
678  0x73, 0x00, 0x74, 0x00, 0x4E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4D, 0x00,
679  0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00,
680  0x00, 0x00, 0x56, 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00,
681  0x61, 0x00, 0x6C, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x69, 0x00,
682  0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x88,
683  0x18, 0x00, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6D, 0x00,
684  0x65, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00,
685  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x65, 0x00,
686  0x78, 0x00, 0x63, 0x00, 0x6C, 0x00, 0x75, 0x00, 0x64, 0x00, 0x65, 0x00,
687  0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x01, 0x88,
688  0x18, 0x00, 0x00, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x63, 0x00, 0x6C, 0x00,
689  0x75, 0x00, 0x64, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x64, 0x00, 0x6C, 0x00,
690  0x6C, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00, 0x00, 0x00, 0x74, 0x00,
691  0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x61, 0x00, 0x6C, 0x00,
692  0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
693  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00,
694  0x70, 0x00, 0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00,
695  0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00,
696  0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
697  0x01, 0x88, 0x2A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
698  0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x76, 0x00,
699  0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x5F, 0x00,
700  0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00,
701  0x01, 0x88, 0x04, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x01, 0x88,
702  0x18, 0x00, 0x00, 0x00, 0x43, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00,
703  0x61, 0x00, 0x6E, 0x00, 0x79, 0x00, 0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00,
704  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00,
705  0x72, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x75, 0x00, 0x63, 0x00, 0x74, 0x00,
706  0x4E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
707  0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00,
708  0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x88, 0x10, 0x00,
709  0x00, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00,
710  0x2E, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x88, 0x24, 0x00, 0x00, 0x00,
711  0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x64, 0x00,
712  0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
713  0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
714  0x01, 0x88, 0x2C, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00,
715  0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00, 0x6E, 0x00,
716  0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x5F, 0x00, 0x64, 0x00, 0x69, 0x00,
717  0x73, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
718  0x00, 0x00, 0x01, 0x88, 0x30, 0x00, 0x00, 0x00, 0x61, 0x00, 0x70, 0x00,
719  0x70, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x5F, 0x00,
720  0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00, 0x72, 0x00,
721  0x5F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6C, 0x00,
722  0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1A, 0x00,
723  0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
724  0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00,
725  0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00,
726  0x69, 0x00, 0x78, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x77, 0x00, 0x5F, 0x00,
727  0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88,
728  0x1C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x78, 0x00, 0x6E, 0x00,
729  0x65, 0x00, 0x77, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00,
730  0x64, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x26, 0x00,
731  0x00, 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00,
732  0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6B, 0x00, 0x66, 0x00,
733  0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x2E, 0x00, 0x74, 0x00, 0x78, 0x00,
734  0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1C, 0x00, 0x00, 0x00, 0x74, 0x00,
735  0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x5F, 0x00, 0x77, 0x00, 0x32, 0x00,
736  0x6B, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00,
737  0x00, 0x00, 0x01, 0x88, 0x12, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
738  0x78, 0x00, 0x5F, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00,
739  0x00, 0x00, 0x01, 0x88, 0x16, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00,
740  0x78, 0x00, 0x5F, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x64, 0x00,
741  0x6F, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x88, 0x20, 0x00, 0x00, 0x00,
742  0x46, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x44, 0x00, 0x65, 0x00,
743  0x73, 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00,
744  0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x01, 0x88, 0x22, 0x00,
745  0x00, 0x00, 0x4F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00,
746  0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x46, 0x00, 0x69, 0x00, 0x6C, 0x00,
747  0x65, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00,
748  0x01, 0x88, 0x1A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x6E, 0x00, 0x74, 0x00,
749  0x65, 0x00, 0x72, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x4E, 0x00,
750  0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x88, 0x1E, 0x00,
751  0x00, 0x00, 0x4C, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6C, 0x00,
752  0x43, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00,
753  0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x88, 0x12, 0x00,
754  0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x53, 0x00, 0x72, 0x00,
755  0x76, 0x00, 0x30, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x88, 0x38, 0x00,
756  0x00, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00,
757  0x2F, 0x00, 0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00,
758  0x74, 0x00, 0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00,
759  0x67, 0x00, 0x2F, 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x61, 0x00,
760  0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x00, 0x00, 0x01, 0x88,
761  0x1A, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x20, 0x00,
762  0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x65, 0x00,
763  0x64, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x88, 0x32, 0x00, 0x00, 0x00,
764  0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
765  0x2F, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x63, 0x00, 0x74, 0x00,
766  0x6F, 0x00, 0x73, 0x00, 0x2E, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x67, 0x00,
767  0x2F, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00,
768  0x00, 0x00, 0x01, 0x88, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x6C, 0x00,
769  0x6C, 0x00, 0x6F, 0x00, 0x77, 0x00, 0x20, 0x00, 0x69, 0x00, 0x74, 0x00,
770  0x21, 0x00, 0x00, 0x00
771 };
772 
774 {
775  return sizeof(rawData);
776 }
777 
779 {
781  winetest_ok(file != INVALID_HANDLE_VALUE, "can't create file '%s'\n", wine_dbgstr_w(name));
782  if (file != INVALID_HANDLE_VALUE)
783  {
784  DWORD size;
785  WriteFile(file, rawData, sizeof(rawData), &size, NULL);
786  if (win10)
787  {
790  }
791  CloseHandle(file);
792  }
793 }
794 
797 {
798  if (!g_WinVersion)
799  {
800  RTL_OSVERSIONINFOEXW rtlinfo = {0};
801  void (__stdcall* pRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
802  pRtlGetVersion = (void (__stdcall*)(RTL_OSVERSIONINFOEXW*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
803 
804  rtlinfo.dwOSVersionInfoSize = sizeof(rtlinfo);
805  pRtlGetVersion(&rtlinfo);
806  g_WinVersion = (rtlinfo.dwMajorVersion << 8) | rtlinfo.dwMinorVersion;
807  }
808  return g_WinVersion;
809 }
810 
812 {
813  DWORD dwVersion = 0;
815  DWORD dwSize = SizeofResource(mod, hResInfo);
816  if (hResInfo && dwSize)
817  {
818  VS_FIXEDFILEINFO *lpFfi;
819  UINT uLen;
820 
821  HGLOBAL hResData = LoadResource(mod, hResInfo);
822  LPVOID pRes = LockResource(hResData);
823  HLOCAL pResCopy = LocalAlloc(LMEM_FIXED, dwSize);
824 
825  CopyMemory(pResCopy, pRes, dwSize);
826  FreeResource(hResData);
827 
828  if (VerQueryValueW(pResCopy, L"\\", (LPVOID*)&lpFfi, &uLen))
829  {
830  dwVersion = (HIWORD(lpFfi->dwProductVersionMS) << 8) | LOWORD(lpFfi->dwProductVersionMS);
831  if (!dwVersion)
832  dwVersion = (HIWORD(lpFfi->dwFileVersionMS) << 8) | LOWORD(lpFfi->dwFileVersionMS);
833  }
834 
835  LocalFree(pResCopy);
836  }
837 
838  return dwVersion;
839 }
840 
842 {
843  if (GetEnvironmentVariableA("SHIM_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
844  SetEnvironmentVariableA("SHIM_DEBUG_LEVEL", "0");
845  if (GetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", NULL, 0) == ERROR_ENVVAR_NOT_FOUND)
846  SetEnvironmentVariableA("SHIMENG_DEBUG_LEVEL", "0");
847 }
848 
WCHAR FileVersion_key[13]
Definition: data.c:195
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:407
#define FindResource
Definition: winbase.h:3633
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:811
#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:400
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:841
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
IN UCHAR Value
Definition: halp.h:394
DWORD get_host_winver(void)
Definition: data.c:796
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:523
GLsizeiptr size
Definition: glext.h:5919
#define GetEnvironmentVariableA(x, y, z)
Definition: compat.h:420
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:570
#define CopyMemory
Definition: winbase.h:1646
static DWORD g_WinVersion
Definition: data.c:795
#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:778
#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:812
#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
unsigned char BYTE
Definition: xxhash.c:193
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:409
struct export_section_t export_section_t
Definition: name.c:38
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:419
#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:573
void test_create_file_imp(const WCHAR *name, const char *contents, size_t len)
Definition: data.c:555
#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:773
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:1049
Definition: fci.c:126
#define IMAGE_FILE_32BIT_MACHINE
Definition: pedump.c:164