STORAGE_DEVICE_NUMBER_EX 结构 (ntddstor.h)

STORAGE_DEVICE_NUMBER_EX 结构与 IOCTL_STORAGE_GET_DEVICE_NUMBER_EX 请求结合使用,以检索 FILE_DEVICE_XXX 设备类型、设备编号、设备 GUID,以及启动设备时驱动程序分配给设备的分区号。

语法

typedef struct _STORAGE_DEVICE_NUMBER_EX {
  ULONG       Version;
  ULONG       Size;
  ULONG       Flags;
  DEVICE_TYPE DeviceType;
  ULONG       DeviceNumber;
  GUID        DeviceGuid;
  ULONG       PartitionNumber;
} STORAGE_DEVICE_NUMBER_EX, *PSTORAGE_DEVICE_NUMBER_EX;

成员

Version

此结构的版本。 将设置为 sizeof (STORAGE_DEVICE_NUMBER_EX) 。

Size

此结构的总大小,包括任何其他数据。 目前,这始终设置为 sizeof (STORAGE_DEVICE_NUMBER_EX) 。

Flags

可以是STORAGE_DEVICE_FLAGS_XXX标志的组合,这些标志提供有关此结构的成员的详细信息。 有关详细信息,请参阅“备注”。

DeviceType

指定系统定义的 FILE_DEVICE_XXX 常量之一,该常量指示设备 (的类型,例如FILE_DEVICE_DISK) 或供应商为新型设备定义的值。 此 IOCTL 仅支持磁盘设备。 有关详细信息,请参阅 指定设备类型

DeviceNumber

指示此设备的数量。 对于表示 MPIO 磁盘的物理路径的磁盘,此值设置为 0xFFFFFFFF (-1) 。

DeviceGuid

此设备的全局唯一标识号。 GUID 为 {0} 表示无法生成 GUID。 GUID 基于不会随固件更新而更改的硬件信息;例如,序列号可用于形成 GUID,但不能用于固件修订版。

PartitionNumber

指示如果设备可以分区,则在此成员中返回设备的分区号。 否则,返回 -1。

注解

IOCTL_STORAGE_GET_DEVICE_NUMBER_EX请求通常由容错磁盘驱动程序发出。

通常,如果设备公开全局唯一标识符,存储驱动程序将使用该标识符来形成 GUID。 否则,存储驱动程序将组合设备的供应商 ID、产品 ID 和序列号来创建 GUID。

如果存储驱动程序检测到两个具有相同硬件信息的设备 (这表示设备) 出现问题,则驱动程序将为这两个设备中的一个生成随机 GUID。 使用随机 GUID 处理设备的IOCTL_STORAGE_GET_DEVICE_NUMBER_EX时,驱动程序会将STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_CONFLICT添加到此结构的 Flags 成员。

如果存储设备不提供任何标识信息,驱动程序将生成一个随机 GUID,并将STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_NOHWID添加到此结构的 Flags 成员。

如果设置了 STORAGE_DEVICE_FLAGS_PAGE_83_DEVICEGUID 标志,则 deviceguid 是基于 SCSI page83 数据创建的。 如果未设置此标志,则表示它是从序列号创建的或随机生成的。

STORAGE_DEVICE_NUMBER_EX 结构中的值保证在系统重新启动之前保持不变。 不保证它们在整个启动中持久存在。 设备 GUID 在重启后保持不变。 随机 GUID 不会持久保存,在重新启动后不会相同。

要求

要求
Header ntddstor.h (包括 Ntddstor.h)

另请参阅

IOCTL_STORAGE_GET_DEVICE_NUMBER_EX