I am creating virtual drive using Windows Cloud Filter API. The delete callback stopped working as expected on Windows Home 21H1 19043.1165 (cldflt.sys 10.0.19041.1110). If I return an error code from the CF_CALLBACK_TYPE_NOTIFY_DELETE, the dehydrated placeholder is deleted anyway, regardless of the error code that I return:
void CALLBACK FakeCloudProvider::OnNotifyDelete(
_In_ CONST CF_CALLBACK_INFO* callbackInfo,
_In_ CONST CF_CALLBACK_PARAMETERS* callbackParameters)
{
CF_OPERATION_INFO opInfo = { 0 };
opInfo.StructSize = sizeof(CF_OPERATION_INFO);
opInfo.Type = CF_OPERATION_TYPE_ACK_DELETE;
opInfo.ConnectionKey = callbackInfo->ConnectionKey;
opInfo.TransferKey = callbackInfo->TransferKey;
opInfo.CorrelationVector = callbackInfo->CorrelationVector;
opInfo.RequestKey = callbackInfo->RequestKey;
CF_SYNC_STATUS_MSG* syncStatus = new CF_SYNC_STATUS_MSG;
syncStatus->Code = STATUS_FILE_LOCKED_WITH_WRITERS;
syncStatus->SetMsg(L"MY TEST");
opInfo.SyncStatus = syncStatus;
CF_OPERATION_PARAMETERS params = {0};
params.ParamSize = sizeof(CF_OPERATION_PARAMETERS);
params.AckDelete.Flags = CF_OPERATION_ACK_DELETE_FLAG_NONE;
// I have also tested many other error codes.
params.AckDelete.CompletionStatus = STATUS_FILE_LOCKED_WITH_WRITERS;
HRESULT res = CfExecute(&opInfo, ¶ms);
}
I have tested delete from both Windows Explorer and from command prompt on Windows 21H1. The result is identical - placeholder is deleted.
I have also retested delete on the older version - Windows 10 Pro 1909 (18363.1556) (cldflt.sys 10.0.18362.1533) and everything worked as expected - if I return an error from the delete callback the file is NOT deleted.
I guess this is a bug in latest Windows update. Was anybody able to find a solution for this behavior?