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 指示扇区 0 没有预期的 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)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlIoPassive5 (wdm) PowerIrpDDis (wdm)

另请参阅

IoCreateDevice

IoReadPartitionTable

IoSetPartitionInformation