/* * fusion private definitions * * Copyright 2008 James Hawkins * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef __WINE_FUSION_PRIVATE__ #define __WINE_FUSION_PRIVATE__ #include <stdarg.h> #include "windef.h" #include "winbase.h" #include "winuser.h" #include "winver.h" #include <pshpack1.h> typedef struct { ULONG Signature; USHORT MajorVersion; USHORT MinorVersion; ULONG Reserved; ULONG VersionLength; LPSTR Version; BYTE Flags; WORD Streams; } METADATAHDR; typedef struct { DWORD Offset; DWORD Size; } METADATASTREAMHDR; typedef struct { DWORD Reserved1; BYTE MajorVersion; BYTE MinorVersion; BYTE HeapOffsetSizes; BYTE Reserved2; LARGE_INTEGER MaskValid; LARGE_INTEGER MaskSorted; } METADATATABLESHDR; typedef struct { WORD Generation; WORD Name; WORD Mvid; WORD EncId; WORD EncBaseId; } MODULETABLE; typedef struct { DWORD Flags; WORD Name; WORD Namespace; WORD Extends; WORD FieldList; WORD MethodList; } TYPEDEFTABLE; typedef struct { WORD ResolutionScope; WORD Name; WORD Namespace; } TYPEREFTABLE; typedef struct { WORD Flags; WORD Name; WORD Signature; } FIELDTABLE; typedef struct { DWORD HashAlgId; WORD MajorVersion; WORD MinorVersion; WORD BuildNumber; WORD RevisionNumber; DWORD Flags; WORD PublicKey; WORD Name; WORD Culture; } ASSEMBLYTABLE; typedef struct { DWORD Offset; DWORD Flags; WORD Name; WORD Implementation; } MANIFESTRESTABLE; typedef struct { DWORD RVA; WORD ImplFlags; WORD Flags; WORD Name; WORD Signature; WORD ParamList; } METHODDEFTABLE; typedef struct { WORD Flags; WORD Sequence; WORD Name; } PARAMTABLE; typedef struct { WORD Class; WORD Interface; } INTERFACEIMPLTABLE; typedef struct { WORD Class; WORD Name; WORD Signature; } MEMBERREFTABLE; typedef struct { BYTE Type; BYTE Reserved; WORD Parent; WORD Value; } CONSTANTTABLE; typedef struct { WORD Parent; WORD Type; WORD Value; } CUSTOMATTRIBUTETABLE; typedef struct { WORD Parent; WORD NativeType; } FIELDMARSHALTABLE; typedef struct { WORD Action; WORD Parent; WORD PermissionSet; } DECLSECURITYTABLE; typedef struct { WORD PackingSize; DWORD ClassSize; WORD Parent; } CLASSLAYOUTTABLE; typedef struct { DWORD Offset; WORD Field; } FIELDLAYOUTTABLE; typedef struct { WORD Signature; } STANDALONESIGTABLE; typedef struct { WORD Parent; WORD EventList; } EVENTMAPTABLE; typedef struct { WORD EventFlags; WORD Name; WORD EventType; } EVENTTABLE; typedef struct { WORD Parent; WORD PropertyList; } PROPERTYMAPTABLE; typedef struct { WORD Flags; WORD Name; WORD Type; } PROPERTYTABLE; typedef struct { WORD Semantics; WORD Method; WORD Association; } METHODSEMANTICSTABLE; typedef struct { WORD Class; WORD MethodBody; WORD MethodDeclaration; } METHODIMPLTABLE; typedef struct { WORD Name; } MODULEREFTABLE; typedef struct { WORD Signature; } TYPESPECTABLE; typedef struct { WORD MappingFlags; WORD MemberForwarded; WORD ImportName; WORD ImportScope; } IMPLMAPTABLE; typedef struct { DWORD RVA; WORD Field; } FIELDRVATABLE; typedef struct { DWORD Processor; } ASSEMBLYPROCESSORTABLE; typedef struct { DWORD OSPlatformID; DWORD OSMajorVersion; DWORD OSMinorVersion; } ASSEMBLYOSTABLE; typedef struct { WORD MajorVersion; WORD MinorVersion; WORD BuildNumber; WORD RevisionNumber; DWORD Flags; WORD PublickKeyOrToken; WORD Name; WORD Culture; WORD HashValue; } ASSEMBLYREFTABLE; typedef struct { DWORD Processor; WORD AssemblyRef; } ASSEMBLYREFPROCESSORTABLE; typedef struct { DWORD OSPlatformId; DWORD OSMajorVersion; DWORD OSMinorVersion; WORD AssemblyRef; } ASSEMBLYREFOSTABLE; typedef struct { DWORD Flags; WORD Name; WORD HashValue; } FILETABLE; typedef struct { DWORD Flags; DWORD TypeDefId; WORD TypeName; WORD TypeNameSpace; WORD Implementation; } EXPORTEDTYPETABLE; typedef struct { WORD NestedClass; WORD EnclosingClass; } NESTEDCLASSTABLE; typedef struct { WORD Number; WORD Flags; } GENERICPARAMTABLE; typedef struct { WORD MethodDef; WORD Instantiation; } METHODSPECTABLE; typedef struct { WORD Owner; WORD Constraint; } GENERICPARAMCONSTRAINTTABLE; typedef struct { DWORD ImportLookupTable; DWORD DateTimeStamp; DWORD ForwarderChain; DWORD Name; DWORD ImportAddressTable; BYTE pad[20]; } IMPORTTABLE; typedef struct { DWORD HintNameTableRVA; BYTE pad[8]; } IMPORTLOOKUPTABLE; typedef struct { WORD Hint; BYTE Name[12]; BYTE Module[12]; DWORD Reserved; WORD EntryPoint; DWORD RVA; } HINTNAMETABLE; typedef struct { DWORD PageRVA; DWORD Size; DWORD Relocation; } RELOCATION; typedef struct { WORD wLength; WORD wValueLength; WORD wType; WCHAR szKey[17]; VS_FIXEDFILEINFO Value; } VS_VERSIONINFO; typedef struct { WORD wLength; WORD wValueLength; WORD wType; WCHAR szKey[13]; } VARFILEINFO; typedef struct { WORD wLength; WORD wValueLength; WORD wType; WCHAR szKey[13]; DWORD Value; } VAR; typedef struct { WORD wLength; WORD wValueLength; WORD wType; WCHAR szKey[15]; } STRINGFILEINFO; typedef struct { WORD wLength; WORD wValueLength; WORD wType; WCHAR szKey[9]; } STRINGTABLE; typedef struct { WORD wLength; WORD wValueLength; WORD wType; } STRINGHDR; typedef struct { DWORD Size; DWORD Signature; DWORD HeaderVersion; DWORD SkipData; BYTE Data[168]; } RESOURCE; #include <poppack.h> struct tagASSEMBLY; typedef struct tagASSEMBLY ASSEMBLY; HRESULT assembly_create(ASSEMBLY **out, LPCWSTR file) DECLSPEC_HIDDEN; HRESULT assembly_release(ASSEMBLY *assembly) DECLSPEC_HIDDEN; HRESULT assembly_get_name(ASSEMBLY *assembly, LPWSTR *name) DECLSPEC_HIDDEN; HRESULT assembly_get_path(const ASSEMBLY *assembly, LPWSTR *path) DECLSPEC_HIDDEN; HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version) DECLSPEC_HIDDEN; PEKIND assembly_get_architecture(ASSEMBLY *assembly) DECLSPEC_HIDDEN; HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token) DECLSPEC_HIDDEN; HRESULT assembly_get_runtime_version(ASSEMBLY *assembly, LPSTR *version) DECLSPEC_HIDDEN; HRESULT assembly_get_external_files(ASSEMBLY *assembly, LPWSTR **files, DWORD *count) DECLSPEC_HIDDEN; extern HRESULT IAssemblyName_SetPath(IAssemblyName *iface, LPCWSTR path) DECLSPEC_HIDDEN; extern HRESULT IAssemblyName_GetPath(IAssemblyName *iface, LPWSTR buf, ULONG *len) DECLSPEC_HIDDEN; static inline LPWSTR strdupW(LPCWSTR src) { LPWSTR dest; if (!src) return NULL; dest = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(src) + 1) * sizeof(WCHAR)); if (dest) lstrcpyW(dest, src); return dest; } #define BYTES_PER_TOKEN 8 #define CHARS_PER_BYTE 2 #define TOKEN_LENGTH (BYTES_PER_TOKEN * CHARS_PER_BYTE + 1) static inline void token_to_str(BYTE *bytes, LPWSTR str) { DWORD i; static const WCHAR hexval[] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; for(i = 0; i < BYTES_PER_TOKEN; i++) { str[i * 2] = hexval[((bytes[i] >> 4) & 0xF)]; str[i * 2 + 1] = hexval[(bytes[i]) & 0x0F]; } str[i * 2] = 0; } #endif /* __WINE_FUSION_PRIVATE__ */