1

我们有一个使用 NTFS 硬链接的桌面应用程序。该应用程序已在全球超过 400K 用户 PC 上成功分发和使用。

但是,有一位客户的 CreateHardLink() 函数始终失败,错误代码为 1(函数不正确)。这发生在同一家公司的多台机器上。所有这些机器都运行 Windows XP,并且问题发生在 NTFS 分区上。

我们已要求用户运行 fsutil.exe 以确认卷文件系统实际上是 NTFS,并且“fsutil.exe hardlink create newname.txt existing.txt”无法显示确切的错误消息。

知道是什么原因造成的吗?

4

2 回答 2

1

不正确的功能将表明文件系统不是 NTFS - 我真的要确保客户端的 FS 是 NTFS。如果您确定它是 NTFS,我建议直接调用 NTFS 内核驱动程序来找出问题所在。通过 CreateFile() 打开文件并使用参数 FileLinkInformation 调用 NtSetInformationFile();错误代码应该准确地告诉您出了什么问题。

您需要的指针是 FILE_LINK_INFORMATION 结构 (http://msdn.microsoft.com/en-us/library/windows/hardware/ff540324%28v=vs.85%29.aspx) 和 ZwSetInformationFile (http://msdn. microsoft.com/en-us/library/windows/hardware/ff567096%28v=vs.85%29.aspx),但不能在内核外使用 Zw*,所以使用 Nt* 版本。不过,即使使用 Nt* 函数也有点棘手。

无论如何, fsutil 的正确语法是“fsutil hardlink create”。

罗伯特

于 2012-08-01T12:36:31.097 回答
0

您可以尝试在这些文件系统上运行 chkdsk,会不会是它们损坏了 MFT 记录?

于 2014-11-03T19:58:10.350 回答