master
  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
 14extern "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
183WINBOOL 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);
184WINBOOL 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);
185WINBOOL 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