X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fio-layer%2Fversioninfo.h;h=85c629f61ab89ea4e435886bfa6b0d29a69372c0;hb=9e37326b69b8e8fdec66a9c517106bf867d3a622;hp=823ababc74a0d0737127c1e0e672a5d12cc9362b;hpb=75df74a96c33af7a99e16e4281272f1b67334a48;p=mono.git diff --git a/mono/io-layer/versioninfo.h b/mono/io-layer/versioninfo.h index 823ababc74a..85c629f61ab 100644 --- a/mono/io-layer/versioninfo.h +++ b/mono/io-layer/versioninfo.h @@ -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_ */