IOCTL_SCSI_MINIPORT_DSM IOCTL (storport.h)
數據集管理 (DSM) 通知會傳送至 IOCTL_SCSI_MINIPORT_DSM 控制程式代碼要求中的迷你埠驅動程式。 IOCTL_SCSI_MINIPORT_DSM要求是IOCTL_SCSI_MINIPORT的子 IOCTL。 StorPort 所產生的這個 IOCTL 會回應 DSM 動作,然後將此 IOCTL 傳送至迷你埠作為 STORAGE_REQUEST_BLOCK (SRB) ,且函式類型為 SRB_FUNCTION_IO_CONTROL。 輸入和輸出數據包含在 SRB 數據區塊中。
主要程序代碼
輸入緩衝區
SRB DataBuffer 成員中指定的緩衝區必須包含 SRB_IO_CONTROL 結構和 DSM_NOTIFICATION_REQUEST_BLOCK 結構。
輸入緩衝區長度
DataTransferLength 表示緩衝區的大小,其大小必須至少為 sizeof (SRB_IO_CONTROL) + sizeof (DSM_NOTIFICATION_REQUEST_BLOCK) ,並包含 MP_DEVICE_DATA_SET_RANGE 結構的額外記憶體。
輸出緩衝區
更新 SRB_IO_CONTROL 結構會傳回至 SRB 中的數據緩衝區。 SrbStatus 包含迷你埠處理要求的結果。
輸出緩衝區長度
SRB_IO_CONTROL 結構的長度。
狀態區塊
函式要求的結果狀態是在 SRB_IO_CONTROL 的 SrbStatus 成員中設定。 以下是 DSM 磁碟 IOCTL 狀態代碼。
SRB 狀態 | Description |
---|---|
SRB_STATUS_SUCCESS | 要求已順利完成。 |
SRB_STATUS_INVALID_REQUEST | 要求包含無效的緩衝區大小 |
備註
DSM_NOTIFICATION_REQUEST_BLOCK
DSM_NOTIFICATION_REQUEST_BLOCK 結構緊接在 SRB 數據緩衝區中的SRB_IO_CONTROL結構。 DSM_NOTIFICATION_REQUEST_BLOCK 定義於 ntddscsi.h 中,如下所示。
typedef struct _DSM_NOTIFICATION_REQUEST_BLOCK {
ULONG Version;
ULONG Size;
ULONG NotifyFLags;
ULONG DataSetProfile;
ULONG Reserved[3];
ULONG DataSetRangesCount;
MP_DEVICE_DATA_SET_RANGE DataSetRanges[ANYSIZE_ARRAY];
} DSM_NOTIFICATION_REQUEST_BLOCK, *PDSM_NOTIFICATION_REQUEST_BLOCK;
MP_DEVICE_DATA_SET_RANGE
LBA 範圍包含在 DataSetRanges 成員中 ,DSM_NOTIFICATION_REQUEST_BLOCK 做為 MP_DEVICE_DATA_SET_RANGE 結構的陣列。 MP_DEVICE_DATA_SET_RANGE 定義於 ntddscsi.h 中,如下所示。
typedef struct _MP_DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset;
ULONGLONG LengthInBytes;
} MP_DEVICE_DATA_SET_RANGE, *PMP_DEVICE_DATA_SET_RANGE;
DSM_NOTIFICATION_REQUEST_BLOCK 結構位於 SRB 的 DataBuffer 中SRB_IO_CONTROL結構之後。
這個 IOCTL 的SRB_IO_CONTROL結構在其 Signature 成員中包含IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION,以及 ControlCode 成員中的IOCTL_SCSI_MINIPORT_DSM。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8.1。 |
標頭 | storport.h (包含 Ntddscsi.h、Storport.h) |