다음을 통해 공유


SENDCMDINPARAMS 구조체(ntdddisk.h)

SENDCMDINPARAMS 구조체에는 SMART_SEND_DRIVE_COMMANDSMART_RCV_DRIVE_DATA 요청에 대한 입력 매개 변수가 포함되어 있습니다(설명 참조).

구문

typedef struct _SENDCMDINPARAMS {
  ULONG   cBufferSize;
  IDEREGS irDriveRegs;
  UCHAR   bDriveNumber;
  UCHAR   bReserved[3];
  ULONG   dwReserved[4];
  UCHAR   bBuffer[1];
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;

멤버

cBufferSize

버퍼 크기(바이트)를 포함합니다.

irDriveRegs

IDE 컨트롤러 레지스터의 내용을 보고하는 데 사용되는 IDEREGS 구조체를 포함합니다.

bDriveNumber

이 멤버는 불투명합니다. 이 메서드를 사용하지 마십시오. 요청을 수신하는 실제 드라이브는 호출자가 요청할 때 사용하는 핸들에 따라 달라지므로 운영 체제는 이 멤버를 무시합니다.

bReserved[3]

예약되어 있습니다.

dwReserved[4]

예약되어 있습니다.

bBuffer[1]

입력 버퍼에 대한 포인터입니다.

설명

SENDCMDINPARAMS 구조체는 SMART_SEND_DRIVE_COMMANDSMART_RCV_DRIVE_DATA I/O 제어 코드 요청과 함께 사용됩니다. 이러한 IOCTL은 Self-Monitoring 분석 및 보고 기술(SMART)을 지원하는 드라이버에서 처리해야 합니다.

SMART_SEND_DRIVE_COMMAND

SMART_SEND_DRIVE_COMMAND 제어 코드는 다음 SMART 명령 중 하나를 디바이스로 보냅니다.

  • 디바이스에서 보고 사용 또는 사용 안 함
  • 특성 자동 저장 사용 또는 사용 안 함
  • 지금 현재 특성 저장
  • 오프라인 진단 실행
  • 현재 SMART 상태 가져오기
  • SMART 로그에 쓰기

입력 매개 변수

Irp-AssociatedIrp.SystemBuffer>의 버퍼에는 디바이스로 전송되는 명령을 설명하는 SENDCMDINPARAMS 구조체가 포함되어 있습니다. irDriveRegs.bCommandReg 멤버는 SMART_CMD 지정해야 합니다. irDriveRegs.bFeaturesReg 멤버는 SMART 하위 명령을 지정해야 합니다. 하위 명령 목록은 IDEREGS를 참조하세요.

호출자가 irDriveRegs.bFeaturesReg에서 SMART_WRITE_LOG SMART 하위 명령을 지정하는 경우 호출자는 irDriveRegs.bSectorCountReg에 쓸 섹터 수를 나타내야 합니다. 입력 버퍼 크기는 = sizeof(SENDCMDINPARAMS) - 1) + (irDriveRegs.bSectorCountReg * SMART_LOG_SECTOR_SIZE)이어야 >합니다. 호출자는 SENDCMDINPARAMS의 bBuffer 멤버가 나타내는 버퍼에 쓸 데이터를 넣어야 합니다.

Parameters.DeviceIoControl.InputBufferLength는 입력 버퍼의 크기(바이트)를 지정합니다. 이 크기는 = (sizeof(SENDCMDINPARAMS) - 1)여야 >합니다.

Parameters.DeviceIoControl.OutputBufferLength는 출력 버퍼의 크기(바이트)를 지정합니다. 이 크기는 = (sizeof(SENDCMDOUTPARAMS) - 1)여야 >합니다. SMART 상태 요청되는 경우 출력 버퍼는 = (sizeof(SENDCMDOUTPARAMS) - 1 + sizeof(IDEREGS))이어야 >합니다.

출력 매개 변수

