From 08803bd13627fdb7a11dc92833ea2696669cbc0c Mon Sep 17 00:00:00 2001 From: Vijay Kiran Kamuju Date: Mon, 11 Dec 2023 12:15:53 +0100 Subject: [PATCH] include: Add msdelta header file. --- 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 077cb9eaccf..3e05d259328 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -470,6 +470,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..aa7161c6b0a --- /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 +#include + +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 (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_ */