@@ -487,13 +487,15 @@ BOOL WINAPI DECLSPEC_HOTPATCH AreFileApisANSI(void)
487487 return !oem_file_apis ;
488488}
489489
490-
491- /***********************************************************************
492- * CopyFileExW (kernelbase.@)
490+ /******************************************************************************
491+ * copy_file
493492 */
494- BOOL WINAPI CopyFileExW ( const WCHAR * source , const WCHAR * dest , LPPROGRESS_ROUTINE progress ,
495- void * param , BOOL * cancel_ptr , DWORD flags )
493+ static BOOL copy_file ( const WCHAR * source , const WCHAR * dest , COPYFILE2_EXTENDED_PARAMETERS * params )
496494{
495+ DWORD flags = params ? params -> dwCopyFlags : 0 ;
496+ BOOL * cancel_ptr = params ? params -> pfCancel : NULL ;
497+ PCOPYFILE2_PROGRESS_ROUTINE progress = params ? params -> pProgressRoutine : NULL ;
498+
497499 static const int buffer_size = 65536 ;
498500 HANDLE h1 , h2 ;
499501 FILE_BASIC_INFORMATION info ;
@@ -502,6 +504,11 @@ BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUT
502504 BOOL ret = FALSE;
503505 char * buffer ;
504506
507+ if (cancel_ptr )
508+ FIXME ("pfCancel is not supported\n" );
509+ if (progress )
510+ FIXME ("PCOPYFILE2_PROGRESS_ROUTINE is not supported\n" );
511+
505512 if (!source || !dest )
506513 {
507514 SetLastError ( ERROR_INVALID_PARAMETER );
@@ -577,7 +584,7 @@ BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUT
577584 count -= res ;
578585 }
579586 }
580- ret = TRUE;
587+ ret = TRUE;
581588done :
582589 /* Maintain the timestamp of source file to destination file */
583590 info .FileAttributes = 0 ;
@@ -589,6 +596,37 @@ BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUT
589596 return ret ;
590597}
591598
599+ /***********************************************************************
600+ * CopyFile2 (kernelbase.@)
601+ */
602+ HRESULT WINAPI CopyFile2 ( const WCHAR * source , const WCHAR * dest , COPYFILE2_EXTENDED_PARAMETERS * params )
603+ {
604+ return copy_file (source , dest , params ) ? S_OK : HRESULT_FROM_WIN32 (GetLastError ());
605+ }
606+
607+
608+ /***********************************************************************
609+ * CopyFileExW (kernelbase.@)
610+ */
611+ BOOL WINAPI CopyFileExW ( const WCHAR * source , const WCHAR * dest , LPPROGRESS_ROUTINE progress ,
612+ void * param , BOOL * cancel_ptr , DWORD flags )
613+ {
614+ COPYFILE2_EXTENDED_PARAMETERS params ;
615+
616+ if (progress )
617+ FIXME ("LPPROGRESS_ROUTINE is not supported\n" );
618+ if (cancel_ptr )
619+ FIXME ("cancel_ptr is not supported\n" );
620+
621+ params .dwSize = sizeof (params );
622+ params .dwCopyFlags = flags ;
623+ params .pProgressRoutine = NULL ;
624+ params .pvCallbackContext = NULL ;
625+ params .pfCancel = NULL ;
626+
627+ return copy_file ( source , dest , & params );
628+ }
629+
592630
593631/**************************************************************************
594632 * CopyFileW (kernelbase.@)
0 commit comments