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 表示緩衝區的大小,其大小必須至少為 sizeof (CREATE_BAND_PARAMETERS) + sizeof (BAND_LOCATION_INFO) + sizeof (BAND_SECURITY_INFO) + sizeof (AUTH_KEY) 。
輸出緩衝區
Irp-AssociatedIrp.SystemBuffer> 的輸出緩衝區選擇性地包含新建立之帶標識符的 ULONG 值。
輸出緩衝區長度
Parameters.DeviceIoControl.OutputBufferLength 至少必須是 大小of (ULONG) 才能接收訊號範圍標識符。 如果不想要傳回帶狀標識碼,請將 Parameters.DeviceIoControl.OutputBufferLength 設定為 0。
狀態區塊
下列其中一個值可以在 [ 狀態 ] 字段中傳回。
狀態值 | Description |
---|---|
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,而且CREATEBAND_AUTHKEY_CACHING_ENABLED在 CREATE_BAND_PARAMETERS 的 Flags 成員中設定,則會啟用認證快取。 驗證尋址接收器驅動程式會在記憶體中快取訊號範圍驗證密鑰。 這可讓尋址接收器驅動程式在需要磁碟區維護時自動驗證儲存設備的主機存取權,例如調整訊號範圍。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始提供 |
標頭 | ehstorbandmgmt.h (包含 EhStorBandMgmt.h) |