IOCTL_SCSI_MINIPORT_DSM IOCTL (storport.h)
數據集管理 (DSM) 通知會傳送至 IOCTL_SCSI_MINIPORT_DSM 控制程式代碼要求中的迷你埠驅動程式。 IOCTL_SCSI_MINIPORT_DSM 要求是 IOCTL_SCSI_MINIPORT的子 IOCTL。 StorPort 所產生的這個 IOCTL,以回應 DSM 動作,然後以 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 結構的長度。
狀態區塊
函式要求的結果狀態是在 SrbStatus 成員 SRB_IO_CONTROL中設定。 以下是 DSM 磁碟 IOCTL 狀態代碼。
SRB 狀態 | 描述 |
---|---|
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 DataBufferSRB_IO_CONTROL 結構之後。
此 IOCTL 的 SRB_IO_CONTROL 結構在其 Signature 成員中包含IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION,以及 ControlCode 成員中的 IOCTL_SCSI_MINIPORT_DSM。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 8.1。 |
標頭 | storport.h (include Ntddscsi.h, Storport.h) |