IOCTL_SCSI_MINIPORT_HYBRID IOCTL(ntddscsi.h)
IOCTL_SCSI_MINIPORT_HYBRID 제어 코드는 HBA 관련 미니포트 드라이버에 하이브리드 디스크 제어 요청을 보냅니다. IOCTL_SCSI_MINIPORT_HYBRID 요청은 IOCTL_SCSI_MINIPORT 하위 IOCTL입니다. 이 IOCTL은 StorPort에서 수신 및 다시 포맷한 다음, 함수 형식이 SRB_FUNCTION_IO_CONTROL SRB(STORAGE_REQUEST_BLOCK )로 미니포트로 전송됩니다. 입력 및 출력 데이터는 SRB 데이터 블록에 포함됩니다.
IOCTL_SCSI_MINIPORT_HYBRID 암호화 또는 쓰기 동작과 같은 보안 기능을 관리하는 타사 애플리케이션 또는 필터 드라이브에서 사용하기 위한 것입니다.
주 코드
입력 버퍼
SRB의 DataBuffer 멤버에 지정된 버퍼에는 SRB_IO_CONTROL 구조체와 HYBRID_REQUEST_BLOCK 구조체가 포함되어야 합니다. HYBRID_REQUEST_BLOCK함수 멤버에 따라 추가 데이터를 제공할 수 있습니다.
입력 버퍼 길이
DataTransferLength는 버퍼의 크기(바이트)를 나타내며, HYBRID_REQUEST_BLOCK DataBufferLength 멤버가 0이 아닌 경우 함수 데이터에 대한 추가 스토리지와 함께 최소 sizeof(SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK)여야 합니다.
출력 버퍼
업데이트된 SRB_IO_CONTROL 구조체가 SRB의 데이터 버퍼로 반환됩니다.
출력 버퍼 길이
지정된 함수에 대한 데이터가 반환될 때 HYBRID_REQUEST_BLOCKDataBufferOffset 및 DataBufferLength 멤버는 0이 아닌 멤버입니다. 요청 함수에 대한 데이터가 반환되면 SRB의 DataTransferLength 멤버가 업데이트됩니다.
상태 블록
함수 요청의 결과 상태 SRB_IO_CONTROLReturnCode 멤버에 설정됩니다. 다음은 하이브리드 디스크 IOCTL 상태 코드입니다.
반환 코드 | Description |
---|---|
HYBRID_STATUS_SUCCESS | 함수가 성공적으로 완료되었습니다. |
HYBRID_STATUS_ILLEGAL_REQUEST | 요청에 잘못된 함수 코드가 포함되어 있습니다. |
HYBRID_STATUS_INVALID_PARAMETER | 입력 또는 출력 매개 변수의 형식이 잘못 지정되었습니다. |
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL | DataBufferLength에 지정된 데이터 길이가 너무 작아서 요청 출력을 포함할 수 없습니다. |
설명
HYBRID_REQUEST_BLOCK 구조체는 데이터 버퍼의 SRB_IO_CONTROL 구조 바로 뒤를 따릅니다. HYBRID_REQUEST_BLOCK 다음과 같이 ntddscsi.h에 정의됩니다.
typedef struct _HYBRID_REQUEST_BLOCK {
ULONG Version;
ULONG Size;
ULONG Function;
ULONG Flags;
ULONG DataBufferOffset;
ULONG DataBufferLength;
} HYBRID_REQUEST_BLOCK, *PHYBRID_REQUEST_BLOCK;
매개 변수 요구 사항은 하이브리드 디스크 요청의 함수 코드에 따라 달라집니다. 다음 표에서는 각 함수에 필요한 매개 변수를 나열합니다.
함수 | 입력 매개 변수 | 출력 매개 변수 |
---|---|---|
HYBRID_FUNCTION_GET_INFO |
HYBRID_REQUEST_BLOCK |
HYBRID_REQUEST_BLOCK + |
HYBRID_FUNCTION_DISABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_ENABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_SET_DIRTY_THRESHOLD |
HYBRID_REQUEST_BLOCK + HYBRID_DIRTY_THRESHOLDS |
|
HYBRID_FUNCTION_DEMOTE_BY_SIZE |
HYBRID_REQUEST_BLOCK + HYBRID_DEMOTE_BY_SIZE |
HYBRID_REQUEST_BLOCK 구조체는 SRB의 DataBuffer에서 SRB_IO_CONTROL 구조체 다음에 있습니다. 요청에 포함된 모든 함수 데이터는 SRB_IO_CONTROL 구조가 시작된 후 DataBufferOffset 의 오프셋에서 찾을 수 있습니다.
다음 예제에서는 HYBRID_FUNCTION_SET_DIRTY_THRESHOLD 요청에 대한 함수 데이터를 검색하는 방법을 보여 줍니다.
PSRB_IO_CONTROL srbIoCtl = (PSRB_IO_CONTROL)srb->DataBuffer;
PHYBRID_REQUEST_BLOCK hybridRequest = (PHYBRID_REQUEST_BLOCK)(srbIoCtl + 1);
PHYBRID_DIRTY_THRESHOLDS hybridDirtyThresholds = NULL;
if (hybridRequest->DataBufferOffset >= sizeof(SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK))
{
if (hybridRequest->DataBufferLength >= sizeof(HYBRID_FUNCTION_SET_DIRTY_THRESHOLD))
{
hybridDirtyThresholds = (PHYBRID_DIRTY_THRESHOLDS)((PUCHAR)srbIoCtl + hybridRequest->DataBufferOffset);
}
else
{
srbIoCtl->ReturnCode = HYBRID_STATUS_INVALID_PARAMETER;
}
}
HYBRID_DIRTY_THRESHOLDS
HYBRID_FUNCTION_SET_DIRTY_THRESHOLD 함수는 입력 매개 변수에 HYBRID_DIRTY_THRESHOLDS 구조를 사용합니다. HYBRID_DIRTY_THRESHOLDS 다음과 같이 ntddscsi.h에 정의됩니다.
typedef struct _HYBRID_DIRTY_THRESHOLDS {
ULONG Version;
ULONG Size;
ULONG DirtyLowThreshold;
ULONG DirtyHighThreshold;
} HYBRID_DIRTY_THRESHOLDS, *PHYBRID_DIRTY_THRESHOLDS;
- 버전
- 구조체의 버전입니다. 를 HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
- 크기
- 구조체의 크기입니다. sizeof(HYBRID_DIRTY_THRESHOLDS)로 설정합니다.
- DirtyLowThreshold
- 디스크에 동기화할 하이브리드 디스크 캐시에 대한 분수 낮은 임계값입니다.
- DirtyHighThreshold
- 디스크에 동기화할 하이브리드 디스크 캐시의 소수 높은 임계값입니다.
DirtyLowThreshold 및 DirtyHighThreshold의 값은 임계값과 분수 기준 사이의 비율에서 더 작은 부분으로 표현됩니다. 분수 기준은 HYBRID_INFORMATION 구조체의 FractionBase 멤버에 의해 결정됩니다.
HYBRID_DEMOTE_BY_SIZE
HYBRID_FUNCTION_DEMOTE_BY_SIZE 함수는 입력 매개 변수에 HYBRID_DEMOTE_BY_SIZE 구조를 사용합니다. HYBRID_DEMOTE_BY_SIZE 다음과 같이 ntddscsi.h에 정의됩니다.
typedef struct _HYBRID_DEMOTE_BY_SIZE {
ULONG Version;
ULONG Size;
UCHAR SourcePriority;
UCHAR TargetPriority;
USHORT Reserved0;
ULONG Reserved1;
ULONGLONG LbaCount;
} HYBRID_DEMOTE_BY_SIZE, *PHYBRID_DEMOTE_BY_SIZE;
- 버전
- 구조체의 버전입니다. 를 HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
- 크기
- 구조체의 크기입니다. sizeof(HYBRID_DEMOTE_BY_SIZE)로 설정합니다.
- SourcePriority
- 강등할 데이터의 원래 우선 순위 수준입니다. 이 값은 <= HYBRID_FUNCTION_GET_INFO 함수 요청에서 반환된 HYBRID_INFORMATION 구조체의 MaximumHybridPriorityLevel 멤버 값이어야 합니다. 이 값은 > 0이어야 합니다.
- TargetPriority
- SourcePriority 수준에서 강등할 데이터의 대상 우선 순위 수준입니다. 이 값은 SourcePriority여야 < 합니다.
- Reserved0
- 예약되어 있습니다.
- Reserved1
- 예약되어 있습니다.
- LbaCount
- 새 우선 순위 수준으로 강등할 LBA 수입니다.
이 IOCTL의 SRB_IO_CONTROL 구조에는 Signature 멤버의 IOCTL_MINIPORT_SIGNATURE_HYBRDISK 포함되고 ControlCode 멤버의 IOCTL_SCSI_MINIPORT_HYBRID 포함됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8.1 사용하여 사용할 수 있습니다. |
머리글 | ntddscsi.h(Ntddscsi.h 포함) |