Winapi 找出是否有两个句柄是指向同一文件的硬链接
(这个问题很棘手……可能需要了解NTFS和/或NT本机API的使用;请注意。):) 如果给我两个Winapi 找出是否有两个句柄是指向同一文件的硬链接,winapi,handle,ntfs,hardlink,Winapi,Handle,Ntfs,Hardlink,(这个问题很棘手……可能需要了解NTFS和/或NT本机API的使用;请注意。):) 如果给我两个HANDLEs来处理两个文件,我如何确定(不仅仅是高概率地)这两个HANDLEs是否属于磁盘上完全相同的文件和流 这意味着,例如,检查8字节NTFS文件ID是不够的,因为具有相同文件ID的两个句柄可以指向同一文件的不同数据流,我需要找出这两个流是否真的相同,只是名称不同(硬链接) (这有什么用?这样,如果我想对文件夹中的所有文件执行操作,我不会对具有不同名称的同一数据流执行两次操作。)这需要(),要求
HANDLE
s来处理两个文件,我如何确定(不仅仅是高概率地)这两个HANDLE
s是否属于磁盘上完全相同的文件和流
这意味着,例如,检查8字节NTFS文件ID是不够的,因为具有相同文件ID的两个句柄可以指向同一文件的不同数据流,我需要找出这两个流是否真的相同,只是名称不同(硬链接)
(这有什么用?这样,如果我想对文件夹中的所有文件执行操作,我不会对具有不同名称的同一数据流执行两次操作。)这需要(),要求提供FileStreamInfo。返回流名称
应注意SDK文档中的此警告:
某些文件信息类
在工作上表现稍有不同
不同的操作系统版本。
这些类由
基本驱动因素,以及任何
他们返回的信息以
操作系统之间的更改
释放
避免依赖程序中随时可用(或应该可用)的恢复信息。这需要()请求文件流信息。返回流名称
应注意SDK文档中的此警告:
某些文件信息类
在工作上表现稍有不同
不同的操作系统版本。
这些类由
基本驱动因素,以及任何
他们返回的信息以
操作系统之间的更改
释放
避免依赖程序中随时可用(或应该可用)的恢复信息。另外值得注意的是,GetFileInformationByHandleEx仅在Vista及更高版本上可用。(XP不会很快消亡,依我看:)对不起,我没有提到XP兼容性很重要(但我想这总比什么都没有好——如果与NtQueryObject
结合使用,这样我就可以比较路径和流名称。谢谢!(想想看,NtQueryInformationFile
和文件流信息
可能在XP上工作…)@Leo@Lambert For XP您可以通过链接FileExtd.lib来获得此函数,至少根据MSDN文档,所以它看起来像是XP上的一个选项。我刚刚意识到,这似乎并不完全符合我的要求…GetFileInformationByHandleEx
返回当前文件的流列表,而不是当前流。它不会告诉您如果两个句柄是相同的底层流,请告诉我。我遗漏了什么吗?还值得注意的是,GetFileInformationByHandleEx仅在Vista及以上版本上可用。(XP不会很快消亡,依我看:))对不起,我没有提到XP兼容性很重要(但我想这总比什么都没有好——如果与NtQueryObject
结合使用,这样我就可以比较路径和流名称。谢谢!(想想看,NtQueryInformationFile
和文件流信息
可能在XP上工作…)@Leo@Lambert For XP您可以通过链接FileExtd.lib来获得此函数,至少根据MSDN文档,所以它看起来像是XP上的一个选项。我刚刚意识到,这似乎并不完全符合我的要求…GetFileInformationByHandleEx
返回当前文件的流列表,而不是当前流。它不会告诉您如果这两个句柄是同一个底层流,请告诉我。我是否遗漏了任何内容?