다음을 통해 공유


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 암호화 또는 쓰기 동작과 같은 보안 기능을 관리하는 타사 애플리케이션 또는 필터 드라이브에서 사용하기 위한 것입니다.

경고IOCTL_SCSI_MINIPORT_HYBRID 사용하여 하이브리드 캐시 동작을 수정하면 Windows 시스템 구성 요소의 작업과 충돌하며 지원되지 않습니다.
 
참고 SCSI 포트 드라이버 및 SCSI 미니포트 드라이버 모델은 나중에 변경되거나 사용할 수 없습니다. 대신 Storport 드라이버Storport 미니포트 드라이버 모델을 사용하는 것이 좋습니다.
 

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

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_BLOCKDataBufferOffsetDataBufferLength 멤버는 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

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_INFORMATION

HYBRID_FUNCTION_DISABLE_CACHING_MEDIUM

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL

HYBRID_FUNCTION_ENABLE_CACHING_MEDIUM

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL

HYBRID_FUNCTION_SET_DIRTY_THRESHOLD

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_DIRTY_THRESHOLDS

SRB_IO_CONTROL

HYBRID_FUNCTION_DEMOTE_BY_SIZE

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_DEMOTE_BY_SIZE

SRB_IO_CONTROL

 

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
디스크에 동기화할 하이브리드 디스크 캐시의 소수 높은 임계값입니다.

DirtyLowThresholdDirtyHighThreshold의 값은 임계값과 분수 기준 사이의 비율에서 더 작은 부분으로 표현됩니다. 분수 기준은 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 포함)

추가 정보

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK