403Webshell
Server IP : 209.209.40.120  /  Your IP : 216.73.217.112
Web Server : Microsoft-IIS/10.0
System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586
User : NEWWWW$ ( 0)
PHP Version : 8.3.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um/msdelta.h
/* Copyright (c) Microsoft Corporation.  All rights reserved. */

#pragma once
#include <winapifamily.h>

#pragma region Desktop Family or CoreSetup Package
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PKG_CORESETUP)


/** Delta Compression Engine API. */

#include <windows.h>

/** For crypto algorithm identifiers, ALG_ID. */
#include <wincrypt.h>

/** Allows anonymous structs and unions. */
#pragma warning( disable: 4201 )

#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */

/** Default size limit for source and target files and buffers. */
#define DELTA_FILE_SIZE_LIMIT           ( 32 * 1024 * 1024 )

/** Default size limit for options files and buffers. */
#define DELTA_OPTIONS_SIZE_LIMIT        ( 128 * 1024 * 1024 )

/** Type for input memory blocks. */
typedef struct _DELTA_INPUT
{
    union
    {
        /** Start of memory block, if it is not Editable. */
        LPCVOID lpcStart;

        /** Start of memory block, if it is Editable. */
        LPVOID lpStart;
    };

    /** Size of memory block in bytes. */
    SIZE_T uSize;

    /** TRUE if caller allows msdelta to edit this memory block, FALSE otherwise. */
    BOOL Editable;

} DELTA_INPUT;

typedef DELTA_INPUT *LPDELTA_INPUT;

typedef const DELTA_INPUT *LPCDELTA_INPUT;

/** Type for output memory blocks. */
typedef struct _DELTA_OUTPUT
{
    /** Start of memory block. */
    LPVOID lpStart;

    /** Size of memory block in bytes. */
    SIZE_T uSize;
} DELTA_OUTPUT;

typedef DELTA_OUTPUT *LPDELTA_OUTPUT;

typedef const DELTA_OUTPUT *LPCDELTA_OUTPUT;

typedef __int64 DELTA_FILE_TYPE;

/** Raw file type. */
#define DELTA_FILE_TYPE_RAW                 ( (DELTA_FILE_TYPE) 0x00000001 )

/** File type for I386 Portable Executable files. */
#define DELTA_FILE_TYPE_I386                ( (DELTA_FILE_TYPE) 0x00000002 )

/** File type for for IA64 Portable Executable files. */
#define DELTA_FILE_TYPE_IA64                ( (DELTA_FILE_TYPE) 0x00000004 )

/** File type for AMD64 Portable Executable files. */
#define DELTA_FILE_TYPE_AMD64               ( (DELTA_FILE_TYPE) 0x00000008 )

/** File type for I386 Portable Executable files with CLI4 transform. */
#define DELTA_FILE_TYPE_CLI4_I386           ( (DELTA_FILE_TYPE) 0x00000010 )

/** File type for AMD64 Portable Executable files with CLI4 transform. */
#define DELTA_FILE_TYPE_CLI4_AMD64          ( (DELTA_FILE_TYPE) 0x00000020 )

/** File type for ARM Portable Executable files with CLI4 transform. */
#define DELTA_FILE_TYPE_CLI4_ARM            ( (DELTA_FILE_TYPE) 0x00000040 )

/** File type for ARM64 Portable Executable files with CLI4 transform. */
#define DELTA_FILE_TYPE_CLI4_ARM64          ( (DELTA_FILE_TYPE) 0x00000080 )

/** File type set that treats any file as raw. */
#define DELTA_FILE_TYPE_SET_RAW_ONLY        ( DELTA_FILE_TYPE_RAW )

/** File type set that distinguishes I386, IA64 and AMD64 Portable Executable file and treats others as raw. */
#define DELTA_FILE_TYPE_SET_EXECUTABLES_1   ( DELTA_FILE_TYPE_RAW | \
                                              DELTA_FILE_TYPE_I386 | \
                                              DELTA_FILE_TYPE_IA64 | \
                                              DELTA_FILE_TYPE_AMD64 )

#define DELTA_FILE_TYPE_SET_EXECUTABLES     DELTA_FILE_TYPE_SET_EXECUTABLES_1

