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) |