[PSDK]
[reactos.git] / reactos / include / psdk / winbase.h
index d826ec1..d6f9da6 100644 (file)
@@ -3641,6 +3641,124 @@ typedef BOOL
   _Inout_opt_ PVOID Parameter,
   _Outptr_opt_result_maybenull_ PVOID *Context);
 
+#if _WIN32_WINNT >= 0x0601
+
+#define COPYFILE2_MESSAGE_COPY_OFFLOAD 0x00000001L
+
+typedef enum _COPYFILE2_MESSAGE_TYPE {
+  COPYFILE2_CALLBACK_NONE = 0,
+  COPYFILE2_CALLBACK_CHUNK_STARTED,
+  COPYFILE2_CALLBACK_CHUNK_FINISHED,
+  COPYFILE2_CALLBACK_STREAM_STARTED,
+  COPYFILE2_CALLBACK_STREAM_FINISHED,
+  COPYFILE2_CALLBACK_POLL_CONTINUE,
+  COPYFILE2_CALLBACK_ERROR,
+  COPYFILE2_CALLBACK_MAX,
+} COPYFILE2_MESSAGE_TYPE;
+
+typedef enum _COPYFILE2_MESSAGE_ACTION {
+  COPYFILE2_PROGRESS_CONTINUE = 0,
+  COPYFILE2_PROGRESS_CANCEL,
+  COPYFILE2_PROGRESS_STOP,
+  COPYFILE2_PROGRESS_QUIET,
+  COPYFILE2_PROGRESS_PAUSE,
+} COPYFILE2_MESSAGE_ACTION;
+
+typedef enum _COPYFILE2_COPY_PHASE {
+  COPYFILE2_PHASE_NONE = 0,
+  COPYFILE2_PHASE_PREPARE_SOURCE,
+  COPYFILE2_PHASE_PREPARE_DEST,
+  COPYFILE2_PHASE_READ_SOURCE,
+  COPYFILE2_PHASE_WRITE_DESTINATION,
+  COPYFILE2_PHASE_SERVER_COPY,
+  COPYFILE2_PHASE_NAMEGRAFT_COPY,
+  COPYFILE2_PHASE_MAX,
+} COPYFILE2_COPY_PHASE;
+
+typedef struct COPYFILE2_MESSAGE {
+  COPYFILE2_MESSAGE_TYPE Type;
+  DWORD dwPadding;
+  union {
+    struct {
+      DWORD dwStreamNumber;
+      DWORD dwReserved;
+      HANDLE hSourceFile;
+      HANDLE hDestinationFile;
+      ULARGE_INTEGER uliChunkNumber;
+      ULARGE_INTEGER uliChunkSize;
+      ULARGE_INTEGER uliStreamSize;
+      ULARGE_INTEGER uliTotalFileSize;
+    } ChunkStarted;
+    struct {
+      DWORD dwStreamNumber;
+      DWORD dwFlags;
+      HANDLE hSourceFile;
+      HANDLE hDestinationFile;
+      ULARGE_INTEGER uliChunkNumber;
+      ULARGE_INTEGER uliChunkSize;
+      ULARGE_INTEGER uliStreamSize;
+      ULARGE_INTEGER uliStreamBytesTransferred;
+      ULARGE_INTEGER uliTotalFileSize;
+      ULARGE_INTEGER uliTotalBytesTransferred;
+    } ChunkFinished;
+    struct {
+      DWORD dwStreamNumber;
+      DWORD dwReserved;
+      HANDLE hSourceFile;
+      HANDLE hDestinationFile;
+      ULARGE_INTEGER uliStreamSize;
+      ULARGE_INTEGER uliTotalFileSize;
+    } StreamStarted;
+    struct {
+      DWORD dwStreamNumber;
+      DWORD dwReserved;
+      HANDLE hSourceFile;
+      HANDLE hDestinationFile;
+      ULARGE_INTEGER uliStreamSize;
+      ULARGE_INTEGER uliStreamBytesTransferred;
+      ULARGE_INTEGER uliTotalFileSize;
+      ULARGE_INTEGER uliTotalBytesTransferred;
+    } StreamFinished;
+    struct {
+      DWORD dwReserved;
+    } PollContinue;
+    struct {
+      COPYFILE2_COPY_PHASE CopyPhase;
+      DWORD dwStreamNumber;
+      HRESULT hrFailure;
+      DWORD dwReserved;
+      ULARGE_INTEGER uliChunkNumber;
+      ULARGE_INTEGER uliStreamSize;
+      ULARGE_INTEGER uliStreamBytesTransferred;
+      ULARGE_INTEGER uliTotalFileSize;
+      ULARGE_INTEGER uliTotalBytesTransferred;
+    } Error;
+  } Info;
+} COPYFILE2_MESSAGE;
+
+typedef COPYFILE2_MESSAGE_ACTION
+(CALLBACK *PCOPYFILE2_PROGRESS_ROUTINE)(
+  _In_ const COPYFILE2_MESSAGE *pMessage,
+  _In_opt_ PVOID pvCallbackContext);
+
+typedef struct COPYFILE2_EXTENDED_PARAMETERS {
+  DWORD dwSize;
+  DWORD dwCopyFlags;
+  BOOL *pfCancel;
+  PCOPYFILE2_PROGRESS_ROUTINE pProgressRoutine;
+  PVOID pvCallbackContext;
+} COPYFILE2_EXTENDED_PARAMETERS;
+
+WINBASEAPI
+HRESULT
+WINAPI
+CopyFile2(
+  _In_ PCWSTR pwszExistingFileName,
+  _In_ PCWSTR pwszNewFileName,
+  _In_opt_ COPYFILE2_EXTENDED_PARAMETERS *pExtendedParameters);
+
+#endif /* _WIN32_WINNT >= 0x0601 */
+
 #ifdef _MSC_VER
 #pragma warning(pop)
 #endif