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


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

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

Синтаксис

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

Параметры

hDevice

[in] Дескриптор логического тома (раздела диска), на котором должна быть разрешена дополнительная операция чтения или записи. Чтобы извлечь дескриптор устройства, вызовите функцию CreateFile с флажками FILE_SHARE_READ и  FILE_SHARE_WRITE  в параметре dwShareMode. Процесс должен иметь привилегии Администратора, чтобы читать из или записывать в раздел диска.

dwIoControlCode

[in] Управляющий код для операции. Это значение идентифицирует конкретную операцию, которая будет выполнена и тип устройства, на котором она будет  выполнена. Для этой операции используйте FSCTL_ALLOW_EXTENDED_DASD_IO.

lpInBuffer

Не используется с этой операцией; устанавливается в ПУСТО (NULL).

nInBufferSize

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

lpOutBuffer

Не используется с этой операцией; устанавливается в ПУСТО (NULL).

nOutBuffer

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

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 должен указать на допустимую структуру OVERLAPPED, которая содержит дескриптор объекта события. Иначе, функция завершается ошибкой непредсказуемыми способами.

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

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

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

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

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

Замечания

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

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

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

Для значений асинхронного ввода-вывода этой операции, см. раздел Замечаний в описании функции  DeviceIoControl.

Чтобы извлечь дескриптор раздела диска, вызовите функцию CreateFile с параметром lpFileName с установленной  строкой следующей формы:

\\.\X:

где  X  - буква устройства.

Приложение, вызывающее CreateFile, должно также установить флажки FILE_SHARE_READ и  FILE_SHARE_WRITE в параметре dwShareMode этой функции. Для получения дополнительной информации, см. разделе Дисковые устройства в описании функции CreateFile.

Чтобы выяснить структуру раздела диска и  распознает ли система этот раздел, используйте управляющий код IOCTL_DISK_GET_DRIVE_LAYOUT_EX или IOCTL_DISK_GET_DRIVE_LAYOUT, в зависимости от обстановки. Для получения похожей информацией относительно единственного раздела диска, используйте  управляющий код IOCTL_DISK_GET_PARTITION_INFO_EX или IOCTL_DISK_GET_PARTITION_INFO, в зависимости от обстановки. Чтобы выяснять размер кластера, используйте функцию GetDiskFreeSpaceEx или GetDiskFreeSpace, по обстановке.

Смотри также

Управляющие коды, используемые в управлении файлами, CreateFile, DeviceIoControl, GetDiskFreeSpace, GetDiskFreeSpaceEx, IOCTL_DISK_GET_DRIVE_LAYOUT, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, IOCTL_DISK_GET_PARTITION_INFO, IOCTL_DISK_GET_PARTITION_INFO_EX, OVERLAPPED

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

К

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