// // patchprv.h // // Private interface options for creating patch files. // // Author: Tom McGuire (tommcg) 2/98 // // Copyright (C) Microsoft, 1997-1998. // // MICROSOFT CONFIDENTIAL // #ifndef _PATCHPRV_H_ #define _PATCHPRV_H_ #ifdef __cplusplus extern "C" { #endif #define PATCH_SIGNATURE '91AP' // PA19 patch signature typedef struct _RIFT_ENTRY { ULONG OldFileRva; ULONG NewFileRva; } RIFT_ENTRY, *PRIFT_ENTRY; typedef struct _RIFT_TABLE { ULONG RiftEntryCount; ULONG RiftEntryAlloc; PRIFT_ENTRY RiftEntryArray; PUCHAR RiftUsageArray; } RIFT_TABLE, *PRIFT_TABLE; typedef struct _PATCH_HEADER_OLD_FILE_INFO { HANDLE OldFileHandle; ULONG OldFileSize; ULONG OldFileCrc; ULONG PatchDataSize; ULONG IgnoreRangeCount; PPATCH_IGNORE_RANGE IgnoreRangeArray; ULONG RetainRangeCount; PPATCH_RETAIN_RANGE RetainRangeArray; RIFT_TABLE RiftTable; } HEADER_OLD_FILE_INFO, *PHEADER_OLD_FILE_INFO; typedef struct _PATCH_HEADER_INFO { ULONG Signature; ULONG OptionFlags; ULONG ExtendedOptionFlags; PVOID OptionData; ULONG NewFileCoffBase; ULONG NewFileCoffTime; ULONG NewFileResTime; ULONG NewFileTime; ULONG NewFileSize; ULONG NewFileCrc; ULONG OldFileCount; PHEADER_OLD_FILE_INFO OldFileInfoArray; } PATCH_HEADER_INFO, *PPATCH_HEADER_INFO; BOOL ProgressCallbackWrapper( IN PPATCH_PROGRESS_CALLBACK ProgressCallback, IN PVOID CallbackContext, IN ULONG CurrentPosition, IN ULONG MaximumPosition ); BOOL WINAPIV NormalizeOldFileImageForPatching( IN PVOID FileMappedImage, IN ULONG FileSize, IN ULONG OptionFlags, IN PVOID OptionData, IN ULONG NewFileCoffBase, IN ULONG NewFileCoffTime, IN ULONG IgnoreRangeCount, IN PPATCH_IGNORE_RANGE IgnoreRangeArray, IN ULONG RetainRangeCount, IN PPATCH_RETAIN_RANGE RetainRangeArray, ... ); BOOL WINAPIV TransformOldFileImageForPatching( IN ULONG TransformOptions, IN PVOID OldFileMapped, IN ULONG OldFileSize, IN ULONG NewFileResTime, IN PRIFT_TABLE RiftTable, ... ); // // The following is a private flag to indicate external rift data is being // specified in the OptionData->OldFileSymbolPathArray[ OldFileIndex ] field // (really a PRIFT_TABLE pointer). // #define PATCH_SYMBOL_EXTERNAL_RIFT PATCH_SYMBOL_RESERVED1 // // The following is an internal flag stored in the patch header to indicate // the ExtendedOptionFlags field is present (non-zero) in the header. It is // never necessary to specify this flag when creating a patch. // #define PATCH_OPTION_EXTENDED_OPTIONS PATCH_OPTION_RESERVED1 // // Following are flags in the ExtendedOptionFlags field. // #define PATCH_TRANSFORM_NO_RELOCS 0x00000001 // don't xform relocs #define PATCH_TRANSFORM_NO_IMPORTS 0x00000002 // don't xform imports #define PATCH_TRANSFORM_NO_EXPORTS 0x00000004 // don't xform exports #define PATCH_TRANSFORM_NO_RELJMPS 0x00000008 // don't xform E9 or 0F 8x instructions #define PATCH_TRANSFORM_NO_RELCALLS 0x00000010 // don't xform E8 instructions #define PATCH_TRANSFORM_NO_RESOURCE 0x00000020 // don't xform resources VOID __fastcall RiftQsort( PRIFT_ENTRY LowerBound, PRIFT_ENTRY UpperBound ); #ifdef __cplusplus } #endif #endif // _PATCHPRV_H_