Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举NTFS MFT:FSCTL_ENUM_USN_数据和USN_RECORD_V3支持_C#_C++_Ntfs_Ntfs Mft_Usn - Fatal编程技术网

C# 枚举NTFS MFT:FSCTL_ENUM_USN_数据和USN_RECORD_V3支持

C# 枚举NTFS MFT:FSCTL_ENUM_USN_数据和USN_RECORD_V3支持,c#,c++,ntfs,ntfs-mft,usn,C#,C++,Ntfs,Ntfs Mft,Usn,我使用枚举NTFS MFT,以便基于USN_记录文件引用编号构建目录数据库。我正在构建这个数据库,以便通过使用NTFS USN更改日志和读取USN_记录(使用FileReferenceNumber和ParentFileReferenceNumber,它们引用目录数据库)来监视NTFS驱动器上的文件更改。有关执行此操作的信息,请参阅 我的问题是USN记录版本。如果您查看,则支持与(FILE_ID_128)不同的FileReferenceNumber(DWORDLONG)数据类型。如果FSCTL_E

我使用枚举NTFS MFT,以便基于USN_记录文件引用编号构建目录数据库。我正在构建这个数据库,以便通过使用NTFS USN更改日志和读取USN_记录(使用FileReferenceNumber和ParentFileReferenceNumber,它们引用目录数据库)来监视NTFS驱动器上的文件更改。有关执行此操作的信息,请参阅

我的问题是USN记录版本。如果您查看,则支持与(FILE_ID_128)不同的FileReferenceNumber(DWORDLONG)数据类型。如果FSCTL_ENUM_USN_数据支持USN_RECORD_V3,那么这就可以了。问题是USN_RECORD_V3在Windows 10中使用,而USN_RECORD_V2在Windows 7中使用

FSCTL_ENUM_USN_数据接受或作为其输入缓冲区。我假设V1支持的文件\u ID\u 128 fileReferenceNumber,但这个假设被证明是不正确的。似乎不支持USN_RECORD_V3及其关联的FileReferenceNumber数据类型。因此,在使用USN_RECORD_V3或更高版本的windows上,使用NTFS更改日志监视NTFS驱动器上的更改现在是一个大问题

我找到了一个临时解决方案在Windows 10上枚举MFT时,FSCTL_READ_ENUM_数据仅返回USN_RECORD_V2,给出DWORDLONG类型的FileReferenceNumber。反过来,我被迫将这些DWORDLONG FileReferenceNumber位移到128位缓冲区中,以便目录缓存与调用返回的USN_RECORD_v3匹配


然而,我忍不住觉得我错过了什么。是否有人有任何其他解决这个问题的方法,或者可以采取任何替代方法?请记住,监视程序未运行时对驱动器所做的更改对我的项目至关重要。

您实际使用哪种语言?目前它都被标记为C++和C++?然而,C++的例子或解决方案是受欢迎的,假设它们使用Win32 API调用。在Windows 10上,仍然可以使用UnnReCordOnv2。FSCTL_READ_USN_JOURNAL使用nInBufferSize解释输入缓冲区中预期的USN_记录版本。