| 1 |
/** |
| 2 |
* This file is part of the mingw-w64 runtime package. |
| 3 |
* No warranty is given; refer to the file DISCLAIMER within this package. |
| 4 |
*/ |
| 5 |
#ifndef _PATCHAPI_H_ |
| 6 |
#define _PATCHAPI_H_ |
| 7 |
|
| 8 |
#include <_mingw_unicode.h> |
| 9 |
#include <winapifamily.h> |
| 10 |
|
| 11 |
#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) |
| 12 |
|
| 13 |
#ifdef __cplusplus |
| 14 |
extern "C" { |
| 15 |
#endif |
| 16 |
|
| 17 |
#ifdef IMPORTING_PATCHAPI_DLL |
| 18 |
#define PATCHAPI WINAPI __declspec(dllimport) |
| 19 |
#else |
| 20 |
#define PATCHAPI WINAPI |
| 21 |
#endif |
| 22 |
|
| 23 |
#define PATCH_OPTION_USE_BEST 0x0 |
| 24 |
#define PATCH_OPTION_USE_LZX_A 0x1 |
| 25 |
#define PATCH_OPTION_USE_LZX_B 0x2 |
| 26 |
#define PATCH_OPTION_USE_LZX_BEST 0x3 |
| 27 |
#define PATCH_OPTION_USE_LZX_LARGE 0x4 |
| 28 |
|
| 29 |
#define PATCH_OPTION_NO_BINDFIX 0x00010000 |
| 30 |
#define PATCH_OPTION_NO_LOCKFIX 0x00020000 |
| 31 |
#define PATCH_OPTION_NO_REBASE 0x00040000 |
| 32 |
#define PATCH_OPTION_FAIL_IF_SAME_FILE 0x00080000 |
| 33 |
#define PATCH_OPTION_FAIL_IF_BIGGER 0x00100000 |
| 34 |
#define PATCH_OPTION_NO_CHECKSUM 0x00200000 |
| 35 |
#define PATCH_OPTION_NO_RESTIMEFIX 0x00400000 |
| 36 |
#define PATCH_OPTION_NO_TIMESTAMP 0x00800000 |
| 37 |
#define PATCH_OPTION_SIGNATURE_MD5 0x01000000 |
| 38 |
#define PATCH_OPTION_INTERLEAVE_FILES 0x40000000 |
| 39 |
#define PATCH_OPTION_RESERVED1 0x80000000 |
| 40 |
|
| 41 |
#define PATCH_OPTION_VALID_FLAGS 0xc0ff0007 |
| 42 |
|
| 43 |
#define PATCH_SYMBOL_NO_IMAGEHLP 0x00000001 |
| 44 |
#define PATCH_SYMBOL_NO_FAILURES 0x00000002 |
| 45 |
#define PATCH_SYMBOL_UNDECORATED_TOO 0x00000004 |
| 46 |
#define PATCH_SYMBOL_RESERVED1 0x80000000 |
| 47 |
|
| 48 |
#define PATCH_TRANSFORM_PE_RESOURCE_2 0x00000100 |
| 49 |
#define PATCH_TRANSFORM_PE_IRELOC_2 0x00000200 |
| 50 |
|
| 51 |
#define APPLY_OPTION_FAIL_IF_EXACT 0x00000001 |
| 52 |
#define APPLY_OPTION_FAIL_IF_CLOSE 0x00000002 |
| 53 |
#define APPLY_OPTION_TEST_ONLY 0x00000004 |
| 54 |
#define APPLY_OPTION_VALID_FLAGS 0x00000007 |
| 55 |
|
| 56 |
#define ERROR_PATCH_ENCODE_FAILURE 0xC00E3101 |
| 57 |
#define ERROR_PATCH_INVALID_OPTIONS 0xC00E3102 |
| 58 |
#define ERROR_PATCH_SAME_FILE 0xC00E3103 |
| 59 |
#define ERROR_PATCH_RETAIN_RANGES_DIFFER 0xC00E3104 |
| 60 |
#define ERROR_PATCH_BIGGER_THAN_COMPRESSED 0xC00E3105 |
| 61 |
#define ERROR_PATCH_IMAGEHLP_FAILURE 0xC00E3106 |
| 62 |
|
| 63 |
#define ERROR_PATCH_DECODE_FAILURE 0xC00E4101 |
| 64 |
#define ERROR_PATCH_CORRUPT 0xC00E4102 |
| 65 |
#define ERROR_PATCH_NEWER_FORMAT 0xC00E4103 |
| 66 |
#define ERROR_PATCH_WRONG_FILE 0xC00E4104 |
| 67 |
#define ERROR_PATCH_NOT_NECESSARY 0xC00E4105 |
| 68 |
#define ERROR_PATCH_NOT_AVAILABLE 0xC00E4106 |
| 69 |
|
| 70 |
typedef WINBOOL (CALLBACK PATCH_PROGRESS_CALLBACK)(PVOID CallbackContext,ULONG CurrentPosition,ULONG MaximumPosition); |
| 71 |
typedef PATCH_PROGRESS_CALLBACK *PPATCH_PROGRESS_CALLBACK; |
| 72 |
typedef WINBOOL (CALLBACK PATCH_SYMLOAD_CALLBACK)(ULONG WhichFile,LPCSTR SymbolFileName,ULONG SymType,ULONG SymbolFileCheckSum,ULONG SymbolFileTimeDate,ULONG ImageFileCheckSum,ULONG ImageFileTimeDate,PVOID CallbackContext); |
| 73 |
typedef PATCH_SYMLOAD_CALLBACK *PPATCH_SYMLOAD_CALLBACK; |
| 74 |
|
| 75 |
typedef struct _PATCH_IGNORE_RANGE { |
| 76 |
ULONG OffsetInOldFile; |
| 77 |
ULONG LengthInBytes; |
| 78 |
} PATCH_IGNORE_RANGE,*PPATCH_IGNORE_RANGE; |
| 79 |
|
| 80 |
typedef struct _PATCH_RETAIN_RANGE { |
| 81 |
ULONG OffsetInOldFile; |
| 82 |
ULONG LengthInBytes; |
| 83 |
ULONG OffsetInNewFile; |
| 84 |
} PATCH_RETAIN_RANGE,*PPATCH_RETAIN_RANGE; |
| 85 |
|
| 86 |
typedef struct _PATCH_OLD_FILE_INFO_A { |
| 87 |
ULONG SizeOfThisStruct; |
| 88 |
LPCSTR OldFileName; |
| 89 |
ULONG IgnoreRangeCount; |
| 90 |
PPATCH_IGNORE_RANGE IgnoreRangeArray; |
| 91 |
ULONG RetainRangeCount; |
| 92 |
PPATCH_RETAIN_RANGE RetainRangeArray; |
| 93 |
} PATCH_OLD_FILE_INFO_A,*PPATCH_OLD_FILE_INFO_A; |
| 94 |
|
| 95 |
typedef struct _PATCH_OLD_FILE_INFO_W { |
| 96 |
ULONG SizeOfThisStruct; |
| 97 |
LPCWSTR OldFileName; |
| 98 |
ULONG IgnoreRangeCount; |
| 99 |
PPATCH_IGNORE_RANGE IgnoreRangeArray; |
| 100 |
ULONG RetainRangeCount; |
| 101 |
PPATCH_RETAIN_RANGE RetainRangeArray; |
| 102 |
} PATCH_OLD_FILE_INFO_W,*PPATCH_OLD_FILE_INFO_W; |
| 103 |
|
| 104 |
typedef struct _PATCH_OLD_FILE_INFO_H { |
| 105 |
ULONG SizeOfThisStruct; |
| 106 |
HANDLE OldFileHandle; |
| 107 |
ULONG IgnoreRangeCount; |
| 108 |
PPATCH_IGNORE_RANGE IgnoreRangeArray; |
| 109 |
ULONG RetainRangeCount; |
| 110 |
PPATCH_RETAIN_RANGE RetainRangeArray; |
| 111 |
} PATCH_OLD_FILE_INFO_H,*PPATCH_OLD_FILE_INFO_H; |
| 112 |
|
| 113 |
typedef struct _PATCH_OLD_FILE_INFO { |
| 114 |
ULONG SizeOfThisStruct; |
| 115 |
__C89_NAMELESS union { |
| 116 |
LPCSTR OldFileNameA; |
| 117 |
LPCWSTR OldFileNameW; |
| 118 |
HANDLE OldFileHandle; |
| 119 |
}; |
| 120 |
ULONG IgnoreRangeCount; |
| 121 |
PPATCH_IGNORE_RANGE IgnoreRangeArray; |
| 122 |
ULONG RetainRangeCount; |
| 123 |
PPATCH_RETAIN_RANGE RetainRangeArray; |
| 124 |
} PATCH_OLD_FILE_INFO,*PPATCH_OLD_FILE_INFO; |
| 125 |
|
| 126 |
typedef struct _PATCH_INTERLEAVE_MAP { |
| 127 |
ULONG CountRanges; |
| 128 |
struct { |
| 129 |
ULONG OldOffset; |
| 130 |
ULONG OldLength; |
| 131 |
ULONG NewLength; |
| 132 |
} Range[1]; |
| 133 |
} PATCH_INTERLEAVE_MAP, *PPATCH_INTERLEAVE_MAP; |
| 134 |
|
| 135 |
typedef struct _PATCH_OPTION_DATA { |
| 136 |
ULONG SizeOfThisStruct; |
| 137 |
ULONG SymbolOptionFlags; |
| 138 |
LPCSTR NewFileSymbolPath; |
| 139 |
LPCSTR *OldFileSymbolPathArray; |
| 140 |
ULONG ExtendedOptionFlags; |
| 141 |
PPATCH_SYMLOAD_CALLBACK SymLoadCallback; |
| 142 |
PVOID SymLoadContext; |
| 143 |
PPATCH_INTERLEAVE_MAP *InterleaveMapArray; |
| 144 |
ULONG MaxLzxWindowSize; |
| 145 |
} PATCH_OPTION_DATA,*PPATCH_OPTION_DATA; |
| 146 |
|
| 147 |
WINBOOL PATCHAPI CreatePatchFileA(LPCSTR OldFileName,LPCSTR NewFileName,LPCSTR PatchFileName,ULONG OptionFlags,PPATCH_OPTION_DATA OptionData); |
| 148 |
WINBOOL PATCHAPI CreatePatchFileW(LPCWSTR OldFileName,LPCWSTR NewFileName,LPCWSTR PatchFileName,ULONG OptionFlags,PPATCH_OPTION_DATA OptionData); |
| 149 |
#define CreatePatchFile __MINGW_NAME_AW(CreatePatchFile) |
| 150 |
|
| 151 |
WINBOOL PATCHAPI CreatePatchFileExA(ULONG OldFileCount,PPATCH_OLD_FILE_INFO_A OldFileInfoArray,LPCSTR NewFileName,LPCSTR PatchFileName,ULONG OptionFlags,PPATCH_OPTION_DATA OptionData,PPATCH_PROGRESS_CALLBACK ProgressCallback,PVOID CallbackContext); |
| 152 |
WINBOOL PATCHAPI CreatePatchFileExW(ULONG OldFileCount,PPATCH_OLD_FILE_INFO_W OldFileInfoArray,LPCWSTR NewFileName,LPCWSTR PatchFileName,ULONG OptionFlags,PPATCH_OPTION_DATA OptionData,PPATCH_PROGRESS_CALLBACK ProgressCallback,PVOID CallbackContext); |
| 153 |
#define CreatePatchFileEx __MINGW_NAME_AW(CreatePatchFileEx) |
| 154 |
|
| 155 |
WINBOOL PATCHAPI ExtractPatchHeaderToFileA(LPCSTR PatchFileName,LPCSTR PatchHeaderFileName); |
| 156 |
WINBOOL PATCHAPI ExtractPatchHeaderToFileW(LPCWSTR PatchFileName,LPCWSTR PatchHeaderFileName); |
| 157 |
#define ExtractPatchHeaderToFile __MINGW_NAME_AW(ExtractPatchHeaderToFile) |
| 158 |
|
| 159 |
WINBOOL PATCHAPI TestApplyPatchToFileA(LPCSTR PatchFileName,LPCSTR OldFileName,ULONG ApplyOptionFlags); |
| 160 |
WINBOOL PATCHAPI TestApplyPatchToFileW(LPCWSTR PatchFileName,LPCWSTR OldFileName,ULONG ApplyOptionFlags); |
| 161 |
#define TestApplyPatchToFile __MINGW_NAME_AW(TestApplyPatchToFile) |
| 162 |
|
| 163 |
WINBOOL PATCHAPI ApplyPatchToFileA(LPCSTR PatchFileName,LPCSTR OldFileName,LPCSTR NewFileName,ULONG ApplyOptionFlags); |
| 164 |
WINBOOL PATCHAPI ApplyPatchToFileW(LPCWSTR PatchFileName,LPCWSTR OldFileName,LPCWSTR NewFileName,ULONG ApplyOptionFlags); |
| 165 |
#define ApplyPatchToFile __MINGW_NAME_AW(ApplyPatchToFile) |
| 166 |
|
| 167 |
WINBOOL PATCHAPI ApplyPatchToFileExA(LPCSTR PatchFileName,LPCSTR OldFileName,LPCSTR NewFileName,ULONG ApplyOptionFlags,PPATCH_PROGRESS_CALLBACK ProgressCallback,PVOID CallbackContext); |
| 168 |
WINBOOL PATCHAPI ApplyPatchToFileExW(LPCWSTR PatchFileName,LPCWSTR OldFileName,LPCWSTR NewFileName,ULONG ApplyOptionFlags,PPATCH_PROGRESS_CALLBACK ProgressCallback,PVOID CallbackContext); |
| 169 |
#define ApplyPatchToFileEx __MINGW_NAME_AW(ApplyPatchToFileEx) |
| 170 |
|
| 171 |
WINBOOL PATCHAPI GetFilePatchSignatureA(LPCSTR FileName,ULONG OptionFlags,PVOID OptionData,ULONG IgnoreRangeCount,PPATCH_IGNORE_RANGE IgnoreRangeArray,ULONG RetainRangeCount,PPATCH_RETAIN_RANGE RetainRangeArray,ULONG SignatureBufferSize,PVOID SignatureBuffer); |
| 172 |
WINBOOL PATCHAPI GetFilePatchSignatureW(LPCWSTR FileName,ULONG OptionFlags,PVOID OptionData,ULONG IgnoreRangeCount,PPATCH_IGNORE_RANGE IgnoreRangeArray,ULONG RetainRangeCount,PPATCH_RETAIN_RANGE RetainRangeArray,ULONG SignatureBufferSizeInBytes,PVOID SignatureBuffer); |
| 173 |
#define GetFilePatchSignature __MINGW_NAME_AW(GetFilePatchSignature) |
| 174 |
|
| 175 |
WINBOOL PATCHAPI GetFilePatchSignatureByHandle(HANDLE FileHandle,ULONG OptionFlags,PVOID OptionData,ULONG IgnoreRangeCount,PPATCH_IGNORE_RANGE IgnoreRangeArray,ULONG RetainRangeCount,PPATCH_RETAIN_RANGE RetainRangeArray,ULONG SignatureBufferSize,PVOID SignatureBuffer); |
| 176 |
WINBOOL PATCHAPI CreatePatchFileByHandles(HANDLE OldFileHandle,HANDLE NewFileHandle,HANDLE PatchFileHandle,ULONG OptionFlags,PPATCH_OPTION_DATA OptionData); |
| 177 |
WINBOOL PATCHAPI CreatePatchFileByHandlesEx(ULONG OldFileCount,PPATCH_OLD_FILE_INFO_H OldFileInfoArray,HANDLE NewFileHandle,HANDLE PatchFileHandle,ULONG OptionFlags,PPATCH_OPTION_DATA OptionData,PPATCH_PROGRESS_CALLBACK ProgressCallback,PVOID CallbackContext); |
| 178 |
WINBOOL PATCHAPI ExtractPatchHeaderToFileByHandles(HANDLE PatchFileHandle,HANDLE PatchHeaderFileHandle); |
| 179 |
WINBOOL PATCHAPI TestApplyPatchToFileByHandles(HANDLE PatchFileHandle,HANDLE OldFileHandle,ULONG ApplyOptionFlags); |
| 180 |
WINBOOL PATCHAPI ApplyPatchToFileByHandles(HANDLE PatchFileHandle,HANDLE OldFileHandle,HANDLE NewFileHandle,ULONG ApplyOptionFlags); |
| 181 |
WINBOOL PATCHAPI ApplyPatchToFileByHandlesEx(HANDLE PatchFileHandle,HANDLE OldFileHandle,HANDLE NewFileHandle,ULONG ApplyOptionFlags,PPATCH_PROGRESS_CALLBACK ProgressCallback,PVOID CallbackContext); |
| 182 |
|
| 183 |
WINBOOL PATCHAPI GetFilePatchSignatureByBuffer(PBYTE FileBufferWritable, ULONG FileSize, ULONG OptionFlags, PVOID OptionData, ULONG IgnoreRangeCount, PPATCH_IGNORE_RANGE IgnoreRangeArray, ULONG RetainRangeCount, PPATCH_RETAIN_RANGE RetainRangeArray, ULONG SignatureBufferSize, LPSTR SignatureBuffer); |
| 184 |
WINBOOL PATCHAPI ApplyPatchToFileByBuffers(PBYTE PatchFileMapped, ULONG PatchFileSize, PBYTE OldFileMapped, ULONG OldFileSize, PBYTE *NewFileBuffer, ULONG NewFileBufferSize, ULONG *NewFileActualSize, FILETIME *NewFileTime, ULONG ApplyOptionFlags, PPATCH_PROGRESS_CALLBACK ProgressCallback, PVOID CallbackContext); |
| 185 |
WINBOOL PATCHAPI TestApplyPatchToFileByBuffers(PBYTE PatchFileBuffer, ULONG PatchFileSize, PBYTE OldFileBuffer, ULONG OldFileSize, ULONG *NewFileSize, ULONG ApplyOptionFlags); |
| 186 |
|
| 187 |
#ifdef __cplusplus |
| 188 |
} |
| 189 |
#endif |
| 190 |
|
| 191 |
#endif |
| 192 |
#endif |