summaryrefslogtreecommitdiff
path: root/src/vm/assemblynativeresource.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/assemblynativeresource.h')
-rw-r--r--src/vm/assemblynativeresource.h134
1 files changed, 134 insertions, 0 deletions
diff --git a/src/vm/assemblynativeresource.h b/src/vm/assemblynativeresource.h
new file mode 100644
index 0000000000..c897a55605
--- /dev/null
+++ b/src/vm/assemblynativeresource.h
@@ -0,0 +1,134 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+////////////////////////////////////////////////////////////////////////////////
+// ResFile.H
+// This handles Win32Resources
+//
+
+
+
+#pragma once
+
+class CFile;
+
+class Win32Res {
+public:
+ Win32Res();
+ ~Win32Res();
+
+ VOID SetInfo(LPCWSTR szFile,
+ LPCWSTR szTitle,
+ LPCWSTR szIconName,
+ LPCWSTR szDescription,
+ LPCWSTR szCopyright,
+ LPCWSTR szTrademark,
+ LPCWSTR szCompany,
+ LPCWSTR szProduct,
+ LPCWSTR szProductVersion,
+ LPCWSTR szFileVersion,
+ LCID lcid,
+ BOOL fDLL);
+ VOID MakeResFile(const void **pData, DWORD *pcbData);
+
+private:
+#define PadKeyLen(cb) ((((cb) + 5) & ~3) - 2)
+#define PadValLen(cb) ((cb + 3) & ~3)
+#define KEYSIZE(sz) (PadKeyLen(sizeof(sz)*sizeof(WCHAR))/sizeof(WCHAR))
+#define KEYBYTES(sz) (KEYSIZE(sz)*sizeof(WCHAR))
+#define HDRSIZE (3 * sizeof(WORD))
+
+ static WORD SizeofVerString(LPCWSTR lpszKey, LPCWSTR lpszValue);
+ VOID WriteVerString(LPCWSTR lpszKey, LPCWSTR lpszValue);
+ VOID WriteVerResource();
+ VOID WriteIconResource();
+
+ VOID Write(LPCVOID pData, size_t len);
+ LPCWSTR m_szFile;
+ LPCWSTR m_Icon;
+ enum {
+ v_Description,
+ v_Title,
+ v_Copyright,
+ v_Trademark,
+ v_Product,
+ v_ProductVersion,
+ v_Company,
+ v_FileVersion,
+ NUM_VALUES
+ };
+ LPCWSTR m_Values[NUM_VALUES];
+ ULONG m_Version[4];
+ int m_lcid;
+ BOOL m_fDll;
+ PBYTE m_pData;
+ PBYTE m_pCur;
+ PBYTE m_pEnd;
+
+
+ // RES file structs (borrowed from MSDN)
+#pragma pack( push)
+#pragma pack(1)
+ struct RESOURCEHEADER {
+ DWORD DataSize;
+ DWORD HeaderSize;
+ WORD Magic1;
+ WORD Type;
+ WORD Magic2;
+ WORD Name;
+ DWORD DataVersion;
+ WORD MemoryFlags;
+ WORD LanguageId;
+ DWORD Version;
+ DWORD Characteristics;
+ };
+
+ struct ICONDIRENTRY {
+ BYTE bWidth;
+ BYTE bHeight;
+ BYTE bColorCount;
+ BYTE bReserved;
+ WORD wPlanes;
+ WORD wBitCount;
+ DWORD dwBytesInRes;
+ DWORD dwImageOffset;
+ };
+
+ struct ICONRESDIR {
+ BYTE Width; // = ICONDIRENTRY.bWidth;
+ BYTE Height; // = ICONDIRENTRY.bHeight;
+ BYTE ColorCount; // = ICONDIRENTRY.bColorCount;
+ BYTE reserved; // = ICONDIRENTRY.bReserved;
+ WORD Planes; // = ICONDIRENTRY.wPlanes;
+ WORD BitCount; // = ICONDIRENTRY.wBitCount;
+ DWORD BytesInRes; // = ICONDIRENTRY.dwBytesInRes;
+ WORD IconId; // = RESOURCEHEADER.Name
+ };
+ struct EXEVERRESOURCE {
+ WORD cbRootBlock; // size of whole resource
+ WORD cbRootValue; // size of VS_FIXEDFILEINFO structure
+ WORD fRootText; // root is text?
+ WCHAR szRootKey[KEYSIZE("VS_VERSION_INFO")]; // Holds "VS_VERSION_INFO"
+ VS_FIXEDFILEINFO vsFixed; // fixed information.
+ WORD cbVarBlock; // size of VarFileInfo block
+ WORD cbVarValue; // always 0
+ WORD fVarText; // VarFileInfo is text?
+ WCHAR szVarKey[KEYSIZE("VarFileInfo")]; // Holds "VarFileInfo"
+ WORD cbTransBlock; // size of Translation block
+ WORD cbTransValue; // size of Translation value
+ WORD fTransText; // Translation is text?
+ WCHAR szTransKey[KEYSIZE("Translation")]; // Holds "Translation"
+ WORD langid; // language id
+ WORD codepage; // codepage id
+ WORD cbStringBlock; // size of StringFileInfo block
+ WORD cbStringValue; // always 0
+ WORD fStringText; // StringFileInfo is text?
+ WCHAR szStringKey[KEYSIZE("StringFileInfo")]; // Holds "StringFileInfo"
+ WORD cbLangCpBlock; // size of language/codepage block
+ WORD cbLangCpValue; // always 0
+ WORD fLangCpText; // LangCp is text?
+ WCHAR szLangCpKey[KEYSIZE("12345678")]; // Holds hex version of language/codepage
+ // followed by strings
+ };
+#pragma pack( pop)
+};