From: Vijay Kiran Kamuju infyquest@gmail.com
--- include/Makefile.in | 1 + include/msdelta.h | 169 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 include/msdelta.h
diff --git a/include/Makefile.in b/include/Makefile.in index d4a166e265c..b73543ab4ec 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -468,6 +468,7 @@ SOURCES = \ msdaguid.h \ msdasc.idl \ msdasql.h \ + msdelta.h \ mshtmcid.h \ mshtmdid.h \ mshtmhst.idl \ diff --git a/include/msdelta.h b/include/msdelta.h new file mode 100644 index 00000000000..d288f60e066 --- /dev/null +++ b/include/msdelta.h @@ -0,0 +1,169 @@ +/* + * Copyright 2024 Vijay Kiran Kamuju + * + * 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 _MSDELTA_H_ +#define _MSDELTA_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <windows.h> +#include <wincrypt.h> + +typedef __int64 DELTA_FILE_TYPE; +typedef __int64 DELTA_FLAG_TYPE; + +#define DELTA_FILE_SIZE_LIMIT 32*1024*1024 +#define DELTA_OPTIONS_SIZE_LIMIT 128*1024*1024 +#define DELTA_MAX_HASH_SIZE 32 + +#define DELTA_FILE_TYPE_RAW (DELTA_FILE_TYPE)0x00000001 +#define DELTA_FILE_TYPE_I386 (DELTA_FILE_TYPE)0x00000002 +#define DELTA_FILE_TYPE_IA64 (DELTA_FILE_TYPE)0x00000004 +#define DELTA_FILE_TYPE_AMD64 (DELTA_FILE_TYPE)0x00000008 +#define DELTA_FILE_TYPE_CLI_I386 (DELTA_FILE_TYPE)0x00000010 +#define DELTA_FILE_TYPE_CLI_AMD64 (DELTA_FILE_TYPE)0x00000020 +#define DELTA_FILE_TYPE_CLI_ARM (DELTA_FILE_TYPE)0x00000040 +#define DELTA_FILE_TYPE_CLI_ARM64 (DELTA_FILE_TYPE)0x00000080 + +#define DELTA_FILE_TYPE_SET_RAW_ONLY DELTA_FILE_TYPE_RAW +#define DELTA_FILE_TYPE_SET_EXECUTABLES_1 DELTA_FILE_TYPE_RAW|DELTA_FILE_TYPE_I386| \ + DELTA_FILE_TYPE_IA64|DELTA_FILE_TYPE_AMD64 +#define DELTA_FILE_TYPE_SET_EXECUTABLES DELTA_FILE_TYPE_SET_EXECUTABLES_1 +#define DELTA_FILE_TYPE_SET_EXECUTABLES_2 DELTA_FILE_TYPE_RAW|DELTA_FILE_TYPE_CLI_I386| \ + DELTA_FILE_TYPE_IA64|DELTA_FILE_TYPE_CLI_AMD64| \ + DELTA_FILE_TYPE_CLI_ARM +#define DELTA_FILE_TYPE_SET_EXECUTABLES_3 DELTA_FILE_TYPE_RAW|DELTA_FILE_TYPE_CLI_I386| \ + DELTA_FILE_TYPE_IA64|DELTA_FILE_TYPE_CLI_AMD64| \ + DELTA_FILE_TYPE_CLI_ARM|DELTA_FILE_TYPE_CLI_ARM64 +#define DELTA_FILE_TYPE_SET_EXECUTABLES_LATEST DELTA_FILE_TYPE_SET_EXECUTABLES_3 + +#define DELTA_FLAG_NONE (DELTA_FLAG_TYPE)0x00000000 +#define DELTA_APPLY_FLAG_ALLOW_PA19 (DELTA_FLAG_TYPE)0x00000001 +#define DELTA_FLAG_E8 (DELTA_FLAG_TYPE)0x00000001 +#define DELTA_FLAG_MARK (DELTA_FLAG_TYPE)0x00000002 +#define DELTA_FLAG_IMPORTS (DELTA_FLAG_TYPE)0x00000004 +#define DELTA_FLAG_EXPORTS (DELTA_FLAG_TYPE)0x00000008 +#define DELTA_FLAG_RESOURCES (DELTA_FLAG_TYPE)0x00000010 +#define DELTA_FLAG_RELOCS (DELTA_FLAG_TYPE)0x00000020 +#define DELTA_FLAG_I386_SMASHLOCK (DELTA_FLAG_TYPE)0x00000040 +#define DELTA_FLAG_I386_JMPS (DELTA_FLAG_TYPE)0x00000080 +#define DELTA_FLAG_I386_CALLS (DELTA_FLAG_TYPE)0x00000100 +#define DELTA_FLAG_AMD64_DISASM (DELTA_FLAG_TYPE)0x00000200 +#define DELTA_FLAG_AMD64_PDATA (DELTA_FLAG_TYPE)0x00000400 +#define DELTA_FLAG_IA64_DISASM (DELTA_FLAG_TYPE)0x00000800 +#define DELTA_FLAG_IA64_PDATA (DELTA_FLAG_TYPE)0x00001000 +#define DELTA_FLAG_UNBIND (DELTA_FLAG_TYPE)0x00002000 +#define DELTA_FLAG_CLI_DISASM (DELTA_FLAG_TYPE)0x00004000 +#define DELTA_FLAG_CLI_METADATA (DELTA_FLAG_TYPE)0x00008000 +#define DELTA_FLAG_CLI_HEADERS (DELTA_FLAG_TYPE)0x00010000 +#define DELTA_FLAG_IGNORE_FILE_SIZE_LIMIT (DELTA_FLAG_TYPE)0x00020000 +#define DELTA_FLAG_IGNORE_OPTIONS_SIZE_LIMIT (DELTA_FLAG_TYPE)0x00040000 +#define DELTA_FLAG_ARM_DISASM (DELTA_FLAG_TYPE)0x00080000 +#define DELTA_FLAG_ARM_PDATA (DELTA_FLAG_TYPE)0x00100000 +#define DELTA_FLAG_CLI4_METADATA (DELTA_FLAG_TYPE)0x00200000 +#define DELTA_FLAG_CLI4_DISASM (DELTA_FLAG_TYPE)0x00400000 +#define DELTA_FLAG_ARM64_DISASM (DELTA_FLAG_TYPE)0x00800000 +#define DELTA_FLAG_ARM64_PDATA (DELTA_FLAG_TYPE)0x01000000 + +#define DELTA_DEFAULT_FLAGS_RAW DELTA_FLAG_NONE +#define DELTA_DEFAULT_FLAGS_I386 DELTA_FLAG_MARK|DELTA_FLAG_IMPORTS| \ + DELTA_FLAG_EXPORTS|DELTA_FLAG_RESOURCES| \ + DELTA_FLAG_RELOCS|DELTA_FLAG_I386_SMASHLOCK| \ + DELTA_FLAG_I386_JMPS|DELTA_FLAG_I386_CALLS| \ + DELTA_FLAG_UNBIND|DELTA_FLAG_CLI_DISASM| \ + DELTA_FLAG_CLI_METADATA +#define DELTA_DEFAULT_FLAGS_IA64 DELTA_FLAG_MARK|DELTA_FLAG_IMPORTS| \ + DELTA_FLAG_EXPORTS|DELTA_FLAG_RESOURCES| \ + DELTA_FLAG_RELOCS|DELTA_FLAG_IA64_DISASM| \ + DELTA_FLAG_IA64_PDATA| DELTA_FLAG_UNBIND| \ + DELTA_FLAG_CLI_DISASM|DELTA_FLAG_CLI_METADATA +#define DELTA_DEFAULT_FLAGS_AMD64 DELTA_FLAG_MARK|DELTA_FLAG_IMPORTS| \ + DELTA_FLAG_EXPORTS|DELTA_FLAG_RESOURCES| \ + DELTA_FLAG_RELOCS|DELTA_FLAG_AMD64_DISASM| \ + DELTA_FLAG_AMD64_PDATA| DELTA_FLAG_UNBIND| \ + DELTA_FLAG_CLI_DISASM|DELTA_FLAG_CLI_METADATA +#define DELTA_CLI4_FLAGS_I386 i DELTA_FLAG_MARK|DELTA_FLAG_IMPORTS| \ + DELTA_FLAG_EXPORTS|DELTA_FLAG_RESOURCES| \ + DELTA_FLAG_RELOCS|DELTA_FLAG_I386_SMASHLOCK| \ + DELTA_FLAG_I386_JMPS|DELTA_FLAG_I386_CALLS| \ + DELTA_FLAG_UNBIND|DELTA_FLAG_CLI4_DISASM| \ + DELTA_FLAG_CLI4_METADATA +#define DELTA_CLI4_FLAGS_AMD64 DELTA_FLAG_MARK|DELTA_FLAG_IMPORTS| \ + DELTA_FLAG_EXPORTS|DELTA_FLAG_RESOURCES| \ + DELTA_FLAG_RELOCS|DELTA_FLAG_AMD64_DISASM| \ + DELTA_FLAG_AMD64_PDATA| DELTA_FLAG_UNBIND| \ + DELTA_FLAG_CLI4_DISASM|DELTA_FLAG_CLI4_METADATA +#define DELTA_CLI4_FLAGS_ARM DELTA_FLAG_MARK|DELTA_FLAG_IMPORTS| \ + DELTA_FLAG_EXPORTS|DELTA_FLAG_RESOURCES| \ + DELTA_FLAG_RELOCS|DELTA_FLAG_ARM_DISASM| \ + DELTA_FLAG_ARM_PDATA| DELTA_FLAG_UNBIND| \ + DELTA_FLAG_CLI4_DISASM|DELTA_FLAG_CLI4_METADATA +#define DELTA_CLI4_FLAGS_ARM64 DELTA_FLAG_MARK|DELTA_FLAG_IMPORTS| \ + DELTA_FLAG_EXPORTS|DELTA_FLAG_RESOURCES| \ + DELTA_FLAG_RELOCS|DELTA_FLAG_ARM64_DISASM| \ + DELTA_FLAG_ARM64_PDATA| DELTA_FLAG_UNBIND| \ + DELTA_FLAG_CLI4_DISASM|DELTA_FLAG_CLI4_METADATA + +typedef struct _DELTA_INPUT +{ + union { + LPCVOID lpcStart; + LPVOID lpStart; + }; + SIZE_T uSize; + BOOL Editable; +} DELTA_INPUT; +typedef DELTA_INPUT *LPDELTA_INPUT; +typedef const DELTA_INPUT *LPCDELTA_INPUT; + +typedef struct _DELTA_OUTPUT +{ + LPVOID lpStart; + SIZE_T uSize; +} DELTA_OUTPUT; +typedef DELTA_OUTPUT *LPDELTA_OUTPUT; +typedef const DELTA_OUTPUT *LPCDELTA_OUTPUT; + +typedef struct _DELTA_HASH +{ + DWORD HashSize; + UCHAR HashValue[DELTA_MAX_HASH_SIZE]; +} DELTA_HASH; +typedef DELTA_HASH *LPDELTA_HASH; +typedef const DELTA_HASH *LPCDELTA_HASH; + +typedef struct _DELTA_HEADER_INFO +{ + DELTA_FILE_TYPE FileTypeSet; + DELTA_FILE_TYPE FileType; + DELTA_FLAG_TYPE Flags; + SIZE_T TargetSize; + FILETIME TargetFileTime; + ALG_ID TargetHashAlgId; + DELTA_HASH TargetHash; +} DELTA_HEADER_INFO; +typedef DELTA_HEADER_INFO *LPDELTA_HEADER_INFO; +typedef const DELTA_HEADER_INFO *LPCDELTA_HEADER_INFO; + +#ifdef __cplusplus +} +#endif + +#endif /* _MSDELTA_H_ */