Just a quick post with an update which hopefully might help someone experiencing the same issue.
We had been experiencing the VSS_WS_FAILED_AT_PREPARE_SNAPSHOT error on our new Exchange 2016 VM running on Server 2012 R2 on a 2012 R2 Hyper-V failover cluster. Whenever the job was run with application aware processing enabled it would fail, running without the option would succeed each time but without obviously the truncation of the logs, which we needed.
Initially we though we just needed to be on the latest copy of Veeam 9.5 to support Exchange 2016, but even after upgrading we still had the same issue. We have several other VMs being backed up successfully on the same cluster including a 2012 R2 server which had SQL server installed and application aware processing enabled.
Having read through many of the previous posts in this and other threads we came across a rather strange fix which worked in our scenario.
Our VM had multiple VHDX files stored on different LUNs, the primary LUN where the machines' OS drive and the config was stored had a folder structure Share-Name\VM-Name\Virtual Hard Disks\VHDX_file
After checking through the event logs logs on the host which held the VM there was a Hyper-V-VMMS Event ID 16370 entry with the following message...
'VM-Name' cannot create the storage required for the checkpoint using disk C:\ClusterStorage\Share-Name\VM-Name_D.vhdx: General access denied error (0x80070005). (Virtual machine ID XXXXX)
It seemed odd that the message would reference the file relating to the D drive of the VM rather than the primary OS drive which was on a different LUN. The one thing we did notice was that the VHDX file was actually placed in the root of the share since it was the only item on the LUN. Checking our other VMs none of the other VHDX files were in the root of any of our LUNS.
For us the fix was to create a folder (in our case called Virtual Hard Disks) on the share and store the VHDX file within the folder. Low and behold after doing that the job ran successfully with application aware processing enabled.
So for those who may find this page, if you are running a Hyper-V CSV and you have multiple LUNs for different drives on the VM, might be worth checking if any of those VHDX files have been dumped in the root of the shared folder.