IoReadPartitionTable 函数 (ntddk.h)

IoReadPartitionTable 例程已过时,仅用于支持现有驱动程序。 新驱动程序必须使用 IoReadPartitionTableExIoReadPartitionTable 读取具有指定扇区大小的磁盘上的分区列表,并在分区列表中为每个识别的分区创建一个条目。

语法

NTSTATUS IoReadPartitionTable(
  [in]  PDEVICE_OBJECT            DeviceObject,
  [in]  ULONG                     SectorSize,
  [in]  BOOLEAN                   ReturnRecognizedPartitions,
  [out] _DRIVE_LAYOUT_INFORMATION **PartitionBuffer
);

参数

[in] DeviceObject

指向要读取其分区的磁盘的设备对象的指针。

[in] SectorSize

指定磁盘上扇区的大小。

[in] ReturnRecognizedPartitions

指示是只返回识别的分区还是应返回所有分区条目。

[out] PartitionBuffer

指向未初始化地址的指针。 如果成功, IoReadPartitionTable 将从非分页池分配此缓冲区的内存,并返回其中驱动器布局信息。

返回值

如果读取了至少一个扇区表,此例程将返回值STATUS_SUCCESS。 否则,它将返回错误状态,并将 PartitionBuffer 处的指针设置为 NULL

注解

IoReadPartitionTable 只能由磁盘驱动程序使用。 其他驱动程序应改用 IOCTL_DISK_GET_DRIVE_LAYOUT 磁盘 I/O 请求。

磁盘设备驱动程序在驱动程序初始化期间调用此例程。

调用方负责解除分配此例程使用 ExFreePool 分配的 PartitionBuffer

此例程使用的算法由布尔值 ReturnRecognizedPartitions 确定:

  • 读取每个分区表,并为找到的每个有效且已识别的分区填充 PARTITION_INFORMATION 项数组中的元素。 分区信息条目的数组由DRIVE_LAYOUT_INFORMATION结构的 PartitionEntry 成员指向。 DRIVE_LAYOUT_INFORMATION结构位于 PartitionBuffer 指向的位置。 扩展分区的位置是为了查找其他分区表,但不会为它们生成任何条目。
读取每个分区表,并为每个条目填写分区信息条目。 扩展分区的位置是查找磁盘上的每个分区;条目也是为这些项构建的。

要求

要求
目标平台 通用
标头 ntddk.h (包括 Ntddk.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlIoPassive5 (wdm) PowerIrpDDis (wdm)

另请参阅

IOCTL_DISK_GET_DRIVE_LAYOUT

IOCTL_DISK_GET_PARTITION_INFO

IOCTL_DISK_SET_DRIVE_LAYOUT

IoSetPartitionInformation

IoWritePartitionTable