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


Управляющий код FSCTL_GET_NTFS_FILE_RECORD  извлекает первую запись  файла, который находится в использовании и имеет равное или меньшее порядковое  значение, чем затребованный номер ссылки файла.

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

Синтаксис

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

Параметры

hDevice

[in] Дескриптор тома из которого должна извлекаться  информация о записи файла. Чтобы открыть том и извлечь его дескриптор, вызовите функцию CreateFile. Открытие тома с любым доступом для чтения или записи достаточно, чтобы извлечь запись файла. Для получения дополнительной информации, см. статью Защита файла и права доступа.

dwIoControlCode

[in] Управляющий код для операции.  Используйте для этой операции FSCTL_GET_NTFS_FILE_RECORD.

lpInBuffer

[out] Указатель на буфер ввода данных, который - структура NTFS_FILE_RECORD_INPUT_BUFFER. В этот буфер включается идентификатор файла, соответствующий записи NTFS файла, для которого возвращается информация.

nInBufferSize

[in] Размер буфера ввода данных, в байтах.

lpOutBuffer

[out] Указатель на буфер вывода данных, который - структура NTFS_FILE_RECORD_OUTPUT_BUFFER. Запись файла, связанная с идентификатором файла, указанным в буфере ввода данных возвращается в этом буфере.  За конкретной информацией о том, как установить правильный размер этого буфера, обратитесь к разделу Замечания.

nOutBufferSize

[in] Размер, буфера вывода данных, в байтах.

lpBytesReturned

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

Если буфер вывода данных является слишком маленьким, вызов завершается ошибкой, GetLastError возвращает ERROR_INSUFFICIENT_BUFFER, а lpBytesReturned становится равным нулю.

Если параметр 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 возвращает не нулевое значение.

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

Замечания

Этот управляющий код перечисляет идентификаторы файла нисходящим способом и всегда возвращает запись файла, которая находится в использовании. Это означает то, что идентификатор файла, возвращенный этим управляющим кодом не может быть одним и тем же идентификатором файла, указанным в буфере ввода данных. Например, если идентификаторы файла, от 1 до 9 и 15 находятся в использовании, идентификаторы файла от 10 до 14 - не используются, и затребована запись файла, соответствующая идентификатору 15 , то эта запись файла и будет возвращена. Если затребованы записи файла, соответствующие идентификатору файла от 10 до 14, то будет возвращена запись файла, соответствующая идентификатору файла 9 . Если затребована какая-либо  из записей файла, соответствующая идентификаторам файла от 1 до 9 , то эта запись файла и будет возвращена.

Чтобы выяснять правильный размер буфера вывода данных, на который указывает параметр  lpOutBuffer, сначала вызовите управляющий код FSCTL_GET_NTFS_VOLUME_DATA , чтобы получить размер одной записи файла. Это должно быть значение члена BytesPerFileRecordSegment  возвращаемой структуры NTFS_VOLUME_DATA_BUFFER. Затем установите размер буфера вывода данных как в выражении ниже:

sizeof(NTFS_FILE_RECORD_OUTPUT_BUFFER) + размер записи файла - 1

Если файл состоит из нескольких записей файла, то они должны извлекаться индивидуально.

Смотри также

Управляющие коды, используемые в управлении файлами, NTFS_FILE_RECORD_INPUT_BUFFER, NTFS_FILE_RECORD_OUTPUT_BUFFER, DeviceIoControl

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

К

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