Воспроизведите код ошибки ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 из ReplaceFile - PullRequest
5 голосов
/ 18 июля 2011

Я использую функцию ReplaceFile Win32 как часть операции для получения атомарного поведения.

Из трех специальных кодов ошибок для этой функции я смог воспроизвести и восстановить (откат) из двух: ERROR_UNABLE_TO_MOVE_REPLACEMENT и ERROR_UNABLE_TO_REMOVE_REPLACED.

Мои вопросы связаны с третьим кодом ошибки: ERROR_UNABLE_TO_MOVE_REPLACEMENT _2 .

  1. Кто-нибудь видел этот код ошибки? При каких условиях это возможно?
  2. Есть идеи, как воспроизвести эту ошибку, чтобы я мог проверить путь в своем коде, который восстанавливается из нее?
  3. Я понял из документации, что для восстановления (отката) после этой ошибки мне нужно будет переименовать замененный файл обратно в его первоначальное имя, потому что ReplaceFile оставит его с именем файла резервной копии. Кто-нибудь может убедиться, что это фактически состояние, в котором ReplaceFile оставляет файлы?

Еще несколько подробностей, если это поможет:

  • ReplaceFile вызывается с ненулевым именем файла резервной копии (фактически ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 не может произойти, если задано пустое имя резервной копии).
  • Я также передаю флаг REPLACEFILE_WRITE_THROUGH.
  • Все файлы существуют на одном томе NTFS.

1 Ответ

1 голос
/ 14 сентября 2013

ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 происходит, когда атрибуты и вторичные потоки данных были присоединены к файлу замены, но сам первичный файл не может быть заменен.

Ваши предположения о выздоровлении верны.

...