Ошибка CreateHardLink() на томе NTFS с кодом ошибки 1 (неверная функция)

У нас есть настольное приложение, использующее жесткие ссылки NTFS. Приложение распространяется и успешно используется более чем на 400 тыс. пользовательских ПК по всему миру.

Однако есть один клиент, у которого функция CreateHardLink() постоянно дает сбой с кодом ошибки 1 (неверная функция). Это происходит на нескольких машинах в одной фирме. Все эти машины работают под управлением Windows XP, и проблема возникает в разделе NTFS.

Мы попросили пользователя запустить fsutil.exe, чтобы убедиться, что файловая система тома на самом деле является NTFS, а также что «жесткая ссылка fsutil.exe создает новое имя.txt существующий.txt» не соответствует точному сообщению об ошибке.

Любая идея, что может быть причиной этого?


person Levi Haskell    schedule 31.07.2012    source источник


Ответы (2)


Неправильная функция будет означать, что файловая система не NTFS - я ДЕЙСТВИТЕЛЬНО удостоверился, что FS клиента - NTFS. Если вы уверены, что это NTFS, я предлагаю напрямую вызвать драйвер ядра NTFS, чтобы выяснить, что не так. Открыть файл через CreateFile() и вызвать NtSetInformationFile() с параметром FileLinkInformation; код ошибки должен сказать вам, что именно не так.

Вам понадобятся указатели: структура 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».

Роберт

person Robert Goldwein    schedule 01.08.2012
comment
До сих пор все имеющиеся у нас диагностические инструменты (включая fsutil) сообщали о файловой системе как о NTFS. Но я напишу утилиту на основе NtSetInformationFile() и отправлю ее пользователю для запуска. Спасибо - Леви - person Levi Haskell; 01.08.2012

Вы можете попробовать запустить chkdsk в этих файловых системах, может быть, они испортили записи MFT?

person tal    schedule 03.11.2014