Dokan:我应该自己处理文件共享和访问权限吗

Dokan: Should I handle file sharing and access rights myself

我正在尝试使用 Dokan 创建文件系统驱动程序。但现在我对是否应该自己处理复杂的事情感到困惑。

一些示例:

在这些条件下,Windows显然会return出错。但我不确定它会由 Windows 内核自动处理,还是我的文件系统应用程序的职责。

当内核处理 create/open 文件请求时(例如 IoCreateFile\[Ex\]),它只检查 ShareAccess 是否具有有效掩码:

if (ShareAccess & ~FILE_SHARE_VALID_FLAGS) return STATUS_INVALID_PARAMETER;

并将 ShareAccess 存储在 IO_STACK_LOCATION.Parameters.Create.ShareAccess 中,然后 FS 驱动程序任务 use/check 它。但是通常 FS 驱动程序使用系统提供的 IoCheckShareAccess routine for this (look for example FatCheckShareAccess)

对于删除文件 - 我们使用选项 FILE_DELETE_ON_CLOSE 打开文件。内核只检查在这种情况下我们在 DesiredAccess

中请求 DELETE

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

但主要任务处理这是 FS 的责任 - 搜索 DeleteOnClose in create.c

Request FILE_GENERIC_WRITE access when the file has been opened with FIlE_SHARE_READ

此检查完全在 IoCheckShareAccess (look for it code in iosubs.c 中完成)但 FS 必须直接使用 IrpSp->Parameters.Create.ShareAccess

调用此例程