/** File type set that distinguishes I386, IA64, ARM, and AMD64 Portable Executable file and treats others as raw. */
#define DELTA_FILE_TYPE_SET_EXECUTABLES_2   ( DELTA_FILE_TYPE_RAW | \
                                              DELTA_FILE_TYPE_CLI4_I386 | \
                                              DELTA_FILE_TYPE_IA64 | \
                                              DELTA_FILE_TYPE_CLI4_AMD64 | \
                                              DELTA_FILE_TYPE_CLI4_ARM )

/** File type set that distinguishes I386, IA64, ARM, ARM64, and AMD64 Portable Executable file and treats others as raw. */
#define DELTA_FILE_TYPE_SET_EXECUTABLES_3   ( DELTA_FILE_TYPE_RAW | \
                                              DELTA_FILE_TYPE_CLI4_I386 | \
                                              DELTA_FILE_TYPE_IA64 | \
                                              DELTA_FILE_TYPE_CLI4_AMD64 | \
                                              DELTA_FILE_TYPE_CLI4_ARM | \
                                              DELTA_FILE_TYPE_CLI4_ARM64 )

#define DELTA_FILE_TYPE_SET_EXECUTABLES_LATEST  DELTA_FILE_TYPE_SET_EXECUTABLES_3

/** Type for msdelta flags. */
typedef __int64 DELTA_FLAG_TYPE;

/** No flags. */
#define DELTA_FLAG_NONE                     ( (DELTA_FLAG_TYPE)0x00000000 )

/** Allow application of legacy PA19 deltas by mspatcha.dll. */
#define DELTA_APPLY_FLAG_ALLOW_PA19         ( (DELTA_FLAG_TYPE)0x00000001 )

/** Transform E8 pieces (relative calls in x86) of target file . */
#define DELTA_FLAG_E8                       ( (DELTA_FLAG_TYPE)0x00000001 ) /* flags[ 0 ] */

/** Mark non-executable parts of source PE. */
#define DELTA_FLAG_MARK                     ( (DELTA_FLAG_TYPE)0x00000002 ) /* flags[ 1 ] */

/** Transform imports of source PE. */
#define DELTA_FLAG_IMPORTS                  ( (DELTA_FLAG_TYPE)0x00000004 ) /* flags[ 2 ] */

/** Transform exports of source PE. */
#define DELTA_FLAG_EXPORTS                  ( (DELTA_FLAG_TYPE)0x00000008 ) /* flags[ 3 ] */

/** Transform resources of source PE. */
#define DELTA_FLAG_RESOURCES                ( (DELTA_FLAG_TYPE)0x00000010 ) /* flags[ 4 ] */

/** Transform relocations of source PE. */
#define DELTA_FLAG_RELOCS                   ( (DELTA_FLAG_TYPE)0x00000020 ) /* flags[ 5 ] */

/** Smash lock prefixes of source PE. */
#define DELTA_FLAG_I386_SMASHLOCK           ( (DELTA_FLAG_TYPE)0x00000040 ) /* flags[ 6 ] */

/** Transform relative jumps of source I386 (x86) PE. */
#define DELTA_FLAG_I386_JMPS                ( (DELTA_FLAG_TYPE)0x00000080 ) /* flags[ 7 ] */

/** Transform relative calls of source I386 (x86) PE. */
#define DELTA_FLAG_I386_CALLS               ( (DELTA_FLAG_TYPE)0x00000100 ) /* flags[ 8 ] */

/** Transform instructions of source AMD64 (x86-64) PE. */
#define DELTA_FLAG_AMD64_DISASM             ( (DELTA_FLAG_TYPE)0x00000200 ) /* flags[ 9 ] */

/** Transform pdata of source AMD64 (x86-64) PE. */
#define DELTA_FLAG_AMD64_PDATA              ( (DELTA_FLAG_TYPE)0x00000400 ) /* flags[ 10 ] */

/** Transform intstructions of source IA64 (Itanium) PE. */
#define DELTA_FLAG_IA64_DISASM              ( (DELTA_FLAG_TYPE)0x00000800 ) /* flags[ 11 ] */

