Ограничение размера файла в файловой системе Dokan

Я пытаюсь создать виртуальную файловую систему, используя версию Dokan для C#.
Сейчас я хочу установить максимальный предел файла для моей файловой системы, например, файловая система не может иметь файл размером более 2 Гб.

На данный момент я делаю это в операции SetEndOfFile, но могу выдать только ошибку DiskFull и хочу вернуть что-то вроде NTStatus.FileTooLarge, но когда я это делаю, файловая система просто игнорирует этот возврат.

Есть ли варианты сделать то, что я хочу?


person Rafael Almeida    schedule 19.04.2018    source источник


Ответы (1)


Вы можете проверить смещение функции WriteFile, если смещение больше 2ГБ - вы возвращаете NtStatus.FileTooLarge.

Кроме того, вы также должны проверить buffer.Length, в случае, если вы редактируете файл на диске - он не разбивает его на более мелкие буферизованные куски, вместо этого весь файл помещается в один буфер. В этом сценарии вы должны найти способ не уничтожить файл, потому что CleanUp будет вызываться сразу после возврата NtStatus.FileTooLarge из метода WriteFile с info.DeleteOnClose установленным в true.

person Shocky2    schedule 29.04.2018