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