/** Transform pdata of source IA64 (Itanium) PE. */
#define DELTA_FLAG_IA64_PDATA               ( (DELTA_FLAG_TYPE)0x00001000 ) /* flags[ 12 ] */

/** Unbind source PE. */
#define DELTA_FLAG_UNBIND                   ( (DELTA_FLAG_TYPE)0x00002000 ) /* flags[ 13 ] */

/** Transform CLI instructions of source PE. */
#define DELTA_FLAG_CLI_DISASM               ( (DELTA_FLAG_TYPE)0x00004000 ) /* flags[ 14 ] */

/** Transform CLI Metadata of source PE. */
#define DELTA_FLAG_CLI_METADATA             ( (DELTA_FLAG_TYPE)0x00008000 ) /* flags[ 15 ] */

/** Transform headers of source PE. */
#define DELTA_FLAG_HEADERS                  ( (DELTA_FLAG_TYPE)0x00010000 ) /* flags[ 16 ] */

/** Allow source or target file or buffer to exceed its default size limit. */
#define DELTA_FLAG_IGNORE_FILE_SIZE_LIMIT   ( (DELTA_FLAG_TYPE)0x00020000 ) /* flags[ 17 ] */

/** Allow options buffer or file to exceeed its default size limit. */
#define DELTA_FLAG_IGNORE_OPTIONS_SIZE_LIMIT ((DELTA_FLAG_TYPE)0x00040000 ) /* flags[ 18 ] */

/** Transform instructions of source ARM PE. */
#define DELTA_FLAG_ARM_DISASM               ( (DELTA_FLAG_TYPE)0x00080000 ) /* flags[ 19 ] */

/** Transform pdata of source ARM PE. */
#define DELTA_FLAG_ARM_PDATA                ( (DELTA_FLAG_TYPE)0x00100000 ) /* flags[ 20 ] */

/** Transform CLI4 Metadata of source PE. */  
#define DELTA_FLAG_CLI4_METADATA            ( (DELTA_FLAG_TYPE)0x00200000 ) /* flags[ 21 ] */

/** Transform CLI4 instructions of source PE. */
#define DELTA_FLAG_CLI4_DISASM              ( (DELTA_FLAG_TYPE)0x00400000 ) /* flags[ 22 ] */

/** Transform instructions of source ARM PE. */
#define DELTA_FLAG_ARM64_DISASM             ( (DELTA_FLAG_TYPE)0x00800000 ) /* flags[ 23 ] */

/** Transform pdata of source ARM PE. */
#define DELTA_FLAG_ARM64_PDATA              ( (DELTA_FLAG_TYPE)0x01000000 ) /* flags[ 24 ] */


/** List the default transform combination for individule ISA */
#define DELTA_DEFAULT_FLAGS_RAW             ( DELTA_FLAG_NONE )

#define DELTA_DEFAULT_FLAGS_I386            ( DELTA_FLAG_MARK | \
                                              DELTA_FLAG_IMPORTS | \
                                              DELTA_FLAG_EXPORTS | \
                                              DELTA_FLAG_RESOURCES | \
                                              DELTA_FLAG_RELOCS | \
                                              DELTA_FLAG_I386_SMASHLOCK | \
                                              DELTA_FLAG_I386_JMPS | \
                                              DELTA_FLAG_I386_CALLS | \
                                              DELTA_FLAG_UNBIND | \
                                              DELTA_FLAG_CLI_DISASM | \
                                              DELTA_FLAG_CLI_METADATA ) 

#define DELTA_DEFAULT_FLAGS_IA64            ( DELTA_FLAG_MARK | \
                                              DELTA_FLAG_IMPORTS | \
                                              DELTA_FLAG_EXPORTS | \
                                              DELTA_FLAG_RESOURCES | \
                                              DELTA_FLAG_RELOCS | \
                                              DELTA_FLAG_IA64_DISASM | \
                                              DELTA_FLAG_IA64_PDATA | \
                                              DELTA_FLAG_UNBIND | \
                                              DELTA_FLAG_CLI_DISASM | \
                                              DELTA_FLAG_CLI_METADATA ) 

