Функция CreateHardLink


Функция CreateHardLink устанавливает жесткую связь между существующим и новым файлом. В настоящее время, эта функция поддерживается  только в NTFS.

Синтаксис

BOOL CreateHardLink(
  LPCTSTR lpFileName,                         // имя связи
  LPCTSTR lpExistingFileName,                 // имя целевого файла
  LPSECURITY_ATTRIBUTES lpSecurityAttributes  
);

Параметры

lpFileName

[in] Указатель на имя нового файла.

lpExistingFileName

[in] Указатель на имя существующего файла, на который будет указывать ссылка.

lpSecurityAttributes

Зарезервировано; должно быть ПУСТО (NULL).

Возвращаемые значения

Если функция завершается успешно, возвращаемое значение - не нуль .

Если функция завершается ошибкой, величина возвращаемого значения - нуль. Чтобы получить дополнительные сведения об ошибке, вызовите GetLastError.

Максимальное число жестких ссылок, которые могут создаться  этой функцией - 1023 на файл. Если ссылок создается больше чем 1023, в результате происходит сбойная ситуация.

Замечания

Любая запись о файле, созданная или функцией CreateFile или CreateHardLink, является жесткой ссылкой на связанный с нею файл. Дополнительные жесткие ссылки, созданные функцией CreateHardLink, дают Вам возможность  иметь несколько записей  о файле в каталоге, то есть несколько жестких ссылок на один и тот же файл. Они могут быть с различными именами в одном и том же каталоге, или они могут быть с теми же (или другими) названиями в различных каталогах. Однако, все жесткие ссылки на файл должны быть в одном и том же томе.

Поскольку жесткие ссылки - всего лишь записи о файле в каталоге, всякий раз, когда приложение изменяет файл через посредство любой жесткой связи, все приложения, используя любую другую жесткую ссылку видят изменения в файле. Если файл изменяется, модифицируются также, все записи каталога. Например, если изменяется размер файла, то все жесткие ссылки на файл покажут новый размер.

Дескриптор безопасности принадлежит файлу, на который указывает жесткая ссылка. Сама ссылка, будучи просто записью каталога, не имеет никакого дескриптора безопасности. В соответствии с этим, если Вы изменяете дескриптор безопасности любой жесткой ссылки, Вы фактически изменяете дескриптор безопасности основного файла. Все жесткие ссылки, которые указывают на файл, в соответствии с этим  включат заново определенный доступ. Нет никакого способа, чтобы на основе отдельно взятой жесткой ссылки дать файлу разные дескрипторы безопасности.

Эта функция не изменяет дескриптор безопасности связанного файла,  даже если информация дескриптора безопасности передается в параметре lpSecurityAttributes .

Чтобы удалить жесткие ссылки, используйте функцию DeleteFile. Вы можете удалять их в любом порядке, независимо от порядка, в которой они создавались.

Флажки, атрибуты, доступ и совместное использование как определено в функции CreateFile оперируют в основе каждого файла. То есть, если Вы открываете файл без возможности совместного использования, другое приложение не сможет совместно использовать файл, создавая новую жесткую ссылку на файл.

Функция CreateHardLink не работает по сетевой системе переадресации.

Обратите внимание! на то, что это, когда Вы создаете жесткую ссылку в файловой системе NTFS, информация об атрибутах файла в записи каталога обновляется только тогда, когда файл открывается или когда вызывается функция GetFileInformationByHandle  с дескриптором представляющего интерес файла.

Чтобы компилировать приложение, которое использует эту функцию, определите макрокоманду _WIN32_WINNT  как 0x0500 или выше. Подробную информацию, см. в статье Использование  заголовков SDK.

Код примера

Фрагмент нижеследующего кода демонстрирует, как вызвать функцию CreateHardLink так, чтобы она не изменила дескриптор безопасности файла.

Обратите внимание! на то, что параметр pszExistingFileName может быть исходным именем файла, или какой-либо уже существующей ссылкой на файл. После того, как этот код исполнится, pszNewLinkName ссылается на файл.
 
fCreatedLink = CreateHardLink( pszNewLinkName, pszExistingFileName, NULL); 
if (!fCreatedLink) // обработка сбойной ситуации

 

Смотри также 

Обзор Управление файламиФункции, используемые в управлении файлами, CreateFile, DeleteFile

Размещение и совместимость CreateHardLink

К

Windows XP

Да

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Нет

е

Windows Me

Нет

н

Windows 98

Нет

т

Windows 95

Нет

   

Нет

 
С

Windows 2003 Server

Да
е

Windows 2000 Server

Да
р

Windows NT    Server

Нет
в

 

 
е

 

 
 р

 

 
 

Используемая библиотека

Kernel32.lib

  Требуется DLL -
 

Заголовочный файл

 
 

- объявлено в

Winbase.h

 

- включено в

Windows.h

 

Unicode

-

 

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz