使用 IOCTL_EHSTOR_BANDMGMT_CREATE_BAND 请求在带管理的存储设备上创建新带。 新的带区添加到带项表中,其中包括带位置和安全属性。
主要代码
输入缓冲区
Irp->AssociatedIrp.SystemBuffer 的缓冲区必须包含 CREATE_BAND_PARAMETERS 结构,后跟 BAND_LOCATION_INFO、BAND_SECURITY_INFO和 AUTH_KEY 结构。
如果 AuthKeyOffsetCREATE_BAND_PARAMETERS 成员设置为 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 必须至少 sizeof(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 | 通信失败。 存储设备可能与安全协议不兼容。 |
言论
将身份验证密钥分配给新创建的带是可选的。 如果未提供密钥,CREATE_BAND_PARAMETERS 结构中的 AuthKeyOffset = EHSTOR_BANDMGR_NO_KEY,则使用默认身份验证密钥。 但是,这使得该乐队容易受到另一个调用方攻击,他们可以通过更改其身份验证密钥在创建后立即控制该乐队。 建议在创建时将非默认身份验证密钥分配给带。
此请求对带表所做的更改在 IOCTL 请求完成之前以原子方式提交到设备。 因此,可以保证在发生系统或电源故障时,会创建带子的所有属性集或根本不创建。
新带的位置不得与现有带重叠,否则此请求将失败并STATUS_CONFLICTING_ADDRESSES。
如果解锁了带,则 ReadLock 或 WriteLock 成员 BAND_SECURITY_INFO 设置为 FALSE,并且 CREATEBAND_AUTHKEY_CACHING_ENABLED 在 CREATE_BAND_PARAMETERS标志 成员中设置,则启用凭据缓存。 身份验证接收器驱动程序将在内存中缓存带式身份验证密钥。 这允许接收器驱动程序在需要卷维护时自动对存储设备的主机访问权限进行身份验证,例如调整带的大小。
要求
| 要求 | 价值 |
|---|---|
| 最低支持的客户端 | 从 Windows 8 开始可用 |
| 标头 | ehstorbandmgmt.h (包括 EhStorBandMgmt.h) |