📄 patchapi.h
字号:
IN PPATCH_OLD_FILE_INFO_W OldFileInfoArray,
IN LPCWSTR NewFileName,
OUT LPCWSTR PatchFileName,
IN ULONG OptionFlags,
IN PPATCH_OPTION_DATA OptionData, // optional
IN PPATCH_PROGRESS_CALLBACK ProgressCallback,
IN PVOID CallbackContext
);
BOOL
PATCHAPI
CreatePatchFileByHandlesEx(
IN ULONG OldFileCount, // maximum 255
IN PPATCH_OLD_FILE_INFO_H OldFileInfoArray,
IN HANDLE NewFileHandle,
OUT HANDLE PatchFileHandle,
IN ULONG OptionFlags,
IN PPATCH_OPTION_DATA OptionData, // optional
IN PPATCH_PROGRESS_CALLBACK ProgressCallback,
IN PVOID CallbackContext
);
BOOL
PATCHAPI
ExtractPatchHeaderToFileA(
IN LPCSTR PatchFileName,
OUT LPCSTR PatchHeaderFileName
);
BOOL
PATCHAPI
ExtractPatchHeaderToFileW(
IN LPCWSTR PatchFileName,
OUT LPCWSTR PatchHeaderFileName
);
BOOL
PATCHAPI
ExtractPatchHeaderToFileByHandles(
IN HANDLE PatchFileHandle,
OUT HANDLE PatchHeaderFileHandle
);
//
// The following prototypes are interface for creating new file from old file
// and patch file. Note that it is possible for the TestApply API to succeed
// but the actual Apply to fail since the TestApply only verifies that the
// old file has the correct CRC without actually applying the patch. The
// TestApply API only requires the patch header portion of the patch file,
// but its CRC must be fixed up.
//
BOOL
PATCHAPI
TestApplyPatchToFileA(
IN LPCSTR PatchFileName,
IN LPCSTR OldFileName,
IN ULONG ApplyOptionFlags
);
BOOL
PATCHAPI
TestApplyPatchToFileW(
IN LPCWSTR PatchFileName,
IN LPCWSTR OldFileName,
IN ULONG ApplyOptionFlags
);
BOOL
PATCHAPI
TestApplyPatchToFileByHandles(
IN HANDLE PatchFileHandle, // requires GENERIC_READ access
IN HANDLE OldFileHandle, // requires GENERIC_READ access
IN ULONG ApplyOptionFlags
);
BOOL
PATCHAPI
ApplyPatchToFileA(
IN LPCSTR PatchFileName,
IN LPCSTR OldFileName,
OUT LPCSTR NewFileName,
IN ULONG ApplyOptionFlags
);
BOOL
PATCHAPI
ApplyPatchToFileW(
IN LPCWSTR PatchFileName,
IN LPCWSTR OldFileName,
OUT LPCWSTR NewFileName,
IN ULONG ApplyOptionFlags
);
BOOL
PATCHAPI
ApplyPatchToFileByHandles(
IN HANDLE PatchFileHandle, // requires GENERIC_READ access
IN HANDLE OldFileHandle, // requires GENERIC_READ access
OUT HANDLE NewFileHandle, // requires GENERIC_READ | GENERIC_WRITE
IN ULONG ApplyOptionFlags
);
BOOL
PATCHAPI
ApplyPatchToFileExA(
IN LPCSTR PatchFileName,
IN LPCSTR OldFileName,
OUT LPCSTR NewFileName,
IN ULONG ApplyOptionFlags,
IN PPATCH_PROGRESS_CALLBACK ProgressCallback,
IN PVOID CallbackContext
);
BOOL
PATCHAPI
ApplyPatchToFileExW(
IN LPCWSTR PatchFileName,
IN LPCWSTR OldFileName,
OUT LPCWSTR NewFileName,
IN ULONG ApplyOptionFlags,
IN PPATCH_PROGRESS_CALLBACK ProgressCallback,
IN PVOID CallbackContext
);
BOOL
PATCHAPI
ApplyPatchToFileByHandlesEx(
IN HANDLE PatchFileHandle,
IN HANDLE OldFileHandle,
OUT HANDLE NewFileHandle,
IN ULONG ApplyOptionFlags,
IN PPATCH_PROGRESS_CALLBACK ProgressCallback,
IN PVOID CallbackContext
);
//
// The following prototypes provide a unique patch "signature" for a given
// file. Consider the case where you have a new foo.dll and the machines
// to be updated with the new foo.dll may have one of three different old
// foo.dll files. Rather than creating a single large patch file that can
// update any of the three older foo.dll files, three separate smaller patch
// files can be created and "named" according to the patch signature of the
// old file. Then the patch applyer application can determine at runtime
// which of the three foo.dll patch files is necessary given the specific
// foo.dll to be updated. If patch files are being downloaded over a slow
// network connection (Internet over a modem), this signature scheme provides
// a mechanism for choosing the correct single patch file to download at
// application time thus decreasing total bytes necessary to download.
//
BOOL
GetFilePatchSignatureA(
IN LPCSTR FileName,
IN ULONG OptionFlags,
IN PVOID OptionData,
IN ULONG IgnoreRangeCount,
IN PPATCH_IGNORE_RANGE IgnoreRangeArray,
IN ULONG RetainRangeCount,
IN PPATCH_RETAIN_RANGE RetainRangeArray,
IN ULONG SignatureBufferSize,
OUT LPSTR SignatureBuffer
);
BOOL
GetFilePatchSignatureW(
IN LPCWSTR FileName,
IN ULONG OptionFlags,
IN PVOID OptionData,
IN ULONG IgnoreRangeCount,
IN PPATCH_IGNORE_RANGE IgnoreRangeArray,
IN ULONG RetainRangeCount,
IN PPATCH_RETAIN_RANGE RetainRangeArray,
IN ULONG SignatureBufferSizeInBytes,
OUT LPWSTR SignatureBuffer
);
BOOL
GetFilePatchSignatureByHandle(
IN HANDLE FileHandle,
IN ULONG OptionFlags,
IN PVOID OptionData,
IN ULONG IgnoreRangeCount,
IN PPATCH_IGNORE_RANGE IgnoreRangeArray,
IN ULONG RetainRangeCount,
IN PPATCH_RETAIN_RANGE RetainRangeArray,
IN ULONG SignatureBufferSize,
OUT LPSTR SignatureBuffer
);
//
// Depending on whether UNICODE is defined, map the generic API names to the
// appropriate Unicode or Ansi APIs.
//
#ifdef UNICODE
#define CreatePatchFile CreatePatchFileW
#define CreatePatchFileEx CreatePatchFileExW
#define TestApplyPatchToFile TestApplyPatchToFileW
#define ApplyPatchToFile ApplyPatchToFileW
#define ApplyPatchToFileEx ApplyPatchToFileExW
#define ExtractPatchHeaderToFile ExtractPatchHeaderToFileW
#define GetFilePatchSignature GetFilePatchSignatureW
#else
#define CreatePatchFile CreatePatchFileA
#define CreatePatchFileEx CreatePatchFileExA
#define TestApplyPatchToFile TestApplyPatchToFileA
#define ApplyPatchToFile ApplyPatchToFileA
#define ApplyPatchToFileEx ApplyPatchToFileExA
#define ExtractPatchHeaderToFile ExtractPatchHeaderToFileA
#define GetFilePatchSignature GetFilePatchSignatureA
#endif // UNICODE
#ifdef __cplusplus
}
#endif
#pragma option pop /*P_O_Pop*/
#endif // _PATCHAPI_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -