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 :  C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um/cfapi.h
/*++

Copyright (c) Microsoft Corporation.  All rights reserved.

Module Name:

    cfapi.h

Abstract:

    This module defines the constants, data structures, and exported functions
    for the Cloud Files API.

--*/

#ifndef CFAPI_H
#define CFAPI_H

#if _MSC_VER > 1000
#pragma once
#endif

#include <winapifamily.h>

#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )

#if ( NTDDI_VERSION >= NTDDI_WIN10_RS2 )

#pragma region Common Structures

#define CF_EOF ( -1LL )
#define CF_REQUEST_KEY_DEFAULT ( 0 )


#define DECLARE_OPAQUE_KEY( name )                                                                 \
    typedef struct name##__ {                                                                      \
        LONGLONG Internal;                                                                         \
    } name, *P##name

DECLARE_OPAQUE_KEY( CF_CONNECTION_KEY );

typedef LARGE_INTEGER CF_TRANSFER_KEY;
typedef LARGE_INTEGER CF_REQUEST_KEY;

#ifdef __cplusplus

#define DEFINE_USHORT_ENUM(ENUMTYPE)                                           \
  struct ENUMTYPE##_USHORT {                                                   \
    USHORT us;                                                                 \
    ENUMTYPE##_USHORT() { us = 0; }                                            \
    ENUMTYPE##_USHORT(const ENUMTYPE e) { us = (USHORT)e; }                    \
    operator ENUMTYPE() const { return (ENUMTYPE)us; }                         \
    ENUMTYPE##_USHORT &operator|=(const ENUMTYPE##_USHORT &e) {                \
      us |= e.us;                                                              \
      return *this;                                                            \
    }                                                                          \
    ENUMTYPE##_USHORT &operator&=(const ENUMTYPE##_USHORT &e) {                \
      us &= e.us;                                                              \
      return *this;                                                            \
    }                                                                          \
  };

#else

#define DEFINE_USHORT_ENUM( ENUMTYPE ) typedef USHORT ENUMTYPE##_USHORT

#endif

#define CF_PLACEHOLDER_MAX_FILE_IDENTITY_LENGTH 4096

typedef struct CF_FS_METADATA {
    FILE_BASIC_INFO BasicInfo;
    LARGE_INTEGER FileSize;
} CF_FS_METADATA;

typedef enum CF_PLACEHOLDER_CREATE_FLAGS {
    CF_PLACEHOLDER_CREATE_FLAG_NONE                         = 0x00000000,
    CF_PLACEHOLDER_CREATE_FLAG_DISABLE_ON_DEMAND_POPULATION = 0x00000001,
    CF_PLACEHOLDER_CREATE_FLAG_MARK_IN_SYNC                 = 0x00000002,
    CF_PLACEHOLDER_CREATE_FLAG_SUPERSEDE                    = 0x00000004,
    CF_PLACEHOLDER_CREATE_FLAG_ALWAYS_FULL                  = 0x00000008,
} CF_PLACEHOLDER_CREATE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_PLACEHOLDER_CREATE_FLAGS );

typedef struct CF_PLACEHOLDER_CREATE_INFO {
    LPCWSTR RelativeFileName;
    CF_FS_METADATA FsMetadata;
    LPCVOID FileIdentity;
    DWORD FileIdentityLength;
    CF_PLACEHOLDER_CREATE_FLAGS Flags;
    HRESULT Result;
    USN CreateUsn;
} CF_PLACEHOLDER_CREATE_INFO;

typedef enum CF_SYNC_PROVIDER_STATUS {
    CF_PROVIDER_STATUS_DISCONNECTED       = 0x00000000,
    CF_PROVIDER_STATUS_IDLE               = 0x00000001,
    CF_PROVIDER_STATUS_POPULATE_NAMESPACE = 0x00000002,
    CF_PROVIDER_STATUS_POPULATE_METADATA  = 0x00000004,
    CF_PROVIDER_STATUS_POPULATE_CONTENT   = 0x00000008,
    CF_PROVIDER_STATUS_SYNC_INCREMENTAL   = 0x00000010,
    CF_PROVIDER_STATUS_SYNC_FULL          = 0x00000020,
    CF_PROVIDER_STATUS_CONNECTIVITY_LOST  = 0x00000040,

    CF_PROVIDER_STATUS_CLEAR_FLAGS        = 0x80000000,
    CF_PROVIDER_STATUS_TERMINATED         = 0xC0000001,
    CF_PROVIDER_STATUS_ERROR              = 0xC0000002,
} CF_SYNC_PROVIDER_STATUS;

DEFINE_ENUM_FLAG_OPERATORS( CF_SYNC_PROVIDER_STATUS );

typedef struct CF_PROCESS_INFO {
    DWORD StructSize;
    DWORD ProcessId;
    PCWSTR ImagePath;
    PCWSTR PackageName;
    PCWSTR ApplicationId;
    PCWSTR CommandLine;
    DWORD SessionId;
} CF_PROCESS_INFO;

#pragma endregion


#pragma region Platform APIs

typedef struct CF_PLATFORM_INFO {
    DWORD BuildNumber;
    DWORD RevisionNumber;
    DWORD IntegrationNumber;
} CF_PLATFORM_INFO;

STDAPI
CfGetPlatformInfo (
    _Out_ CF_PLATFORM_INFO *PlatformVersion
    );

#pragma endregion


//
//  Sync Engine APIs
//

#pragma region Sync Engine APIs

typedef enum CF_REGISTER_FLAGS {
    CF_REGISTER_FLAG_NONE                                   = 0x00000000,
    CF_REGISTER_FLAG_UPDATE                                 = 0x00000001,
    CF_REGISTER_FLAG_DISABLE_ON_DEMAND_POPULATION_ON_ROOT   = 0x00000002,
    CF_REGISTER_FLAG_MARK_IN_SYNC_ON_ROOT                   = 0x00000004,
} CF_REGISTER_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_REGISTER_FLAGS );

typedef enum CF_HYDRATION_POLICY_PRIMARY {
    CF_HYDRATION_POLICY_PARTIAL     = 0,
    CF_HYDRATION_POLICY_PROGRESSIVE = 1,
    CF_HYDRATION_POLICY_FULL        = 2,
    CF_HYDRATION_POLICY_ALWAYS_FULL = 3,
} CF_HYDRATION_POLICY_PRIMARY;

DEFINE_USHORT_ENUM( CF_HYDRATION_POLICY_PRIMARY );

typedef enum CF_HYDRATION_POLICY_MODIFIER {
    CF_HYDRATION_POLICY_MODIFIER_NONE                           = 0x0000,
    CF_HYDRATION_POLICY_MODIFIER_VALIDATION_REQUIRED            = 0x0001,
    CF_HYDRATION_POLICY_MODIFIER_STREAMING_ALLOWED              = 0x0002,
    CF_HYDRATION_POLICY_MODIFIER_AUTO_DEHYDRATION_ALLOWED       = 0x0004,
} CF_HYDRATION_POLICY_MODIFIER;

DEFINE_USHORT_ENUM( CF_HYDRATION_POLICY_MODIFIER );
DEFINE_ENUM_FLAG_OPERATORS( CF_HYDRATION_POLICY_MODIFIER );

typedef struct CF_HYDRATION_POLICY {
    CF_HYDRATION_POLICY_PRIMARY_USHORT Primary;
    CF_HYDRATION_POLICY_MODIFIER_USHORT Modifier;
} CF_HYDRATION_POLICY;

typedef enum CF_POPULATION_POLICY_PRIMARY {
    CF_POPULATION_POLICY_PARTIAL        = 0,
    CF_POPULATION_POLICY_FULL           = 2,
    CF_POPULATION_POLICY_ALWAYS_FULL    = 3,
} CF_POPULATION_POLICY_PRIMARY;

DEFINE_USHORT_ENUM( CF_POPULATION_POLICY_PRIMARY );

typedef enum CF_POPULATION_POLICY_MODIFIER {
    CF_POPULATION_POLICY_MODIFIER_NONE  = 0x0000,
} CF_POPULATION_POLICY_MODIFIER;

DEFINE_USHORT_ENUM( CF_POPULATION_POLICY_MODIFIER );
DEFINE_ENUM_FLAG_OPERATORS( CF_POPULATION_POLICY_MODIFIER );

typedef struct CF_POPULATION_POLICY {
    CF_POPULATION_POLICY_PRIMARY_USHORT Primary;
    CF_POPULATION_POLICY_MODIFIER_USHORT Modifier;
} CF_POPULATION_POLICY;

typedef enum CF_PLACEHOLDER_MANAGEMENT_POLICY {
    CF_PLACEHOLDER_MANAGEMENT_POLICY_DEFAULT          = 0x00000000,
    CF_PLACEHOLDER_MANAGEMENT_POLICY_CREATE_UNRESTRICTED     = 0x00000001,
    CF_PLACEHOLDER_MANAGEMENT_POLICY_CONVERT_TO_UNRESTRICTED = 0x00000002,
    CF_PLACEHOLDER_MANAGEMENT_POLICY_UPDATE_UNRESTRICTED     = 0x00000004,
} CF_PLACEHOLDER_MANAGEMENT_POLICY;

typedef enum CF_INSYNC_POLICY {
    CF_INSYNC_POLICY_NONE                               = 0x00000000,
    CF_INSYNC_POLICY_TRACK_FILE_CREATION_TIME           = 0x00000001,
    CF_INSYNC_POLICY_TRACK_FILE_READONLY_ATTRIBUTE      = 0x00000002,
    CF_INSYNC_POLICY_TRACK_FILE_HIDDEN_ATTRIBUTE        = 0x00000004,
    CF_INSYNC_POLICY_TRACK_FILE_SYSTEM_ATTRIBUTE        = 0x00000008,
    CF_INSYNC_POLICY_TRACK_DIRECTORY_CREATION_TIME      = 0x00000010,
    CF_INSYNC_POLICY_TRACK_DIRECTORY_READONLY_ATTRIBUTE = 0x00000020,
    CF_INSYNC_POLICY_TRACK_DIRECTORY_HIDDEN_ATTRIBUTE   = 0x00000040,
    CF_INSYNC_POLICY_TRACK_DIRECTORY_SYSTEM_ATTRIBUTE   = 0x00000080,
    CF_INSYNC_POLICY_TRACK_FILE_LAST_WRITE_TIME         = 0x00000100,
    CF_INSYNC_POLICY_TRACK_DIRECTORY_LAST_WRITE_TIME    = 0x00000200,
    CF_INSYNC_POLICY_TRACK_FILE_ALL                     = 0x0055550f,
    CF_INSYNC_POLICY_TRACK_DIRECTORY_ALL                = 0x00aaaaf0,
    CF_INSYNC_POLICY_TRACK_ALL                          = 0x00ffffff,
    CF_INSYNC_POLICY_PRESERVE_INSYNC_FOR_SYNC_ENGINE    = 0x80000000,
} CF_INSYNC_POLICY;

DEFINE_ENUM_FLAG_OPERATORS( CF_INSYNC_POLICY );

typedef enum CF_HARDLINK_POLICY {
    CF_HARDLINK_POLICY_NONE    = 0x00000000,
    CF_HARDLINK_POLICY_ALLOWED = 0x00000001,
} CF_HARDLINK_POLICY;

DEFINE_ENUM_FLAG_OPERATORS( CF_HARDLINK_POLICY );

typedef struct CF_SYNC_POLICIES {
    ULONG StructSize;
    CF_HYDRATION_POLICY Hydration;
    CF_POPULATION_POLICY Population;
    CF_INSYNC_POLICY InSync;
    CF_HARDLINK_POLICY HardLink;
    CF_PLACEHOLDER_MANAGEMENT_POLICY PlaceholderManagement;
} CF_SYNC_POLICIES;

typedef struct CF_SYNC_REGISTRATION {
    ULONG StructSize;
    LPCWSTR ProviderName;
    LPCWSTR ProviderVersion;
    _Field_size_bytes_( SyncRootIdentityLength ) LPCVOID SyncRootIdentity;
    DWORD SyncRootIdentityLength;
    _Field_size_bytes_( FileIdentityLength ) LPCVOID FileIdentity;
    DWORD FileIdentityLength;
    GUID ProviderId;
} CF_SYNC_REGISTRATION;

STDAPI
CfRegisterSyncRoot (
    _In_ LPCWSTR SyncRootPath,
    _In_ CONST CF_SYNC_REGISTRATION *Registration,
    _In_ CONST CF_SYNC_POLICIES *Policies,
    _In_ CF_REGISTER_FLAGS RegisterFlags
    );

STDAPI
CfUnregisterSyncRoot (
    _In_ LPCWSTR SyncRootPath
    );

#define CF_MAX_PRIORITY_HINT   15


typedef struct CF_CALLBACK_INFO {
    DWORD StructSize;
    CF_CONNECTION_KEY ConnectionKey;
    LPVOID CallbackContext;
    PCWSTR VolumeGuidName;
    PCWSTR VolumeDosName;
    DWORD VolumeSerialNumber;
    LARGE_INTEGER SyncRootFileId;
    _Field_size_bytes_( SyncRootIdentityLength ) LPCVOID SyncRootIdentity;
    DWORD SyncRootIdentityLength;
    LARGE_INTEGER FileId;
    LARGE_INTEGER FileSize;
    _Field_size_bytes_( FileIdentityLength ) LPCVOID FileIdentity;
    DWORD FileIdentityLength;
    PCWSTR NormalizedPath;
    CF_TRANSFER_KEY TransferKey;
    UCHAR PriorityHint;
    PCORRELATION_VECTOR CorrelationVector;
    CF_PROCESS_INFO* ProcessInfo;
    CF_REQUEST_KEY RequestKey;
} CF_CALLBACK_INFO;


typedef enum CF_CALLBACK_CANCEL_FLAGS {
    CF_CALLBACK_CANCEL_FLAG_NONE        = 0x00000000,
    CF_CALLBACK_CANCEL_FLAG_IO_TIMEOUT  = 0x00000001,
    CF_CALLBACK_CANCEL_FLAG_IO_ABORTED  = 0x00000002,
} CF_CALLBACK_CANCEL_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_CANCEL_FLAGS );

typedef enum CF_CALLBACK_FETCH_DATA_FLAGS {
    CF_CALLBACK_FETCH_DATA_FLAG_NONE                  = 0x00000000,
    CF_CALLBACK_FETCH_DATA_FLAG_RECOVERY              = 0x00000001,
    CF_CALLBACK_FETCH_DATA_FLAG_EXPLICIT_HYDRATION    = 0x00000002,
} CF_CALLBACK_FETCH_DATA_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_FETCH_DATA_FLAGS );

typedef enum CF_CALLBACK_VALIDATE_DATA_FLAGS {
    CF_CALLBACK_VALIDATE_DATA_FLAG_NONE                 = 0x00000000,
    CF_CALLBACK_VALIDATE_DATA_FLAG_EXPLICIT_HYDRATION   = 0x00000002,
} CF_CALLBACK_VALIDATE_DATA_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_VALIDATE_DATA_FLAGS );

typedef enum CF_CALLBACK_FETCH_PLACEHOLDERS_FLAGS {
    CF_CALLBACK_FETCH_PLACEHOLDERS_FLAG_NONE = 0x00000000,
} CF_CALLBACK_FETCH_PLACEHOLDERS_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_FETCH_PLACEHOLDERS_FLAGS );

typedef enum CF_CALLBACK_OPEN_COMPLETION_FLAGS {
    CF_CALLBACK_OPEN_COMPLETION_FLAG_NONE                    = 0x00000000,
    CF_CALLBACK_OPEN_COMPLETION_FLAG_PLACEHOLDER_UNKNOWN     = 0x00000001,
    CF_CALLBACK_OPEN_COMPLETION_FLAG_PLACEHOLDER_UNSUPPORTED = 0x00000002,
} CF_CALLBACK_OPEN_COMPLETION_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_OPEN_COMPLETION_FLAGS );

typedef enum CF_CALLBACK_CLOSE_COMPLETION_FLAGS {
    CF_CALLBACK_CLOSE_COMPLETION_FLAG_NONE       = 0x00000000,
    CF_CALLBACK_CLOSE_COMPLETION_FLAG_DELETED    = 0x00000001,
} CF_CALLBACK_CLOSE_COMPLETION_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_CLOSE_COMPLETION_FLAGS );

typedef enum CF_CALLBACK_DEHYDRATE_FLAGS {
    CF_CALLBACK_DEHYDRATE_FLAG_NONE            = 0x00000000,
    CF_CALLBACK_DEHYDRATE_FLAG_BACKGROUND      = 0x00000001,
} CF_CALLBACK_DEHYDRATE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_DEHYDRATE_FLAGS );

typedef enum CF_CALLBACK_DEHYDRATE_COMPLETION_FLAGS {
    CF_CALLBACK_DEHYDRATE_COMPLETION_FLAG_NONE          = 0x00000000,
    CF_CALLBACK_DEHYDRATE_COMPLETION_FLAG_BACKGROUND    = 0x00000001,
    CF_CALLBACK_DEHYDRATE_COMPLETION_FLAG_DEHYDRATED    = 0x00000002,
} CF_CALLBACK_DEHYDRATE_COMPLETION_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_DEHYDRATE_COMPLETION_FLAGS );

typedef enum CF_CALLBACK_DELETE_FLAGS {
    CF_CALLBACK_DELETE_FLAG_NONE         = 0x00000000,
    CF_CALLBACK_DELETE_FLAG_IS_DIRECTORY = 0x00000001,
    CF_CALLBACK_DELETE_FLAG_IS_UNDELETE  = 0x00000002,
} CF_CALLBACK_DELETE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_DELETE_FLAGS );

typedef enum CF_CALLBACK_DELETE_COMPLETION_FLAGS {
    CF_CALLBACK_DELETE_COMPLETION_FLAG_NONE = 0x00000000,
} CF_CALLBACK_DELETE_COMPLETION_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_DELETE_COMPLETION_FLAGS );

typedef enum CF_CALLBACK_RENAME_FLAGS {
    CF_CALLBACK_RENAME_FLAG_NONE            = 0x00000000,
    CF_CALLBACK_RENAME_FLAG_IS_DIRECTORY    = 0x00000001,
    CF_CALLBACK_RENAME_FLAG_SOURCE_IN_SCOPE = 0x00000002,
    CF_CALLBACK_RENAME_FLAG_TARGET_IN_SCOPE = 0x00000004,
} CF_CALLBACK_RENAME_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_RENAME_FLAGS );

typedef enum CF_CALLBACK_RENAME_COMPLETION_FLAGS {
    CF_CALLBACK_RENAME_COMPLETION_FLAG_NONE = 0x00000000,
} CF_CALLBACK_RENAME_COMPLETION_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CALLBACK_RENAME_COMPLETION_FLAGS );

typedef enum CF_CALLBACK_DEHYDRATION_REASON {

    CF_CALLBACK_DEHYDRATION_REASON_NONE,
    CF_CALLBACK_DEHYDRATION_REASON_USER_MANUAL,
    CF_CALLBACK_DEHYDRATION_REASON_SYSTEM_LOW_SPACE,
    CF_CALLBACK_DEHYDRATION_REASON_SYSTEM_INACTIVITY,
    CF_CALLBACK_DEHYDRATION_REASON_SYSTEM_OS_UPGRADE,

} CF_CALLBACK_DEHYDRATION_REASON;

#pragma warning( push )
#pragma warning( disable : 4201 )

typedef struct CF_CALLBACK_PARAMETERS {

    ULONG ParamSize;

    union {

        struct {

            CF_CALLBACK_CANCEL_FLAGS Flags;

            union {

                struct {
                    LARGE_INTEGER FileOffset;
                    LARGE_INTEGER Length;
                } FetchData;

            } DUMMYUNIONNAME;

        } Cancel;

        struct {
            CF_CALLBACK_FETCH_DATA_FLAGS Flags;
            LARGE_INTEGER RequiredFileOffset;
            LARGE_INTEGER RequiredLength;
            LARGE_INTEGER OptionalFileOffset;
            LARGE_INTEGER OptionalLength;
            LARGE_INTEGER LastDehydrationTime;
            CF_CALLBACK_DEHYDRATION_REASON LastDehydrationReason;
        } FetchData;

        struct {
            CF_CALLBACK_VALIDATE_DATA_FLAGS Flags;
            LARGE_INTEGER RequiredFileOffset;
            LARGE_INTEGER RequiredLength;
        } ValidateData;

        struct {
            CF_CALLBACK_FETCH_PLACEHOLDERS_FLAGS Flags;
            PCWSTR Pattern;
        } FetchPlaceholders;

        struct {
            CF_CALLBACK_OPEN_COMPLETION_FLAGS Flags;
        } OpenCompletion;

        struct {
            CF_CALLBACK_CLOSE_COMPLETION_FLAGS Flags;
        } CloseCompletion;

        struct {
            CF_CALLBACK_DEHYDRATE_FLAGS Flags;
            CF_CALLBACK_DEHYDRATION_REASON Reason;
        } Dehydrate;

        struct {
            CF_CALLBACK_DEHYDRATE_COMPLETION_FLAGS Flags;
            CF_CALLBACK_DEHYDRATION_REASON Reason;
        } DehydrateCompletion;

        struct {
            CF_CALLBACK_DELETE_FLAGS Flags;
        } Delete;

        struct {
            CF_CALLBACK_DELETE_COMPLETION_FLAGS Flags;
        } DeleteCompletion;

        struct {
            CF_CALLBACK_RENAME_FLAGS Flags;
            PCWSTR TargetPath;
        } Rename;

        struct {
            CF_CALLBACK_RENAME_COMPLETION_FLAGS Flags;
            PCWSTR SourcePath;
        } RenameCompletion;

    } DUMMYUNIONNAME;

} CF_CALLBACK_PARAMETERS;

#pragma warning( pop )

typedef
VOID
(CALLBACK *CF_CALLBACK) (
    _In_ CONST CF_CALLBACK_INFO *CallbackInfo,
    _In_ CONST CF_CALLBACK_PARAMETERS *CallbackParameters
    );

typedef enum CF_CALLBACK_TYPE {
    CF_CALLBACK_TYPE_FETCH_DATA,
    CF_CALLBACK_TYPE_VALIDATE_DATA,
    CF_CALLBACK_TYPE_CANCEL_FETCH_DATA,
    CF_CALLBACK_TYPE_FETCH_PLACEHOLDERS,
    CF_CALLBACK_TYPE_CANCEL_FETCH_PLACEHOLDERS,
    CF_CALLBACK_TYPE_NOTIFY_FILE_OPEN_COMPLETION,
    CF_CALLBACK_TYPE_NOTIFY_FILE_CLOSE_COMPLETION,
    CF_CALLBACK_TYPE_NOTIFY_DEHYDRATE,
    CF_CALLBACK_TYPE_NOTIFY_DEHYDRATE_COMPLETION,
    CF_CALLBACK_TYPE_NOTIFY_DELETE,
    CF_CALLBACK_TYPE_NOTIFY_DELETE_COMPLETION,
    CF_CALLBACK_TYPE_NOTIFY_RENAME,
    CF_CALLBACK_TYPE_NOTIFY_RENAME_COMPLETION,
    CF_CALLBACK_TYPE_NONE = 0xffffffff
} CF_CALLBACK_TYPE;

typedef struct CF_CALLBACK_REGISTRATION {
    CF_CALLBACK_TYPE Type;
    CF_CALLBACK Callback;
} CF_CALLBACK_REGISTRATION;

#define CF_CALLBACK_REGISTRATION_END {CF_CALLBACK_TYPE_NONE, NULL}

typedef enum CF_CONNECT_FLAGS {
    CF_CONNECT_FLAG_NONE                            = 0x00000000,
    CF_CONNECT_FLAG_REQUIRE_PROCESS_INFO            = 0x00000002,
    CF_CONNECT_FLAG_REQUIRE_FULL_FILE_PATH          = 0x00000004,
    CF_CONNECT_FLAG_BLOCK_SELF_IMPLICIT_HYDRATION   = 0x00000008,
} CF_CONNECT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CONNECT_FLAGS );

STDAPI
CfConnectSyncRoot (
    _In_ LPCWSTR SyncRootPath,
    _In_ CONST CF_CALLBACK_REGISTRATION *CallbackTable,
    _In_opt_ LPCVOID CallbackContext,
    _In_ CF_CONNECT_FLAGS ConnectFlags,
    _Out_ CF_CONNECTION_KEY *ConnectionKey
    );

STDAPI
CfDisconnectSyncRoot (
    _In_ CF_CONNECTION_KEY ConnectionKey
    );

STDAPI
CfGetTransferKey(
    _In_ HANDLE FileHandle,
    _Out_ CF_TRANSFER_KEY* TransferKey
    );

STDAPI_(VOID)
CfReleaseTransferKey(
    _In_ HANDLE FileHandle,
    _Out_ CF_TRANSFER_KEY* TransferKey
    );


typedef enum CF_OPERATION_TYPE {
    CF_OPERATION_TYPE_TRANSFER_DATA,
    CF_OPERATION_TYPE_RETRIEVE_DATA,
    CF_OPERATION_TYPE_ACK_DATA,
    CF_OPERATION_TYPE_RESTART_HYDRATION,
    CF_OPERATION_TYPE_TRANSFER_PLACEHOLDERS,
    CF_OPERATION_TYPE_ACK_DEHYDRATE,
    CF_OPERATION_TYPE_ACK_DELETE,
    CF_OPERATION_TYPE_ACK_RENAME,
} CF_OPERATION_TYPE;


typedef struct CF_SYNC_STATUS {
    ULONG StructSize;
    ULONG Code;
    ULONG DescriptionOffset;
    ULONG DescriptionLength;
    ULONG DeviceIdOffset;
    ULONG DeviceIdLength;
} CF_SYNC_STATUS;


typedef struct CF_OPERATION_INFO {
    ULONG StructSize;
    CF_OPERATION_TYPE Type;
    CF_CONNECTION_KEY ConnectionKey;
    CF_TRANSFER_KEY TransferKey;
    CONST CORRELATION_VECTOR* CorrelationVector;
    CONST CF_SYNC_STATUS* SyncStatus;
    CF_REQUEST_KEY RequestKey;
} CF_OPERATION_INFO;


typedef enum CF_OPERATION_TRANSFER_DATA_FLAGS {
    CF_OPERATION_TRANSFER_DATA_FLAG_NONE     = 0x00000000,
} CF_OPERATION_TRANSFER_DATA_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_TRANSFER_DATA_FLAGS );

typedef enum CF_OPERATION_RETRIEVE_DATA_FLAGS {
    CF_OPERATION_RETRIEVE_DATA_FLAG_NONE     = 0x00000000,
} CF_OPERATION_RETRIEVE_DATA_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_RETRIEVE_DATA_FLAGS );

typedef enum CF_OPERATION_ACK_DATA_FLAGS {
    CF_OPERATION_ACK_DATA_FLAG_NONE = 0x00000000,
} CF_OPERATION_ACK_DATA_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_ACK_DATA_FLAGS );

typedef enum CF_OPERATION_RESTART_HYDRATION_FLAGS {
    CF_OPERATION_RESTART_HYDRATION_FLAG_NONE            = 0x00000000,
    CF_OPERATION_RESTART_HYDRATION_FLAG_MARK_IN_SYNC    = 0x00000001,
} CF_OPERATION_RESTART_HYDRATION_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_RESTART_HYDRATION_FLAGS );

typedef enum CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAGS {
    CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAG_NONE               = 0x00000000,
    CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAG_STOP_ON_ERROR      = 0x00000001,
    CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAG_DISABLE_ON_DEMAND_POPULATION = 0x00000002,
} CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAGS );

typedef enum CF_OPERATION_ACK_DEHYDRATE_FLAGS {
    CF_OPERATION_ACK_DEHYDRATE_FLAG_NONE                  = 0x00000000,
} CF_OPERATION_ACK_DEHYDRATE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_ACK_DEHYDRATE_FLAGS );

typedef enum CF_OPERATION_ACK_RENAME_FLAGS {
    CF_OPERATION_ACK_RENAME_FLAG_NONE        = 0x00000000,
} CF_OPERATION_ACK_RENAME_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_ACK_RENAME_FLAGS );

typedef enum CF_OPERATION_ACK_DELETE_FLAGS {
    CF_OPERATION_ACK_DELETE_FLAG_NONE        = 0x00000000,
} CF_OPERATION_ACK_DELETE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPERATION_ACK_DELETE_FLAGS );

#pragma warning( push )
#pragma warning( disable : 4201 )

typedef struct CF_OPERATION_PARAMETERS {

    ULONG ParamSize;

    union {

        struct {
            CF_OPERATION_TRANSFER_DATA_FLAGS Flags;
            NTSTATUS CompletionStatus;
            _Field_size_bytes_( Length.QuadPart ) LPCVOID Buffer;
            LARGE_INTEGER Offset;
            LARGE_INTEGER Length;
        } TransferData;

        struct {
            CF_OPERATION_RETRIEVE_DATA_FLAGS Flags;
            _Field_size_bytes_( Length.QuadPart ) LPVOID Buffer;
            LARGE_INTEGER Offset;
            LARGE_INTEGER Length;
            LARGE_INTEGER ReturnedLength;
        } RetrieveData;

        struct {
            CF_OPERATION_ACK_DATA_FLAGS Flags;
            NTSTATUS CompletionStatus;
            LARGE_INTEGER Offset;
            LARGE_INTEGER Length;
        } AckData;

        struct {
            CF_OPERATION_RESTART_HYDRATION_FLAGS Flags;
            CONST CF_FS_METADATA* FsMetadata;
            _Field_size_bytes_( FileIdentityLength ) LPCVOID FileIdentity;
            DWORD FileIdentityLength;
        } RestartHydration;

        struct {
            CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAGS Flags;
            NTSTATUS CompletionStatus;
            LARGE_INTEGER PlaceholderTotalCount;
            CF_PLACEHOLDER_CREATE_INFO* PlaceholderArray;
            DWORD PlaceholderCount;
            DWORD EntriesProcessed;
        } TransferPlaceholders;

        struct {
            CF_OPERATION_ACK_DEHYDRATE_FLAGS Flags;
            NTSTATUS CompletionStatus;
            _Field_size_bytes_( FileIdentityLength ) LPCVOID FileIdentity;
            DWORD FileIdentityLength;
        } AckDehydrate;

        struct {
            CF_OPERATION_ACK_RENAME_FLAGS Flags;
            NTSTATUS CompletionStatus;
        } AckRename;

        struct {
            CF_OPERATION_ACK_DELETE_FLAGS Flags;
            NTSTATUS CompletionStatus;
        } AckDelete;

    } DUMMYUNIONNAME;

} CF_OPERATION_PARAMETERS;

#pragma warning( pop )

STDAPI
CfExecute(
    _In_ CONST CF_OPERATION_INFO *OpInfo,
    _Inout_  CF_OPERATION_PARAMETERS *OpParams
    );


STDAPI
CfUpdateSyncProviderStatus(
    _In_ CF_CONNECTION_KEY ConnectionKey,
    _In_ CF_SYNC_PROVIDER_STATUS ProviderStatus
    );

STDAPI
CfQuerySyncProviderStatus(
    _In_ CF_CONNECTION_KEY ConnectionKey,
    _Out_ CF_SYNC_PROVIDER_STATUS *ProviderStatus
    );

#pragma endregion


STDAPI
CfReportSyncStatus(
    _In_ LPCWSTR SyncRootPath,
    _In_opt_ CF_SYNC_STATUS *SyncStatus
    );


//
//  Placeholder Management APIs
//

#pragma region Placeholder Management APIs

typedef enum CF_CREATE_FLAGS {
    CF_CREATE_FLAG_NONE          = 0x00000000,
    CF_CREATE_FLAG_STOP_ON_ERROR = 0x00000001,
} CF_CREATE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CREATE_FLAGS );

STDAPI
CfCreatePlaceholders (
    _In_ LPCWSTR BaseDirectoryPath,
    _Inout_updates_(PlaceholderCount) CF_PLACEHOLDER_CREATE_INFO *PlaceholderArray,
    _In_ DWORD PlaceholderCount,
    _In_ CF_CREATE_FLAGS CreateFlags,
    _Out_opt_ PDWORD EntriesProcessed
    );

typedef enum CF_OPEN_FILE_FLAGS {
    CF_OPEN_FILE_FLAG_NONE                   = 0x00000000,
    CF_OPEN_FILE_FLAG_EXCLUSIVE              = 0x00000001,
    CF_OPEN_FILE_FLAG_WRITE_ACCESS           = 0x00000002,
    CF_OPEN_FILE_FLAG_DELETE_ACCESS          = 0x00000004,
    CF_OPEN_FILE_FLAG_FOREGROUND             = 0x00000008,
} CF_OPEN_FILE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_OPEN_FILE_FLAGS );

STDAPI
CfOpenFileWithOplock (
    _In_ LPCWSTR FilePath,
    _In_ CF_OPEN_FILE_FLAGS Flags,
    _Out_ PHANDLE ProtectedHandle
    );

STDAPI_( BOOLEAN )
CfReferenceProtectedHandle (
    _In_ HANDLE ProtectedHandle
    );

STDAPI_( HANDLE )
CfGetWin32HandleFromProtectedHandle (
    _In_ HANDLE ProtectedHandle
    );

STDAPI_( VOID )
CfReleaseProtectedHandle(
    _In_ HANDLE ProtectedHandle
    );

STDAPI_(VOID)
CfCloseHandle(
    _In_ HANDLE FileHandle
    );

typedef struct CF_FILE_RANGE {
    LARGE_INTEGER StartingOffset;
    LARGE_INTEGER Length;
} CF_FILE_RANGE;

typedef enum CF_CONVERT_FLAGS {
    CF_CONVERT_FLAG_NONE                        = 0x00000000,
    CF_CONVERT_FLAG_MARK_IN_SYNC                = 0x00000001,
    CF_CONVERT_FLAG_DEHYDRATE                   = 0x00000002,
    CF_CONVERT_FLAG_ENABLE_ON_DEMAND_POPULATION = 0x00000004,
    CF_CONVERT_FLAG_ALWAYS_FULL                 = 0x00000008,
} CF_CONVERT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_CONVERT_FLAGS );

STDAPI
CfConvertToPlaceholder (
    _In_ HANDLE FileHandle,
    _In_reads_bytes_opt_(FileIdentityLength) LPCVOID FileIdentity,
    _In_ DWORD FileIdentityLength,
    _In_ CF_CONVERT_FLAGS ConvertFlags,
    _Out_opt_ USN *ConvertUsn,
    _Inout_opt_ LPOVERLAPPED Overlapped
    );

typedef enum CF_UPDATE_FLAGS {
    CF_UPDATE_FLAG_NONE                         = 0x00000000,
    CF_UPDATE_FLAG_VERIFY_IN_SYNC               = 0x00000001,
    CF_UPDATE_FLAG_MARK_IN_SYNC                 = 0x00000002,
    CF_UPDATE_FLAG_DEHYDRATE                    = 0x00000004,
    CF_UPDATE_FLAG_ENABLE_ON_DEMAND_POPULATION  = 0x00000008,
    CF_UPDATE_FLAG_DISABLE_ON_DEMAND_POPULATION = 0x00000010,
    CF_UPDATE_FLAG_REMOVE_FILE_IDENTITY         = 0x00000020,
    CF_UPDATE_FLAG_CLEAR_IN_SYNC                = 0x00000040,
    CF_UPDATE_FLAG_REMOVE_PROPERTY              = 0x00000080,
    CF_UPDATE_FLAG_PASSTHROUGH_FS_METADATA      = 0x00000100,
    CF_UPDATE_FLAG_ALWAYS_FULL                  = 0x00000200,
    CF_UPDATE_FLAG_ALLOW_PARTIAL                = 0x00000400,
} CF_UPDATE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_UPDATE_FLAGS );

STDAPI
CfUpdatePlaceholder (
    _In_ HANDLE FileHandle,
    _In_opt_ CONST CF_FS_METADATA *FsMetadata,
    _In_reads_bytes_opt_(FileIdentityLength) LPCVOID FileIdentity,
    _In_ DWORD FileIdentityLength,
    _In_reads_opt_(DehydrateRangeCount) CONST CF_FILE_RANGE *DehydrateRangeArray,
    _In_ DWORD DehydrateRangeCount,
    _In_ CF_UPDATE_FLAGS UpdateFlags,
    _Inout_opt_ USN *UpdateUsn,
    _Inout_opt_ LPOVERLAPPED Overlapped
    );

typedef enum CF_REVERT_FLAGS {
    CF_REVERT_FLAG_NONE              = 0x00000000,
} CF_REVERT_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_REVERT_FLAGS );

STDAPI
CfRevertPlaceholder (
    _In_ HANDLE FileHandle,
    _In_ CF_REVERT_FLAGS RevertFlags,
    _Inout_opt_ LPOVERLAPPED Overlapped
    );

typedef enum CF_HYDRATE_FLAGS {
    CF_HYDRATE_FLAG_NONE             = 0x00000000,
} CF_HYDRATE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_HYDRATE_FLAGS );

STDAPI
CfHydratePlaceholder (
    _In_ HANDLE FileHandle,
    _In_ LARGE_INTEGER StartingOffset,
    _In_ LARGE_INTEGER Length,
    _In_ CF_HYDRATE_FLAGS HydrateFlags,
    _Inout_opt_ LPOVERLAPPED Overlapped
    );

typedef enum CF_DEHYDRATE_FLAGS {
    CF_DEHYDRATE_FLAG_NONE                       = 0x00000000,
    CF_DEHYDRATE_FLAG_BACKGROUND                 = 0x00000001,
} CF_DEHYDRATE_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_DEHYDRATE_FLAGS );

STDAPI
CfDehydratePlaceholder (
    _In_ HANDLE FileHandle,
    _In_ LARGE_INTEGER StartingOffset,
    _In_ LARGE_INTEGER Length,
    _In_ CF_DEHYDRATE_FLAGS DehydrateFlags,
    _Inout_opt_ LPOVERLAPPED Overlapped
    );

typedef enum CF_PIN_STATE {
    CF_PIN_STATE_UNSPECIFIED = 0,
    CF_PIN_STATE_PINNED = 1,
    CF_PIN_STATE_UNPINNED = 2,
    CF_PIN_STATE_EXCLUDED = 3,
    CF_PIN_STATE_INHERIT = 4  // set only
} CF_PIN_STATE;

typedef enum CF_SET_PIN_FLAGS {
    CF_SET_PIN_FLAG_NONE                  = 0x00000000,
    CF_SET_PIN_FLAG_RECURSE               = 0x00000001,
    CF_SET_PIN_FLAG_RECURSE_ONLY          = 0x00000002,
    CF_SET_PIN_FLAG_RECURSE_STOP_ON_ERROR = 0x00000004
} CF_SET_PIN_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_SET_PIN_FLAGS );

STDAPI
CfSetPinState (
    _In_ HANDLE FileHandle,
    _In_ CF_PIN_STATE PinState,
    _In_ CF_SET_PIN_FLAGS PinFlags,
    _Inout_opt_ LPOVERLAPPED Overlapped
    );

typedef enum CF_IN_SYNC_STATE {
    CF_IN_SYNC_STATE_NOT_IN_SYNC    = 0,
    CF_IN_SYNC_STATE_IN_SYNC        = 1
} CF_IN_SYNC_STATE;

typedef enum CF_SET_IN_SYNC_FLAGS {
    CF_SET_IN_SYNC_FLAG_NONE = 0x00000000,
} CF_SET_IN_SYNC_FLAGS;

DEFINE_ENUM_FLAG_OPERATORS( CF_SET_IN_SYNC_FLAGS );

STDAPI
CfSetInSyncState (
    _In_ HANDLE FileHandle,
    _In_ CF_IN_SYNC_STATE InSyncState,
    _In_ CF_SET_IN_SYNC_FLAGS InSyncFlags,
    _Inout_opt_ USN *InSyncUsn
    );

STDAPI
CfSetCorrelationVector (
    _In_ HANDLE FileHandle,
    _In_ const PCORRELATION_VECTOR CorrelationVector
    );

STDAPI
CfGetCorrelationVector (
    _In_ HANDLE FileHandle,
    _Out_ PCORRELATION_VECTOR CorrelationVector
    );

typedef enum CF_PLACEHOLDER_STATE {
    CF_PLACEHOLDER_STATE_NO_STATES                      = 0x00000000,
    CF_PLACEHOLDER_STATE_PLACEHOLDER                    = 0x00000001,
    CF_PLACEHOLDER_STATE_SYNC_ROOT                      = 0x00000002,
    CF_PLACEHOLDER_STATE_ESSENTIAL_PROP_PRESENT         = 0x00000004,
    CF_PLACEHOLDER_STATE_IN_SYNC                        = 0x00000008,
    CF_PLACEHOLDER_STATE_PARTIAL                        = 0x00000010,
    CF_PLACEHOLDER_STATE_PARTIALLY_ON_DISK              = 0x00000020,
    CF_PLACEHOLDER_STATE_INVALID                        = 0xffffffff,
} CF_PLACEHOLDER_STATE;

DEFINE_ENUM_FLAG_OPERATORS( CF_PLACEHOLDER_STATE );

STDAPI_( CF_PLACEHOLDER_STATE )
CfGetPlaceholderStateFromAttributeTag (
    _In_ DWORD FileAttributes,
    _In_ DWORD ReparseTag
    );

STDAPI_( CF_PLACEHOLDER_STATE )
CfGetPlaceholderStateFromFileInfo (
    _In_ LPCVOID InfoBuffer,
    _In_ FILE_INFO_BY_HANDLE_CLASS InfoClass
    );

STDAPI_( CF_PLACEHOLDER_STATE )
CfGetPlaceholderStateFromFindData (
    _In_ CONST WIN32_FIND_DATA *FindData
    );

typedef enum CF_PLACEHOLDER_INFO_CLASS {

    CF_PLACEHOLDER_INFO_BASIC = 0,
    CF_PLACEHOLDER_INFO_STANDARD = 1,

} CF_PLACEHOLDER_INFO_CLASS;

//
// Placeholder basic info
//

