IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)
泛型儲存類別驅動程式 (classpnp.sys) 會公開 I/O 控件 (IOCTL) 介面,以發出永續性保留 In 命令。 收到持續性保留 In 命令時儲存裝置的行為,請參閱 SCSI 主要命令 - 2 (SPC-2) 規格。 IOCTL 介面需要呼叫端具有永續性保留 In 命令實體裝置的讀取許可權。 使用者模式應用程式、服務和內核模式驅動程式可以使用這個 IOCTL 來控制持續性保留。 如果從驅動程式呼叫,則必須從在 IRQL < 執行的線程呼叫此 IOCTL DISPATCH_LEVEL。 此 IOCTL 是以 FILE_READ_ACCESS 定義,要求裝置句柄具有發出 Persistent Reserve In 命令的讀取許可權。
主要程序代碼
輸入緩衝區
Irp-AssociatedIrp.SystemBuffer> 上的緩衝區包含PERSISTENT_RESERVE_COMMAND結構。 您必須從非分頁集區配置緩衝區,而且必須針對目標裝置和適配卡正確對齊該緩衝區。
PR_IN。ServiceAction 可以是下列其中一項:
- RESERVATION_ACTION_READ_KEYS
- RESERVATION_ACTION_READ_RESERVATIONS
PR_IN。配置長度是以位元組為單位的大小 (,) 為傳回的參數清單配置的緩衝區。
輸入緩衝區長度
輸入緩衝區的長度,以位元組為單位。
輸出緩衝區
針對 PR_IN。ServiceAction = RESERVATION_ACTION_READ_KEYS,輸出緩衝區包含 PRI_REGISTRATION_LIST 結構,而且至少必須是大小 (PRI_REGISTRATION_LIST) 。
針對 PR_IN。ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS,輸出緩衝區包含 PRI_RESERVATION_LIST 結構,而且至少必須是大小 (PRI_RESERVATION_LIST) 。
如果已配置的緩衝區太小而無法傳回所有永續性保留 In 數據,則會傳回成功,而且所需的大小將會在參數清單 AdditionalLength 欄位中傳回。
輸出緩衝區長度
輸出緩衝區的長度,以位元組為單位。
狀態區塊
[資訊] 欄位會設定為輸出緩衝區的大小。 針對 ServiceAction = RESERVATION_ACTION_READ_KEYS,輸出緩衝區是 PRI_REGISTRATION_LIST 結構。 針對 ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS,輸出緩衝區是 PRI_REGISTRATION_LIST 結構。
[ 狀態 ] 欄位會設定為下列其中一項:
值 | 意義 |
---|---|
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) | 輸出緩衝區太小,無法保存永續性保留中的數據。 輸出緩衝區的 AdditionalLength 字段將包含要傳回的數據大小。 |
STATUS_DEVICE_BUSY (ERROR_BUSY) | 命令因為保留衝突 (而失敗,如需詳細資訊,請參閱 SCSI 主要命令 - 2 (SPC-2) ** 規格) 。 |
STATUS_INFO_LENGTH_MISMATCH | IOCTL 的輸入緩衝區長度小於 sizeof (PERSISTENT_RESERVE_COMMAND) ,或 PERSISTENT_RESERVE_COMMAND 數據結構中指定的大小小於 sizeof (PERSISTENT_RESERVE_COMMAND) 。 |
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) | 記憶體驅動程式不支援 I/O 控制項程式代碼 (IOCTL_STORAGE_PERSISTENT_RESERVE_IN) 。 |
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) | 輸入緩衝區結構的大小不正確或填入。 |
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) | 裝置或適配卡的輸入或輸出緩衝區未正確對齊。 只有在驅動程式將IOCTL傳送至記憶體堆疊時,才能傳回此狀態。 當使用者模式應用程式透過 DeviceIoControl API 傳送 IOCTL 時,不會傳回此狀態,因為 I/O 管理員會自動對齊緩衝區。 |
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) | 裝置不支援Persistent Reserve In 命令。 |
STATUS_SUCCESS | 作業成功。 |
規格需求
需求 | 值 |
---|---|
標頭 | ntddstor.h (包含 Ntddstor.h) |