Заполнитель всегда будет иметь Аттрибут `Архив` - PullRequest
0 голосов
/ 29 апреля 2019

Я предоставляю файлы с разными атрибутами в проектируемой файловой системе.Я делаю это в обратном вызове перечисления, а также для заполнителей:

        // GetDirectoryEnumerationCallback()
        PRJ_FILE_BASIC_INFO fileBasicInfo = { 0 };
        auto file = &holder->files[holder->index];
        fileBasicInfo.IsDirectory = file->IsDirectory;
        fileBasicInfo.FileSize = file->IsDirectory ? 0 : file->FileSize;
        fileBasicInfo.ChangeTime = file->ChangeTime;
        fileBasicInfo.CreationTime = file->CreationTime;
        fileBasicInfo.FileAttributes = file->FileAttributes;
        fileBasicInfo.LastAccessTime = file->LastAccessTime;
        fileBasicInfo.LastWriteTime = file->LastWriteTime;
        holder->index++;
        wprintf(L"Enumerator    (0x%08x)\n", fileBasicInfo.FileAttributes);
        //FILE_ATTRIBUTE_ARCHIVE
        if (holder->searchExpression.empty() || PrjFileNameMatch(file->Name, holder->searchExpression.c_str())) {
            hr = PrjFillDirEntryBuffer(file->Name,
                &fileBasicInfo,
                dirEntryBufferHandle);
            break;
        }

и

PRJ_PLACEHOLDER_INFO placeholderInfo = {};

    placeholderInfo.FileBasicInfo.IsDirectory = file.IsDirectory;
    placeholderInfo.FileBasicInfo.FileSize = file.IsDirectory ? 0 : file.FileSize;
    placeholderInfo.FileBasicInfo.ChangeTime = file.ChangeTime;
    placeholderInfo.FileBasicInfo.CreationTime = file.CreationTime;
    placeholderInfo.FileBasicInfo.FileAttributes = file.FileAttributes;
    placeholderInfo.FileBasicInfo.LastAccessTime = file.LastAccessTime;
    placeholderInfo.FileBasicInfo.LastWriteTime = file.LastWriteTime;

    wprintf(L"SendAttribute (0x%08x)\n", placeholderInfo.FileBasicInfo.FileAttributes);

    for (size_t i = 0; i < sizeof(file.Hash); i++)
        placeholderInfo.VersionInfo.ContentID[i] = wctob(file.Hash[i]);

    hr = PrjWritePlaceholderInfo(this->context,
        path.c_str(),
        &placeholderInfo,
        sizeof(placeholderInfo));

Я использую следующие атрибуты 0x00001000 (FILE_ATTRIBUTE_OFFLINE) и 0x00000080 (FILE_ATTRIBUTE_NORMAL).Однако, когда я использую Get-ItemProperty или attrib.exe, возвращается 0x00000020 (FILE_ATTRIBUTE_ARCHIVE) или если я еще не открыл файл 0x400020 (FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS).

Из документацииэто выглядит довольно просто.Но я не понимаю, как это работает.

...