#define DELTA_DEFAULT_FLAGS_AMD64           ( DELTA_FLAG_MARK | \
                                              DELTA_FLAG_IMPORTS | \
                                              DELTA_FLAG_EXPORTS | \
                                              DELTA_FLAG_RESOURCES | \
                                              DELTA_FLAG_RELOCS | \
                                              DELTA_FLAG_AMD64_DISASM | \
                                              DELTA_FLAG_AMD64_PDATA | \
                                              DELTA_FLAG_UNBIND | \
                                              DELTA_FLAG_CLI_DISASM | \
                                              DELTA_FLAG_CLI_METADATA )

#define DELTA_CLI4_FLAGS_I386              ( DELTA_FLAG_MARK | \
                                              DELTA_FLAG_IMPORTS | \
                                              DELTA_FLAG_EXPORTS | \
                                              DELTA_FLAG_RESOURCES | \
                                              DELTA_FLAG_RELOCS | \
                                              DELTA_FLAG_I386_SMASHLOCK | \
                                              DELTA_FLAG_I386_JMPS | \
                                              DELTA_FLAG_I386_CALLS | \
                                              DELTA_FLAG_UNBIND | \
                                              DELTA_FLAG_CLI4_DISASM | \
                                              DELTA_FLAG_CLI4_METADATA ) 

#define DELTA_CLI4_FLAGS_AMD64             ( DELTA_FLAG_MARK | \
                                              DELTA_FLAG_IMPORTS | \
                                              DELTA_FLAG_EXPORTS | \
                                              DELTA_FLAG_RESOURCES | \
                                              DELTA_FLAG_RELOCS | \
                                              DELTA_FLAG_AMD64_DISASM | \
                                              DELTA_FLAG_AMD64_PDATA | \
                                              DELTA_FLAG_UNBIND | \
                                              DELTA_FLAG_CLI4_DISASM | \
                                              DELTA_FLAG_CLI4_METADATA )

#define DELTA_CLI4_FLAGS_ARM               ( DELTA_FLAG_MARK | \
                                              DELTA_FLAG_IMPORTS | \
                                              DELTA_FLAG_EXPORTS | \
                                              DELTA_FLAG_RESOURCES | \
                                              DELTA_FLAG_RELOCS | \
                                              DELTA_FLAG_ARM_DISASM | \
                                              DELTA_FLAG_ARM_PDATA | \
                                              DELTA_FLAG_UNBIND | \
                                              DELTA_FLAG_CLI4_DISASM | \
                                              DELTA_FLAG_CLI4_METADATA )

#define DELTA_CLI4_FLAGS_ARM64             ( DELTA_FLAG_MARK | \
                                              DELTA_FLAG_IMPORTS | \
                                              DELTA_FLAG_EXPORTS | \
                                              DELTA_FLAG_RESOURCES | \
                                              DELTA_FLAG_RELOCS | \
                                              DELTA_FLAG_ARM64_DISASM | \
                                              DELTA_FLAG_ARM64_PDATA | \
                                              DELTA_FLAG_UNBIND | \
                                              DELTA_FLAG_CLI4_DISASM | \
                                              DELTA_FLAG_CLI4_METADATA )

/** Maximal allowed size of hash in bytes. */
#define DELTA_MAX_HASH_SIZE                 32

/** Hash structure. */
typedef struct _DELTA_HASH
{
    /** Size of hash in bytes. Does not exceed DELTA_MAX_HASH_SIZE. */
    DWORD HashSize;

    /** Hash value. */
    UCHAR HashValue[ DELTA_MAX_HASH_SIZE ];
} DELTA_HASH;

typedef DELTA_HASH *LPDELTA_HASH;

typedef const DELTA_HASH *LPCDELTA_HASH;

/** Delta header information. */
typedef struct _DELTA_HEADER_INFO
{
    /** Used file type set. */
    DELTA_FILE_TYPE FileTypeSet;

    /** Source file type. */
    DELTA_FILE_TYPE FileType;

    /** Delta flags. */
    DELTA_FLAG_TYPE Flags;

    /** Size of target file in bytes. */
    SIZE_T  TargetSize;

    /** Time of target file. */
    FILETIME TargetFileTime;

    /** Algorithm used for hashing. */
    ALG_ID TargetHashAlgId;

    /** Target hash. */
    DELTA_HASH TargetHash;

} DELTA_HEADER_INFO;

typedef DELTA_HEADER_INFO *LPDELTA_HEADER_INFO;

typedef const DELTA_HEADER_INFO *LPCDELTA_HEADER_INFO;

/**
 * Gets header information for a delta in memory.
 * @param Delta         Delta memory block.
 * @param lpHeaderInfo  Header information for given Delta.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
GetDeltaInfoB(
    _In_ DELTA_INPUT Delta,
    _Out_ LPDELTA_HEADER_INFO lpHeaderInfo
    );

/**
 * Gets header information for a delta accessed by ASCII file name.
 * @param lpDeltaName   Delta file name, ASCII.
 * @param lpHeaderInfo  Header information for given Delta.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
GetDeltaInfoA(
    _In_ LPCSTR lpDeltaName,
    _Out_ LPDELTA_HEADER_INFO lpHeaderInfo
    );

/**
 * Gets header information for a delta accessed by Unicode file name.
 * @param lpDeltaName   Delta file name, Unicode.
 * @param lpHeaderInfo  Header information for given Delta.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
GetDeltaInfoW(
    _In_ LPCWSTR lpDeltaName,
    _Out_ LPDELTA_HEADER_INFO lpHeaderInfo
    );

#ifdef _UNICODE
#define GetDeltaInfo                        GetDeltaInfoW
#else
#define GetDeltaInfo                        GetDeltaInfoA
#endif /* _UNICODE */


/**
 * Applies a given delta to a given source file.
 * The resultant target file is put into allocated memory.
 * @param ApplyFlags    Apply-specific flags, such as DELTA_APPLY_FLAG_ALLOW_PA19.
 * @param Source        Source memory block.
 * @param Delta         Delta memory block.
 * @param lpTarget      Target memory block. Caller DeltaFree.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
ApplyDeltaB(
    _In_ DELTA_FLAG_TYPE ApplyFlags,
    _In_ DELTA_INPUT Source,
    _In_ DELTA_INPUT Delta,
    _Out_ LPDELTA_OUTPUT lpTarget
    );


/**
 * Applies a given delta to a given source file.
 * The resultant target file is put into caller-provided memory.
 * @param ApplyFlags    Apply-specific flags, such as DELTA_APPLY_FLAG_ALLOW_PA19.
 * @param Source        Source memory block.
 * @param Delta         Delta memory block.
 * @param lpTarget      Pointer to caller-allocated target memory block.
 * @param uTargetSize   Size of target memory block in bytes, caller needs to call GetDeltaInfo to obtain it.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
ApplyDeltaProvidedB(
    _In_ DELTA_FLAG_TYPE ApplyFlags,
    _In_ DELTA_INPUT Source,
    _In_ DELTA_INPUT Delta,
    _Inout_updates_bytes_( uTargetSize ) LPVOID lpTarget,
    _In_ SIZE_T uTargetSize
    );

/**
 * Applies a given delta to a given source file. The resultant target file is written to disk.
 * All files accessed by ASCII file names.
 * @param ApplyFlags    Apply-specific flags, such as DELTA_APPLY_FLAG_ALLOW_PA19.
 * @param lpSourceName  Source file name, ASCII.
 * @param lpDeltaName   Delta file name, ASCII.
 * @param lpTargetName  Target file name, ASCII.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
ApplyDeltaA(
    _In_ DELTA_FLAG_TYPE ApplyFlags,
    _In_ LPCSTR lpSourceName,
    _In_ LPCSTR lpDeltaName,
    _In_ LPCSTR lpTargetName
    );

/**
 * Applies a given delta to a given source file. The resultant target file is written to disk.
 * All files accessed by Unicode file names.
 * @param ApplyFlags    Apply-specific flags, such as DELTA_APPLY_FLAG_ALLOW_PA19.
 * @param lpSourceName  Source file name, Unicode.
 * @param lpDeltaName   Delta file name, Unicode.
 * @param lpTargetName  Target file name, Unicode.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
ApplyDeltaW(
    _In_ DELTA_FLAG_TYPE ApplyFlags,
    _In_ LPCWSTR lpSourceName,
    _In_ LPCWSTR lpDeltaName,
    _In_ LPCWSTR lpTargetName
    );

#ifdef _UNICODE
#define ApplyDelta                          ApplyDeltaW
#else
#define ApplyDelta                          ApplyDeltaA
#endif /* _UNICODE */

