[runtime] Add locking to mono_gc_compute_gc_descriptor (). (#4084)
[mono.git] / mono / io-layer / versioninfo.h
index 823ababc74a0d0737127c1e0e672a5d12cc9362b..85c629f61ab89ea4e435886bfa6b0d29a69372c0 100644 (file)
@@ -98,6 +98,297 @@ typedef struct
        guint32 dwFileDateLS;
 } WapiFixedFileInfo;
 
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+#define VS_FFI_SIGNATURE       0xbd04effe
+#define VS_FFI_STRUCVERSION    0x00000100
+#else
+#define VS_FFI_SIGNATURE       0xfeef04bd
+#define VS_FFI_STRUCVERSION    0x00010000
+#endif
+
+#define VS_FFI_FILEFLAGSMASK   0x3f
+
+typedef struct
+{
+       gpointer lpBaseOfDll;
+       guint32 SizeOfImage;
+       gpointer EntryPoint;
+} WapiModuleInfo;
+
+#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
+
+#define IMAGE_DIRECTORY_ENTRY_EXPORT   0
+#define IMAGE_DIRECTORY_ENTRY_IMPORT   1
+#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
+#define IMAGE_DIRECTORY_ENTRY_EXCEPTION        3
+#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
+#define IMAGE_DIRECTORY_ENTRY_BASERELOC        5
+#define IMAGE_DIRECTORY_ENTRY_DEBUG    6
+#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT        7
+#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE     7
+#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR        8
+#define IMAGE_DIRECTORY_ENTRY_TLS      9
+#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG      10
+#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT     11
+#define IMAGE_DIRECTORY_ENTRY_IAT      12
+#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT     13
+#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR   14
+
+#define IMAGE_SIZEOF_SHORT_NAME        8
+
+#define IMAGE_RESOURCE_NAME_IS_STRING          0x80000000
+#define IMAGE_RESOURCE_DATA_IS_DIRECTORY       0x80000000
+
+#if G_BYTE_ORDER != G_LITTLE_ENDIAN
+#define IMAGE_DOS_SIGNATURE    0x4d5a
+#define IMAGE_NT_SIGNATURE     0x50450000
+#define IMAGE_NT_OPTIONAL_HDR32_MAGIC  0xb10
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC  0xb20
+#else
+#define IMAGE_DOS_SIGNATURE    0x5a4d
+#define IMAGE_NT_SIGNATURE     0x00004550
+#define IMAGE_NT_OPTIONAL_HDR32_MAGIC  0x10b
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC  0x20b
+#endif
+
+typedef struct
+{
+       guint16 e_magic;
+       guint16 e_cblp;
+       guint16 e_cp;
+       guint16 e_crlc;
+       guint16 e_cparhdr;
+       guint16 e_minalloc;
+       guint16 e_maxalloc;
+       guint16 e_ss;
+       guint16 e_sp;
+       guint16 e_csum;
+       guint16 e_ip;
+       guint16 e_cs;
+       guint16 e_lfarlc;
+       guint16 e_ovno;
+       guint16 e_res[4];
+       guint16 e_oemid;
+       guint16 e_oeminfo;
+       guint16 e_res2[10];
+       guint32 e_lfanew;
+} WapiImageDosHeader;
+
+typedef struct
+{
+       guint16 Machine;
+       guint16 NumberOfSections;
+       guint32 TimeDateStamp;
+       guint32 PointerToSymbolTable;
+       guint32 NumberOfSymbols;
+       guint16 SizeOfOptionalHeader;
+       guint16 Characteristics;
+} WapiImageFileHeader;
+
+typedef struct
+{
+       guint32 VirtualAddress;
+       guint32 Size;
+} WapiImageDataDirectory;
+
+typedef struct
+{
+       guint16 Magic;
+       guint8 MajorLinkerVersion;
+       guint8 MinorLinkerVersion;
+       guint32 SizeOfCode;
+       guint32 SizeOfInitializedData;
+       guint32 SizeOfUninitializedData;
+       guint32 AddressOfEntryPoint;
+       guint32 BaseOfCode;
+       guint32 BaseOfData;
+       guint32 ImageBase;
+       guint32 SectionAlignment;
+       guint32 FileAlignment;
+       guint16 MajorOperatingSystemVersion;
+       guint16 MinorOperatingSystemVersion;
+       guint16 MajorImageVersion;
+       guint16 MinorImageVersion;
+       guint16 MajorSubsystemVersion;
+       guint16 MinorSubsystemVersion;
+       guint32 Win32VersionValue;
+       guint32 SizeOfImage;
+       guint32 SizeOfHeaders;
+       guint32 CheckSum;
+       guint16 Subsystem;
+       guint16 DllCharacteristics;
+       guint32 SizeOfStackReserve;
+       guint32 SizeOfStackCommit;
+       guint32 SizeOfHeapReserve;
+       guint32 SizeOfHeapCommit;
+       guint32 LoaderFlags;
+       guint32 NumberOfRvaAndSizes;
+       WapiImageDataDirectory DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} WapiImageOptionalHeader32;
+
+typedef struct
+{
+       guint16 Magic;
+       guint8 MajorLinkerVersion;
+       guint8 MinorLinkerVersion;
+       guint32 SizeOfCode;
+       guint32 SizeOfInitializedData;
+       guint32 SizeOfUninitializedData;
+       guint32 AddressOfEntryPoint;
+       guint32 BaseOfCode;
+       guint64 ImageBase;
+       guint32 SectionAlignment;
+       guint32 FileAlignment;
+       guint16 MajorOperatingSystemVersion;
+       guint16 MinorOperatingSystemVersion;
+       guint16 MajorImageVersion;
+       guint16 MinorImageVersion;
+       guint16 MajorSubsystemVersion;
+       guint16 MinorSubsystemVersion;
+       guint32 Win32VersionValue;
+       guint32 SizeOfImage;
+       guint32 SizeOfHeaders;
+       guint32 CheckSum;
+       guint16 Subsystem;
+       guint16 DllCharacteristics;
+       guint64 SizeOfStackReserve;
+       guint64 SizeOfStackCommit;
+       guint64 SizeOfHeapReserve;
+       guint64 SizeOfHeapCommit;
+       guint32 LoaderFlags;
+       guint32 NumberOfRvaAndSizes;
+       WapiImageDataDirectory DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} WapiImageOptionalHeader64;
+
+#if SIZEOF_VOID_P == 8
+typedef WapiImageOptionalHeader64      WapiImageOptionalHeader;
+#else
+typedef WapiImageOptionalHeader32      WapiImageOptionalHeader;
+#endif
+
+typedef struct
+{
+       guint32 Signature;
+       WapiImageFileHeader FileHeader;
+       WapiImageOptionalHeader32 OptionalHeader;
+} WapiImageNTHeaders32;
+
+typedef struct
+{
+       guint32 Signature;
+       WapiImageFileHeader FileHeader;
+       WapiImageOptionalHeader64 OptionalHeader;
+} WapiImageNTHeaders64;
+
+#if SIZEOF_VOID_P == 8
+typedef WapiImageNTHeaders64   WapiImageNTHeaders;
+#else
+typedef WapiImageNTHeaders32   WapiImageNTHeaders;
+#endif
+
+typedef struct
+{
+       guint8 Name[IMAGE_SIZEOF_SHORT_NAME];
+       union
+       {
+               guint32 PhysicalAddress;
+               guint32 VirtualSize;
+       } Misc;
+       guint32 VirtualAddress;
+       guint32 SizeOfRawData;
+       guint32 PointerToRawData;
+       guint32 PointerToRelocations;
+       guint32 PointerToLinenumbers;
+       guint16 NumberOfRelocations;
+       guint16 NumberOfLinenumbers;
+       guint32 Characteristics;
+} WapiImageSectionHeader;
+
+#define IMAGE_FIRST_SECTION(header) ((WapiImageSectionHeader *)((gsize)(header) + G_STRUCT_OFFSET (WapiImageNTHeaders, OptionalHeader) + GUINT16_FROM_LE (((WapiImageNTHeaders *)(header))->FileHeader.SizeOfOptionalHeader)))
+
+#define _WAPI_IMAGE_FIRST_SECTION32(header) ((WapiImageSectionHeader *)((gsize)(header) + G_STRUCT_OFFSET (WapiImageNTHeaders32, OptionalHeader) + GUINT16_FROM_LE (((WapiImageNTHeaders32 *)(header))->FileHeader.SizeOfOptionalHeader)))
+
+#define RT_CURSOR      0x01
+#define RT_BITMAP      0x02
+#define RT_ICON                0x03
+#define RT_MENU                0x04
+#define RT_DIALOG      0x05
+#define RT_STRING      0x06
+#define RT_FONTDIR     0x07
+#define RT_FONT                0x08
+#define RT_ACCELERATOR 0x09
+#define RT_RCDATA      0x0a
+#define RT_MESSAGETABLE        0x0b
+#define RT_GROUP_CURSOR        0x0c
+#define RT_GROUP_ICON  0x0e
+#define RT_VERSION     0x10
+#define RT_DLGINCLUDE  0x11
+#define RT_PLUGPLAY    0x13
+#define RT_VXD         0x14
+#define RT_ANICURSOR   0x15
+#define RT_ANIICON     0x16
+#define RT_HTML                0x17
+#define RT_MANIFEST    0x18
+
+typedef struct
+{
+       guint32 Characteristics;
+       guint32 TimeDateStamp;
+       guint16 MajorVersion;
+       guint16 MinorVersion;
+       guint16 NumberOfNamedEntries;
+       guint16 NumberOfIdEntries;
+} WapiImageResourceDirectory;
+
+typedef struct
+{
+       union 
+       {
+               struct 
+               {
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+                       guint32 NameIsString:1;
+                       guint32 NameOffset:31;
+#else
+                       guint32 NameOffset:31;
+                       guint32 NameIsString:1;
+#endif
+               };
+               guint32 Name;
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+               struct
+               {
+                       guint16 __wapi_big_endian_padding;
+                       guint16 Id;
+               };
+#else
+               guint16 Id;
+#endif
+       };
+       union
+       {
+               guint32 OffsetToData;
+               struct 
+               {
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+                       guint32 DataIsDirectory:1;
+                       guint32 OffsetToDirectory:31;
+#else
+                       guint32 OffsetToDirectory:31;
+                       guint32 DataIsDirectory:1;
+#endif
+               };
+       };
+} WapiImageResourceDirectoryEntry;
+
+typedef struct 
+{
+       guint32 OffsetToData;
+       guint32 Size;
+       guint32 CodePage;
+       guint32 Reserved;
+} WapiImageResourceDataEntry;
+
 #define VS_FF_DEBUG            0x0001
 #define VS_FF_PRERELEASE       0x0002
 #define VS_FF_PATCHED          0x0004
@@ -147,14 +438,15 @@ typedef struct
 #define VFT2_FONT_VECTOR       0x0002
 #define VFT2_FONT_TRUETYPE     0x0003
 
-#if G_BYTE_ORDER != G_LITTLE_ENDIAN
-#define VS_FFI_SIGNATURE       0xbd04effe
-#define VS_FFI_STRUCVERSION    0x00000100
-#else
-#define VS_FFI_SIGNATURE       0xfeef04bd
-#define VS_FFI_STRUCVERSION    0x00010000
-#endif
+#define MAKELANGID(primary,secondary) ((guint16)((secondary << 10) | (primary)))
 
-#define VS_FFI_FILEFLAGSMASK   0x3f
+extern guint32 GetFileVersionInfoSize (gunichar2 *filename, guint32 *handle);
+extern gboolean GetFileVersionInfo (gunichar2 *filename, guint32 handle,
+                                   guint32 len, gpointer data);
+extern gboolean VerQueryValue (gconstpointer datablock,
+                              const gunichar2 *subblock, gpointer *buffer,
+                              guint32 *len);
+extern guint32 VerLanguageName (guint32 lang, gunichar2 *lang_out,
+                               guint32 lang_len);
 
 #endif /* _WAPI_VERSIONINFO_H_ */