Winapi Windows投影文件系统只读?
我尝试使用来实现一个用户模式的ram驱动器(以前我使用的是Dokan)。我有两个问题:Winapi Windows投影文件系统只读?,winapi,projfs,Winapi,Projfs,我尝试使用来实现一个用户模式的ram驱动器(以前我使用的是Dokan)。我有两个问题: 这是只读投影吗?当我从记事本打开文件并写入时,我找不到任何发送给我的通知 使用PrjWriteFileData()后,是否在磁盘上实际创建了该文件?据我所知,是的 在这种情况下,如果没有对投影文件进行写入,那么使用这个库可以做什么有用的事情呢?在我看来,唯一有用的事情是从其他地方(比如,远程repo)创建一个目录树,但除此之外什么都没有。多坎似乎仍然是一条路要走。简短的回答: 它不是只读的,但您不能通过投影文
在这种情况下,如果没有对投影文件进行写入,那么使用这个库可以做什么有用的事情呢?在我看来,唯一有用的事情是从其他地方(比如,远程repo)创建一个目录树,但除此之外什么都没有。多坎似乎仍然是一条路要走。简短的回答:
WriteFileData
方法用于填充“暂存”(投影)文件系统上的占位符文件,因此,它不会影响“源”文件系统PrjWritePlaceholderInfo
。。。这些占位符表示备份存储在
它们创建的时间。这些缓存项与这些项组合在一起
由提供者在枚举中投影,构成客户端的
备份存储的“视图”。提供商可能不时希望
更新客户端的视图,无论是否因为备份中的更改
存储,或由于用户为更改其
视图
再一次,想象一下在git存储库中切换分支;如果文件在另一个分支中不同,则必须更新该文件。继续回答问题(1)。您希望从特定分支进行“推送”。首先,您必须知道修改了哪些文件。如果在修改文件时没有记录占位符信息,您将无法正确执行(至少在git存储库示例中是这样)
记住,占位符在修改时会被真实文件替换?一个ProjFS有OnNotifyFileHandleClosedFileModifiedOrDeleted
事件。以下是回调的签名:
public void NotifyFileHandleClosedFileModifiedOrDeletedCallback(
string relativePath,
bool isDirectory,
bool isFileModified,
bool isFileDeleted,
uint triggeringProcessId,
string triggeringProcessImageFileName)
就我们的理解而言,这里最重要的参数是relativePath
。它将包含“scratch”文件系统(投影)中修改的文件的名称。在这里,您还知道该文件是一个真实的文件(不是占位符),并且已写入磁盘(也就是说,在写入文件之前,您将无法拦截调用)。现在您可以将其复制到des