Функция LockFileEx блокирует заданный файл для монопольного доступа вызывающего процесса. Эта функция может действовать или синхронно или асинхронно.
Синтаксис
BOOL LockFileEx( HANDLE hFile, // дескриптор файла DWORD dwFlags, // параметры блокировки DWORD dwReserved, // зарезервировано DWORD nNumberOfBytesToLockLow, // младшая часть длины DWORD nNumberOfBytesToLockHigh, // старшая часть длины LPOVERLAPPED lpOverlapped // начальное смещение содержания ); |
hFile
[in] Дескриптор открытого дескриптора файла, который имеет блок байтов, блокированных для совместного использования или монопольного доступа. Дескриптор, должен быть создан с правом доступа или GENERIC_READ, или GENERIC_WRITE. Для получения дополнительной информации, см. статью Система безопасности и права доступа файла.dwFlags
[in] Этот параметр может иметь одно или несколько значений следующих ниже.Значение | Предназначение |
---|---|
LOCKFILE_FAIL_IMMEDIATELY | Функция немедленно возвращает значение, если не в состоянии получить затребованную блокировку. В противном случае, она ждет. |
LOCKFILE_EXCLUSIVE_LOCK | Функция запрашивает монопольную блокировку. В противном случае, она запрашивает совместно используемую блокировку. |
dwReserved
Параметр зарезервирован; должен быть нуль.nNumberOfBytesToLockLow
[in] Младшие 32 бита длины блокированного блока байтов.nNumberOfBytesToLockHigh
[in] Старшие 32 бита длины блокированного блока байтов.lpOverlapped
[in] Указатель на структуру OVERLAPPED, которую функция использует при запросе на установку блокировки. Эта структура, которая затребована, содержит начало смещения блокированного блока в файле. Вы должны инициализировать член hEvent этой структуры правильным дескриптором или нулем.Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - не нуль.
Если функция завершается ошибкой, величина возвращаемого значения - нуль или ПУСТО (NULL). Чтобы получить дополнительные данные об ошибке, вызовите GetLastError.
Замечания
Блокировка области файла используется, чтобы получить совместно используемый или монопольный доступ к заданной области, используя этот дескриптор файла. Если дескриптор файла унаследован процессом, созданным блокирующим процессом, дочернему процессу не предоставляется доступ к блокированной области. Если блокирующий процесс открывает файл во второй раз, он не может обратиться к заданной области через посредство этого второго дескриптора, до тех пор, пока область не разблокируется.
Блокировка части файла для монопольного доступа не допускает, что все другие процессы имели доступ и для чтения и и для записи в заданной области файла. Блокировка области, которая идет после текущей позиции метки конца файла не является ошибкой.
Блокировка части файла для совместно используемого доступа, не дает доступа к записи в заданной области файла всем процессам, включая процесс, который первым блокировал эту область. Все процессы могут читать заблокированную область.
Блокировка области файла не препятствует чтению из отображаемого представления данных файла.
Функция LockFileEx работает асинхронно тогда, если дескриптор файла открывался для асинхронного ввода - вывода, даже если не установлен флажок LOCKFILE_FAIL_IMMEDIATELY. Если требуется монопольная блокировка блока файла, который уже имеет совместно используемую или монопольную блокировку, функция возвращает ошибку ERROR_IO_PENDING. Система подаст сигнал событием, заданным в структуре OVERLAPPED после того, как предоставит блокировку. Чтобы выяснить, когда предоставили блокировку, используйте функцию GetOverlappedResult или одну из функций ожидания.
Если дескриптор файла не был открыт для асинхронного ввода - вывода, и блокировка не доступна, этот запрос ждет до тех пор, пока не предоставят блокировку или, если флажок LOCKFILE_FAIL_IMMEDIATELY не установлен, не произойдет ошибка.
Монопольные блокировки не могут накладываться на существующую блокированную область файла. Совместно используемые блокировки могут накладываться на блокированную область, чтобы обеспечить удержание блокировок только в тех областях, которые имеют совместно используемые блокировки.
Если процесс заканчивает работу с частью блокированного файла или закрывает файл, который имеет ожидающие обработки блокировки, эти блокировки отменяются операционной системой. Однако, время, которое требуется для операционной системы, чтобы деблокировать эти блокировки, зависит от доступных системных ресурсов. Поэтому, рекомендуется, чтобы ваш процесс явно деблокировал все файлы, которые он блокировал, когда заканчивал работу. Если этого не сделать, то доступ к этим файлам может быть не дан, если операционная система еще их не деблокировала.
Смотри также
Обзор Управление файлами, Функции для файлового ввода-вывода (I/O), CreateFile, LockFile, OVERLAPPED, UnlockFile, UnlockFileEx
Размещение и совместимость LockFileEx |
||
К |
Windows XP |
Да |
л |
Windows 2000 Professional |
Да |
и |
Windows NT Workstation |
Да |
е |
Windows Me |
Нет |
н |
Windows 98 |
Нет |
т |
Windows 95 |
Нет |
С |
Windows Server 2003 |
Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да |
в | ||
е | ||
р | ||
Используемая библиотека |
Kernel32.lib |
|
Используемая DLL | - | |
Заголовочный файл | ||
- объявлено в |
Winbase.h |
|
- включено в |
Windows.h |
|
Unicode |
Нет |
|
Замечания по платформе |
Не имеется |