在云文件中删除 API 已停止 Windows 21H1

Delete in Cloud Files API stopped working on Windows 21H1

我正在使用 Windows Cloud Filter API 创建虚拟驱动器。删除回调在 Windows Home 21H1 19043.1165 (cldflt.sys 10.0.19041.1110) 上按预期停止工作。如果我 return 来自 CF_CALLBACK_TYPE_NOTIFY_DELETE 的错误代码,无论如何都会删除脱水占位符,无论我 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, &params);
}

我已经测试了从 Windows Explorer 和 Windows 21H1 上的命令提示符删除。结果相同 - 占位符被删除。

我还重新测试了旧版本的删除 - Windows 10 Pro 1909 (18363.1556) (cldflt.sys 10.0.18362.1533) 一切都按预期工作 - 如果我 return删除回调错误文件未删除。

我想这是最新 Windows 更新中的一个错误。有人能找到解决此行为的方法吗?

这是 Windows 云过滤器 API 中的一个已知问题。它影响 Windows 20H1 及更高版本。以下是关于这个问题的讨论:https://docs.microsoft.com/en-us/answers/questions/75240/bug-report-cfapi-ackdelete-borken-on-win10-2004.html 据我所知,目前还没有任何真正的解决方案。返回任何特定的错误代码都无济于事。唯一可能的解决方案是稍后在同步期间在本地文件系统中重新创建已删除的文件。

刚刚在 Windows 11(build 10.0.22000.194)上测试过,看来这个错误终于被修复了。