IOCTL_EHSTOR_BANDMGMT_CREATE_BAND IOCTL (ehstorbandmgmt.h)
使用 IOCTL_EHSTOR_BANDMGMT_CREATE_BAND 请求在带托管的存储设备上创建新带。 将新带区添加到带条目表,其中包括带位置和安全属性。
主要代码
输入缓冲区
Irp-AssociatedIrp.SystemBuffer> 处的缓冲区必须包含CREATE_BAND_PARAMETERS结构,后跟BAND_LOCATION_INFO、BAND_SECURITY_INFO和AUTH_KEY结构。
如果 CREATE_BAND_PARAMETERS 的 AuthKeyOffset 成员设置为 EHSTOR_BANDMGR_NO_KEY,则系统缓冲区中的输入数据不需要包含AUTH_KEY结构。
输入缓冲区长度
Parameters.DeviceIoControl.InputBufferLength 指示缓冲区的大小(以字节为单位),缓冲区的大小 必须至少为 (CREATE_BAND_PARAMETERS) + sizeof (BAND_LOCATION_INFO) + sizeof (BAND_SECURITY_INFO) + sizeof (AUTH_KEY) 。
输出缓冲区
Irp-AssociatedIrp.SystemBuffer> 处的输出缓冲区(可选)包含新创建的带的标识符的 ULONG 值。
输出缓冲区长度
Parameters.DeviceIoControl.OutputBufferLength的大小必须至少 为 (ULONG) 才能接收带标识符。 如果不需要返回带标识符,请将 Parameters.DeviceIoControl.OutputBufferLength 设置为 0。
状态块
可以在“ 状态” 字段中返回以下值之一。
状态值 | 说明 |
---|---|
STATUS_SUCCESS | 新乐队已创建。 |
STATUS_INVALID_DEVICE_REQUEST | 存储设备不支持带管理。 |
STATUS_INVALID_BUFFER_SIZE | 输入缓冲区大小无效。 |
STATUS_INVALID_PARAMETER | 输入缓冲区中的信息无效。 |
STATUS_CONFLICTING_ADDRESSES | 由于位置重叠,未创建带。 |
STATUS_INSUFFICIENT_RESOURCES | 未创建带区,因为带区表已满。 |
STATUS_IO_DEVICE_ERROR | 通信失败。 存储设备可能与安全协议不兼容。 |
注解
将身份验证密钥分配给新创建的带是可选的。 如果未提供密钥(其中 AuthKeyOffset = 在CREATE_BAND_PARAMETERS结构中EHSTOR_BANDMGR_NO_KEY),则使用默认的身份验证密钥。 但是,这会使乐队容易受到另一个调用方攻击,后者可能会在创建后立即通过更改其身份验证密钥来控制该乐队。 建议在创建时向带分配非默认身份验证密钥。
此请求对带表所做的更改在 IOCTL 请求完成之前以原子方式提交到设备。 因此,可以保证在发生系统或电源故障时,使用设置其所有属性创建带,或者根本不创建带。
新带区的位置不得与现有带区重叠,否则此请求将失败并STATUS_CONFLICTING_ADDRESSES。
如果带已解锁,则 BAND_SECURITY_INFO 的 ReadLock 或 WriteLock 成员设置为 FALSE,并在 CREATE_BAND_PARAMETERS 的 Flags 成员中设置CREATEBAND_AUTHKEY_CACHING_ENABLED,则启用凭据缓存。 身份验证接收器驱动程序将在内存中缓存带身份验证密钥。 这允许 silo 驱动程序在需要卷维护(例如调整带区大小)时自动对主机访问存储设备进行身份验证。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8开始可用 |
标头 | ehstorbandmgmt.h (包括 EhStorBandMgmt.h) |