You could add CopyFile2 style callback function in our code, pass everything you need as 'pvCallbackContext', that could be CopyFileEx callback pointer or pointer to a structure that contains
pointer to user callback (and anything else you might need).
I didn't look deep at this, but looks like CopyFile2 callback is called more often than CopyFileEx expects,
this could be easily implement by filtering unwanted events in your CopyFile2 callback (that will reside in kernel32).