typedef struct CF_PLACEHOLDER_BASIC_INFO {

    CF_PIN_STATE PinState;
    CF_IN_SYNC_STATE InSyncState;
    LARGE_INTEGER FileId;
    LARGE_INTEGER SyncRootFileId;
    ULONG FileIdentityLength;
    BYTE FileIdentity[1];

} CF_PLACEHOLDER_BASIC_INFO;

//
// Placeholder standard info
//

typedef struct CF_PLACEHOLDER_STANDARD_INFO {

    LARGE_INTEGER OnDiskDataSize;
    LARGE_INTEGER ValidatedDataSize;
    LARGE_INTEGER ModifiedDataSize;
    LARGE_INTEGER PropertiesSize;
    CF_PIN_STATE PinState;
    CF_IN_SYNC_STATE InSyncState;
    LARGE_INTEGER FileId;
    LARGE_INTEGER SyncRootFileId;
    ULONG FileIdentityLength;
    BYTE FileIdentity[1];

} CF_PLACEHOLDER_STANDARD_INFO;

STDAPI
CfGetPlaceholderInfo (
    _In_ HANDLE FileHandle,
    _In_ CF_PLACEHOLDER_INFO_CLASS InfoClass,
    _Out_bytecapcount_(InfoBufferLength) PVOID InfoBuffer,
    _In_ DWORD InfoBufferLength,
    _Out_opt_ PDWORD ReturnedLength
    );

typedef enum CF_SYNC_ROOT_INFO_CLASS {

    CF_SYNC_ROOT_INFO_BASIC = 0,
    CF_SYNC_ROOT_INFO_STANDARD = 1,
    CF_SYNC_ROOT_INFO_PROVIDER = 2,

} CF_SYNC_ROOT_INFO_CLASS;

//
// SyncRoot basic info
//

typedef struct CF_SYNC_ROOT_BASIC_INFO {

    LARGE_INTEGER SyncRootFileId;

} CF_SYNC_ROOT_BASIC_INFO;


#define CF_MAX_PROVIDER_NAME_LENGTH            255
#define CF_MAX_PROVIDER_VERSION_LENGTH         255


//
// SyncRoot provider info
//

typedef struct CF_SYNC_ROOT_PROVIDER_INFO {

    CF_SYNC_PROVIDER_STATUS ProviderStatus;
    WCHAR ProviderName[CF_MAX_PROVIDER_NAME_LENGTH + 1];
    WCHAR ProviderVersion[CF_MAX_PROVIDER_VERSION_LENGTH + 1];

} CF_SYNC_ROOT_PROVIDER_INFO;


//
// SyncRoot standard info
//

typedef struct CF_SYNC_ROOT_STANDARD_INFO {

    LARGE_INTEGER SyncRootFileId;
    CF_HYDRATION_POLICY HydrationPolicy;
    CF_POPULATION_POLICY PopulationPolicy;
    CF_INSYNC_POLICY InSyncPolicy;
    CF_HARDLINK_POLICY HardLinkPolicy;
    CF_SYNC_PROVIDER_STATUS ProviderStatus;
    WCHAR ProviderName[CF_MAX_PROVIDER_NAME_LENGTH + 1];
    WCHAR ProviderVersion[CF_MAX_PROVIDER_VERSION_LENGTH + 1];
    ULONG SyncRootIdentityLength;
    BYTE SyncRootIdentity[1];

} CF_SYNC_ROOT_STANDARD_INFO;


STDAPI
CfGetSyncRootInfoByPath(
    _In_ LPCWSTR FilePath,
    _In_ CF_SYNC_ROOT_INFO_CLASS InfoClass,
    _Out_ PVOID InfoBuffer,
    _In_ DWORD InfoBufferLength,
    _Out_opt_ DWORD *ReturnedLength
    );

STDAPI
CfGetSyncRootInfoByHandle(
    _In_ HANDLE FileHandle,
    _In_ CF_SYNC_ROOT_INFO_CLASS InfoClass,
    _Out_ PVOID InfoBuffer,
    _In_ DWORD InfoBufferLength,
    _Out_opt_ DWORD *ReturnedLength
    );

typedef enum CF_PLACEHOLDER_RANGE_INFO_CLASS {

    CF_PLACEHOLDER_RANGE_INFO_ONDISK = 1,
    CF_PLACEHOLDER_RANGE_INFO_VALIDATED = 2,
    CF_PLACEHOLDER_RANGE_INFO_MODIFIED = 3,

} CF_PLACEHOLDER_RANGE_INFO_CLASS;

STDAPI
CfGetPlaceholderRangeInfo (
    _In_ HANDLE FileHandle,
    _In_ CF_PLACEHOLDER_RANGE_INFO_CLASS InfoClass,
    _In_ LARGE_INTEGER StartingOffset,
    _In_ LARGE_INTEGER Length,
    _Out_bytecapcount_(InfoBufferLength) PVOID InfoBuffer,
    _In_ DWORD InfoBufferLength,
    _Out_opt_ PDWORD ReturnedLength
    );

#pragma endregion


//
//  Progress APIs
//

#pragma region Progress APIs

STDAPI
CfReportProviderProgress (
    _In_ CF_CONNECTION_KEY ConnectionKey,
    _In_ CF_TRANSFER_KEY TransferKey,
    _In_ LARGE_INTEGER ProviderProgressTotal,
    _In_ LARGE_INTEGER ProviderProgressCompleted
    );

#if ( NTDDI_VERSION >= NTDDI_WIN10_RS5 )

STDAPI
CfReportProviderProgress2(
    _In_ CF_CONNECTION_KEY ConnectionKey,
    _In_ CF_TRANSFER_KEY TransferKey,
    _In_ CF_REQUEST_KEY RequestKey,
    _In_ LARGE_INTEGER ProviderProgressTotal,
    _In_ LARGE_INTEGER ProviderProgressCompleted,
    _In_ DWORD TargetSessionId
    );

#endif // #if (NTDDI_VERSION >= NTDDI_WIN10_RS2)

#pragma endregion


#pragma region Deprecated APIs

#pragma endregion

#endif // #if (NTDDI_VERSION >= NTDDI_WIN10_RS2)

#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#endif // CFAPI_H

Youez - 2016 - github.com/yon3zu
LinuXploit