Докан: Должен ли я самостоятельно управлять файлами и правами доступа

Я пытаюсь создать драйвер файловой системы с Dokan. Но теперь я запутался, должен ли я сам справиться со сложными вещами.

Некоторые примеры:

  • Два последовательных звонка CreateFile() с установленным режимом обмена 0,
  • Удалить открытый файл (без FILE_SHARE_DELETE задавать).
  • Запрос FILE_GENERIC_WRITE доступ, когда файл был открыт с FIlE_SHARE_READ,

В этих условиях Windows, очевидно, вернет ошибку. Но я не уверен, что это будет автоматически обрабатываться ядром Windows или является обязанностью моего приложения файловой системы.

-1

Решение

когда ядро ​​обрабатывает запрос на создание / открытие файла (скажем, IoCreateFile\[Ex\]) проверяй только что ShareAccess иметь действующую маску:

if (ShareAccess & ~FILE_SHARE_VALID_FLAGS) return STATUS_INVALID_PARAMETER;

и хранить ShareAccess в IO_STACK_LOCATION.Parameters.Create.ShareAccess тогда уже задача драйвера FS использовать / проверить его. однако обычно драйверы FS используют систему, поставляемую IoCheckShareAccess рутина для этого (посмотрите, например, FatCheckShareAccess)

для удаления файла — открываем файл с опцией FILE_DELETE_ON_CLOSE, Ядро только проверяет, что в этом случае мы запрашиваем DELETE в DesiredAccess

if ((CreateOptions & FILE_DELETE_ON_CLOSE) && !(DesiredAccess & DELETE)) return STATUS_INVALID_PARAMETER;

но главная задача справиться с этим — ответственность ФС — искать DeleteOnClose в create.c

Запрос FILE_GENERIC_WRITE доступ, когда файл был открыт с
FIlE_SHARE_READ

эта проверка точно сделана в IoCheckShareAccess (ищите это код в iosubs.c ) но FS должен напрямую вызвать эту процедуру с IrpSp->Parameters.Create.ShareAccess

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]