IOCTL_SCSI_MINIPORT_DSM IOCTL(storport.h)
DSM(데이터 집합 관리) 알림은 IOCTL_SCSI_MINIPORT_DSM 제어 코드 요청의 미니포트 드라이버로 전송됩니다. IOCTL_SCSI_MINIPORT_DSM 요청은 IOCTL_SCSI_MINIPORT 하위 IOCTL입니다. DSM 작업에 대한 응답으로 StorPort에서 생성한 이 IOCTL은 함수 형식이 SRB_FUNCTION_IO_CONTROL SRB(STORAGE_REQUEST_BLOCK )로 미니포트로 전송됩니다. 입력 및 출력 데이터는 SRB 데이터 블록에 포함됩니다.
주 코드
입력 버퍼
SRB의 DataBuffer 멤버에 지정된 버퍼에는 SRB_IO_CONTROL 구조체와 DSM_NOTIFICATION_REQUEST_BLOCK 구조체가 포함되어야 합니다.
입력 버퍼 길이
DataTransferLength 는 버퍼의 크기(바이트)를 나타내며, 이는 포함된 MP_DEVICE_DATA_SET_RANGE 구조체에 대한 추가 스토리지와 함께 적어도 sizeof (SRB_IO_CONTROL) + sizeof( DSM_NOTIFICATION_REQUEST_BLOCK )여야 합니다.
출력 버퍼
업데이트된 SRB_IO_CONTROL 구조체가 SRB의 데이터 버퍼로 반환됩니다. SrbStatus에는 미니포트가 요청을 처리한 결과가 포함됩니다.
출력 버퍼 길이
SRB_IO_CONTROL 구조체의 길이입니다.
상태 블록
함수 요청의 결과 상태 SRB_IO_CONTROLSrbStatus 멤버에 설정됩니다. 다음은 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 범위는 MP_DEVICE_DATA_SET_RANGE구조의 배열로 DSM_NOTIFICATION_REQUEST_BLOCK DataSetRanges 멤버에 포함됩니다. 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 포함) |