patchapi.h 9.5 KB

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