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 磁盘 I/O 请求。

当请求磁盘设备驱动程序在分区表条目中设置分区类型或通过IRP_MJ_DEVICE_CONTROL请求对磁盘重新分区时,将调用 IoWritePartitionTable。 设备控制请求通常由格式实用工具发出,该实用工具对计算机上的分区和磁盘执行 I/O 控制功能。

若要重置分区类型,驱动程序将指针传递给表示物理磁盘的设备对象,以及与格式实用工具已打开的设备对象关联的分区数。 当磁盘要动态重新分区时,磁盘驱动程序必须将其表示当前磁盘分区的设备对象集拆毁,并创建一组表示磁盘上新分区的设备对象。

创建和删除分区且需要系统的完整说明的应用程序应调用 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