드라이버는 SENDCMDOUTPARAMS 구조를 Irp-AssociatedIrp.SystemBuffer>의 버퍼에 반환합니다. SMART 상태 요청되고 디바이스에서 성공적으로 수신된 경우 드라이버는 출력 버퍼에 IDEREGS 구조를 포함합니다.

I/O 상태 블록

드라이버가 상태 필드를 STATUS_SUCCESS 설정하면 SMART 상태 반환하고 다른 모든 명령에 대해 정보 필드가 로 (sizeof(SENDCMDOUTPARAMS) - 1) 설정 ((sizeof(SENDCMDOUTPARAMS) - 1) + sizeof(IDEREGS)) 됩니다. 드라이버는 입력 매개 변수가 올바르지 않으면 상태 필드를 STATUS_INVALID_PARAMETER, 디바이스가 지원하지 않는 명령을 중단하는 경우 STATUS_IO_DEVICE_ERROR 설정해야 합니다. 상태가 STATUS_SUCCESS 않으면 드라이버는 정보 필드를 0으로 설정합니다.

SMART_RCV_DRIVE_DATA

SMART_RCV_DRIVE_DATA 제어 코드는 ATA-2 식별 데이터, SMART 임계값 또는 디바이스의 SMART 특성을 반환합니다.

입력 매개 변수 SMART_RCV_DRIVE_DATA

Irp-AssociatedIrp.SystemBuffer>의 버퍼에는 디바이스로 전송되는 요청을 설명하는 SENDCMDINPARAMS 구조체가 포함되어 있습니다. irDriveRegs.bCommandReg 멤버는 데이터를 식별할 때 ID_CMD 지정하고 SMART 데이터가 요청되면 SMART_CMD. 기능 레지스터(irDriveRegs.bFeaturesReg)에 할당할 수 있는 값 목록은 IDEREGS를 참조하세요.

Parameters.DeviceIoControl.InputBufferLength는 입력 버퍼의 크기(바이트)를 지정합니다. 이 크기는 = (sizeof(SENDCMDINPARAMS) - 1)여야 >합니다.

Parameters.DeviceIoControl.OutputBufferLength는 출력 버퍼의 크기(바이트)를 지정합니다. 이 크기는 = (sizeof(SENDCMDOUTPARAMS) - 1 + 512)여야 >합니다.

출력 매개 변수 SMART_RCV_DRIVE_DATA

드라이버는 SENDCMDOUTPARAMS 구조체와 드라이브 데이터의 512바이트 버퍼를 Irp-AssociatedIrp.SystemBuffer>의 버퍼에 반환합니다.

호출자가 irDriveRegs.bFeaturesReg에서 SMART_READ_LOG SMART 하위 명령을 지정하는 경우 호출자는 irDriveRegs.bSectorCountReg에서 읽을 섹터 수도 표시해야 합니다. 출력 버퍼 크기는 = 다음 값 sizeof(SENDCMDOUTPARAMS) 의 최대값이어야 >합니다. 또는sizeof(SENDCMDINPARAMS)) -1 + (irDriveRegs.bSectorCountReg** * SMART_LOG_SECTOR_SIZE)

로그에서 읽은 데이터는 SENDCMDOUTPARAMSbBuffer 멤버가 지정한 버퍼에 배치됩니다.

SMART_RCV_DRIVE_DATA I/O 상태 블록

드라이버는 상태 필드를 (sizeof(SENDCMDOUTPARAMS) - 1 + 512) STATUS_SUCCESS 설정하면 정보 필드를 로 설정합니다. 그렇지 않으면 드라이버는 정보 필드를 0으로 설정하고 상태 필드를 STATUS_INVALID_PARAMETER 또는 STATUS_INSUFFICIENT_RESOURCES 설정합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000
머리글 ntdddisk.h(Ntdddisk.h 포함)

추가 정보

IDEREGS

SENDCMDOUTPARAMS