Поделиться через


Функция IoWritePartitionTable (ntddk.h)

Подпрограмма IoWritePartitionTableустарела и предоставляется только для поддержки существующих драйверов. Новые драйверы должны использовать IoWritePartitionTableEx.

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

Синтаксис

NTSTATUS IoWritePartitionTable(
  [in] PDEVICE_OBJECT            DeviceObject,
  [in] ULONG                     SectorSize,
  [in] ULONG                     SectorsPerTrack,
  [in] ULONG                     NumberOfHeads,
  [in] _DRIVE_LAYOUT_INFORMATION *PartitionBuffer
);

Параметры

[in] DeviceObject

Указатель на объект устройства, представляющий диск, таблицы разделов которого необходимо записать.

[in] SectorSize

Задает размер секторов на устройстве в байтах.

[in] SectorsPerTrack

Указывает размер дорожки на устройстве.

[in] NumberOfHeads

Указывает количество дорожек на цилиндр.

[in] PartitionBuffer

Указатель на буфер макета диска, содержащий записи списка секций. Дополнительные сведения см. в разделе DRIVE_LAYOUT_INFORMATION.

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

IoWritePartitionTablo возвращает код состояния STATUS_SUCCESS, если все операции записи были выполнены без ошибок. В случае сбоя коды ошибок, возвращаемые IoWritePartitionTable , могут включать, помимо прочего, следующий список:

Код возврата Описание
STATUS_DEVICE_NOT_READY Указывает на сбой при чтении правильной геометрии диска.
STATUS_INSUFFICIENT_RESOURCES Указывает на сбой при выделении необходимых ресурсов (например, памяти кучи, IRP и т. д.).
STATUS_UNSUCCESSFUL Указывает, что нулевой сектор не имеет ожидаемой сигнатуры диска MBR.

Комментарии

IoWritePartitionTable должен использоваться только драйверами дисков. Другие драйверы должны использовать вместо этого запрос IOCTL_DISK_SET_DRIVE_LAYOUT дискового ввода-вывода.

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

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

Приложения, которые создают и удаляют секции и требуют полных описаний системы, должны вызывать IoReadPartitionTable с параметромReturnRecognizedPartitions со значением FALSE. Структуру макета диска можно изменить с помощью программы системного формата, чтобы отразить новую конфигурацию диска.

IoWritePartitionTable является синхронным. Он должен вызываться подпрограммой Dispatch драйвера диска или потоком драйвера. Таким образом, все потоки пользователя и файловой системы должны быть готовы к переходу в состояние ожидания при выдаче запроса на управление устройством для сброса типов секций для устройства.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlIoPassive5(wdm), PowerIrpDDis(wdm)

См. также раздел

IoCreateDevice

IoReadPartitionTable

IoSetPartitionInformation