/**
 * Creates a delta from a given source file to a given target file in memory.
 * The resultant delta is put into allocated memory.
 * @param FileTypeSet   File type set.
 * @param SetFlags      Set these flags.
 * @param ResetFlags    Reset (supress) these flags.
 * @param Source        Source memory block.
 * @param Target        Target memory block.
 * @param SourceOptions Memory block with source-specific options.
 * @param TargetOptions Memory block with target-specific options.
 * @param GlobalOptions Memory block with global options.
 * @param lpTargetFileTime  Target file time to use, null to use current time.
 * @param HashAlgId     Algorithm for hashing.
 * @param lpDelta       Result delta memory block.
 * @return              TRUE if sucess, FALSE otherwise.
 */
BOOL
WINAPI
CreateDeltaB(
    _In_ DELTA_FILE_TYPE FileTypeSet,
    _In_ DELTA_FLAG_TYPE SetFlags,
    _In_ DELTA_FLAG_TYPE ResetFlags,
    _In_ DELTA_INPUT Source,
    _In_ DELTA_INPUT Target,
    _In_ DELTA_INPUT SourceOptions,
    _In_ DELTA_INPUT TargetOptions,
    _In_ DELTA_INPUT GlobalOptions,
    _In_opt_ const FILETIME *lpTargetFileTime,
    _In_ ALG_ID HashAlgId,
    _Out_ LPDELTA_OUTPUT lpDelta
    );

/**
 * Creates a delta from a given source file to a given target file. The resultant delta is written to disk
 * All files accessed by ASCII file names.
 * @param FileTypeSet   File type set.
 * @param SetFlags      Set these flags.
 * @param ResetFlags    Reset (supress) these flags.
 * @param lpSourceName  Source file name, ASCII.
 * @param lpTargetName  Target file name, ASCII.
 * @param lpSourceOptionsName   Name of file with source-specific options, ASCII.
 * @param lpTargetOptionsName   Name of file with target-specific options, ASCII.
 * @param GlobalOptions Memory block with global options.
 * @param lpTargetFileTime  Target file time to use, null to use actual target file time.
 * @param HashAlgId     Algorithm for hashing.
 * @param lpDeltaName   Result delta file name, ASCII.
 * @return              TRUE if sucess, FALSE otherwise.
 */
BOOL
WINAPI
CreateDeltaA(
    _In_ DELTA_FILE_TYPE FileTypeSet,
    _In_ DELTA_FLAG_TYPE SetFlags,
    _In_ DELTA_FLAG_TYPE ResetFlags,
    _In_ LPCSTR lpSourceName,
    _In_ LPCSTR lpTargetName,
    _In_opt_ LPCSTR lpSourceOptionsName,
    _In_opt_ LPCSTR lpTargetOptionsName,
    _In_ DELTA_INPUT GlobalOptions,
    _In_opt_ const FILETIME *lpTargetFileTime,
    _In_ ALG_ID HashAlgId,
    _In_ LPCSTR lpDeltaName
    );

/**
 * Creates a delta from a given source file to a given target file. The resultant delta is written to disk
 * All files accessed by Unicode file names.
 * @param FileTypeSet  File type set.
 * @param SetFlags      Set these flags.
 * @param ResetFlags    Reset (supress) these flags.
 * @param lpSourceName  Source file name, Unicode.
 * @param lpTargetName  Target file name, Unicode.
 * @param lpSourceOptionsName   Name of file with source-specific options, Unicode.
 * @param lpTargetOptionsName   Name of file with target-specific options, Unicode.
 * @param GlobalOptions Memory block with global options.
 * @param lpTargetFileTime  Target file time to use, null to use actual target file time.
 * @param HashAlgId     Algorithm for hashing.
 * @param lpDeltaName   Result delta file name, Unicode.
 * @return              TRUE if sucess, FALSE otherwise.
 */
BOOL
WINAPI
CreateDeltaW(
    _In_ DELTA_FILE_TYPE FileTypeSet,
    _In_ DELTA_FLAG_TYPE SetFlags,
    _In_ DELTA_FLAG_TYPE ResetFlags,
    _In_ LPCWSTR lpSourceName,
    _In_ LPCWSTR lpTargetName,
    _In_opt_ LPCWSTR lpSourceOptionsName,
    _In_opt_ LPCWSTR lpTargetOptionsName,
    _In_ DELTA_INPUT GlobalOptions,
    _In_opt_ const FILETIME *lpTargetFileTime,
    _In_ ALG_ID HashAlgId,
    _In_ LPCWSTR lpDeltaName
    );

#ifdef _UNICODE
#define CreateDelta                         CreateDeltaW
#else
#define CreateDelta                         CreateDeltaA
#endif /* _UNICODE */


/**
 * Calculates a hash for normalized source file in memory.
 * Normalization is based on source file type,
 * which is determined automatically according to the given file type set.
 * @param FileTypeSet   File type set.
 * @param HashAlgId     Algorithm for hashing.
 * @param Source        Source memory block.
 * @param lpHash        Result hash.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
GetDeltaSignatureB(
    _In_ DELTA_FILE_TYPE FileTypeSet,
    _In_ ALG_ID HashAlgId,
    _In_ DELTA_INPUT Source,
    _Out_ LPDELTA_HASH lpHash
    );

/**
 * Calculates a hash for normalized source file accessed by ASCII file name.
 * Normalization is based on source file type,
 * which is determined automatically according to the given file type set.
 * @param FileTypeSet   File type set.
 * @param HashAlgId     Algorithm for hashing.
 * @param lpSourceName  Source file name, ASCII.
 * @param lpHash        Result hash.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
GetDeltaSignatureA(
    _In_ DELTA_FILE_TYPE FileTypeSet,
    _In_ ALG_ID HashAlgId,
    _In_ LPCSTR lpSourceName,
    _Out_ LPDELTA_HASH lpHash
    );

/**
 * Calculates a hash for normalized source file accessed by Unicode file name.
 * Normalization is based on source file type,
 * which is determined automatically according to the given file type set.
 * @param FileTypeSet   File type set.
 * @param HashAlgId     Algorithm for hashing.
 * @param lpSourceName  Source file name, Unicode.
 * @param lpHash        Result hash.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
GetDeltaSignatureW(
    _In_ DELTA_FILE_TYPE FileTypeSet,
    _In_ ALG_ID HashAlgId,
    _In_ LPCWSTR lpSourceName,
    _Out_ LPDELTA_HASH lpHash
    );


#ifdef _UNICODE
#define GetDeltaSignature                   GetDeltaSignatureW
#else
#define GetDeltaSignature                   GetDeltaSignatureA
#endif /* _UNICODE */

/**
 * Normalizes source buffer, normalization is  based on source file type, which is
 * determined automatically according to the given file type set.
 * @param FileTypeSet   File type set.
 * @param NormalizeFlags    Normalization flags.
 * @param NormalizeOptions  Normalization options.
 * @param lpSource      Pointer to source buffer.
 * @param uSourceSize   Size of source buffer in bytes.
 * @return              TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
DeltaNormalizeProvidedB(
    _In_ DELTA_FILE_TYPE FileTypeSet,
    _In_ DELTA_FLAG_TYPE NormalizeFlags,
    _In_ DELTA_INPUT NormalizeOptions,
    _Inout_updates_bytes_( uSourceSize ) LPVOID lpSource,
    _In_ SIZE_T uSourceSize
    );

/**
 * Frees memory block allocated by msdelta.
 * @param lpMemory Pointer to memory block, previously allocated by msdelta.
 * @return TRUE if success, FALSE otherwise.
 */
BOOL
WINAPI
DeltaFree(
    _In_ LPVOID lpMemory
    );

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_PKG_CORESETUP) */
#pragma endregion


Youez - 2016 - github.com/yon3zu
LinuXploit