Управляющий код FSCTL_REQUEST_OPLOCK_LEVEL_2

Управляющий код FSCTL_REQUEST_OPLOCK_LEVEL_2 требует уровень 2 уступающей блокировки в файле.

Чтобы выполнить эту операцию, вызовите функцию DeviceIoControl, используя ниже перечисленные параметры.

Синтаксис 

BOOL DeviceIoControl(
  (HANDLE) hDevice,                // дескриптор файла
  FSCTL_REQUEST_OPLOCK_LEVEL_2,    // dwIoControlCode
  NULL,                            // lpInBuffer
  0,                               // nInBufferSize
  NULL,                            // lpOutBuffer
  0,                               // nOutBufferSize
  (LPDWORD) lpBytesReturned,       // возвращаемое число байтов
  (LPOVERLAPPED) lpOverlapped      // структура OVERLAPPED
);

Параметры

hDevice
[in] Дескриптор файла или выбранный поток, в котором затребована уступающая блокировка. Чтобы извлечь дескриптор, вызовите функцию CreateFile. Файл или выбранный поток, должны быть открыты с флажком FILE_FLAG_OVERLAPPED
dwIoControlCode
[in] Управляющий код операции. Для этой операции используйте  FSCTL_REQUEST_OPLOCK_LEVEL_2.
lpInBuffer
Не используется с этой операцией; устанавливается в NULL.
nInBufferSize

Не используется с этой операцией; устанавливается в нуль ('0').

lpOutBuffer
Не используется с этой операцией; устанавливается в NULL.
nOutBufferSize

Не используется с этой операцией; устанавливается в нуль ('0').

lpBytesReturned
[out] Указатель на переменную, которая получает размер данных, сохраненных в буфере вывода данных, в байтах.

Если lpOverlapped - NULL, lpBytesReturned не может быть NULL. Даже тогда,  когда операция не возвращает никакого вывода данных, а lpOutBuffer - NULL, DeviceIoControl использует lpBytesReturned. После такой операции, значение lpBytesReturned становится бессмысленным.

Если lpOverlapped - не NULL, lpBytesReturned может быть NULL. Если этот параметр - не NULL, и операция возвращает данные, lpBytesReturned имеет значение не имеющего смысла до тех пор, пока асинхронная операция не завершиться. Чтобы извлечь информацию о числе возвращаемых данных, вызовите GetOverlappedResult. Если параметр hDevice связан с портом завершения ввода-вывода данных (I/O), Вы можете извлечь число возвращаемых данных при помощи вызова  функции GetQueuedCompletionStatus.

lpOverlapped

[in] Указатель на структуру OVERLAPPED.

Если  параметр hDevice открывался без определения флажка FILE_FLAG_OVERLAPPED, параметр lpOverlapped игнорируется.

Если параметр hDevice открывался с флажком FILE_FLAG_OVERLAPPED, операция выполняется как перекрывающая (асинхронная) операция. В этой ситуации, параметр lpOverlapped должен указать на допустимую структуру OVERLAPPED, которая содержит дескриптор объекта события. В противном случае, функция завершается ошибкой непредсказуемыми способами.

Для асинхронных операций, DeviceIoControl возвращает значение немедленно, а объект события подает сигнал, когда операция завершается. В противном случае, функция не возвращает значение до тех пор, пока операция не завершится или не произойдет ошибка.

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

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

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

Замечания

Эта операция используется только клиентскими приложениями, которые затребовали уступающую блокировку от локального сервера. Клиентские прикладные программы, запрашивающие уступающие блокировки от удаленных серверов не должны требовать их непосредственно - сетевая система переадресации прозрачно запрашивает уступающие блокировки для приложения. Попытка использовать эту операцию, чтобы потребовать уступающие блокировки от удаленных серверов даст в результате отклонение запроса.

Включение асинхронного выполнения ввода/вывода (I/O) этой операции, смотри в разделе Замечаний описания функции DeviceIoControl.

Используйте FSCTL_REQUEST_OPLOCK_LEVEL_2, чтобы затребовать уровень 2 уступающих блокировок в файле. Клиентская файловая система может кэшировать читаемые данные (но не записывать их) в заданном месте до тех пор, пока удерживается уровень 2 блокировки.

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

Управляющий код FSCTL_REQUEST_OPLOCK_LEVEL_2  завершается ошибкой, если файл открывается в не асинхронном (т. е. синхронном) режиме.

Смотри также

Управляющие коды, используемые файловыми системами, Уступающие блокировки, DeviceIoControl, CreateFileGetOverlappedResult, HasOverlappedIoCompleted, OVERLAPPED

 

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

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT

Нет

е

Windows Me

Нет

н

Windows 98

Нет

т

Windows 95

Нет

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Нет
в    
е    
р    

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

-

Используемая DLL -
 Заголовочный файл  

- объявлено в

Winioctl.h

 - включено в

-

 Unicode

-

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

Не имеется

 

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

Hosted by uCoz