SCSI 포트 WMI 라이브러리 사용

WMI 공급자로 작동하는 Storage 미니포트 드라이버는 SCSI 포트 WMI 라이브러리를 사용하여 WMI 명령이 포함된 SCSI 요청 블록(SRB)을 처리하는 작업을 간소화할 수 있습니다. 미니포트 드라이버의 시작 I/O 루틴인 HwScsiStartIoScsiPortWmiDispatchFunction 라이브러리의 디스패치 루틴에 대한 호출을 통해 처리를 위해 WMI SRB의 관련 정보를 SCSI 포트 WMI 라이브러리에 전달합니다. 미니포트 드라이버는 다음 데이터를 디스패치 루틴에 전달합니다.

  • WmiLibInfo 매개 변수: 미니포트 드라이버의 콜백 루틴에 대한 포인터가 있는 SCSI_WMILIB_CONTEXT 구조체입니다.

  • WMISubFunction 매개 변수: SRB의 WMISubFunction 멤버에 있는 값입니다.

  • DeviceContext 매개 변수: 디바이스 확장에 대한 포인터입니다.

  • RequestContext 매개 변수: SCSI 포트 WMI 라이브러리가 반환된 데이터의 상태 및 크기와 같은 정보를 기록하는 데 사용하는 SCSIWMI_REQUEST_CONTEXT 형식의 요청 컨텍스트 구조입니다.

  • DataPath 매개 변수: SRB의 DataPath 멤버에 있는 값입니다.

  • BufferSize 매개 변수: SRB의 DataTransferLength 멤버에 있는 값입니다.

  • Buffer 매개 변수: SRB의 DataBuffer 멤버에 있는 값입니다.

미니포트 드라이버가 초기화되면 필요한 미니포트 드라이버 콜백 루틴에 대한 포인터로 SCSI_WMILIB_CONTEXT 구조를 채운 다음 드라이버 확장과 같은 미니포트 드라이버별 스토리지 영역에 구조를 저장해야 합니다. 각 미니포트 드라이버 콜백 루틴은 포트 드라이버가 WMI 요청을 처리하는 방법에 설명된 대로 부 IRP 번호에 해당합니다. 미니포트 드라이버 콜백 루틴을 디자인하는 방법에 대한 자세한 내용은 WMI 미니포트 드라이버 콜백 루틴 설계를 참조하세요.

SCSI_WMILIB_CONTEXT 구조체의 GuidList 멤버는 MOF 파일에 정의된 지원되는 WMI 클래스를 고유하게 식별하는 GUID에 대한 정보를 포함하는 SCSIWMIGUIDREGINFO 형식의 요소 배열을 가리킵니다. 다음 코드 조각은 이러한 요소 배열의 정의를 보여 줍니다.

SCSIWMIGUIDREGINFO GuidList[] = 
{
  {
    &HBAStatisticsGUID,  // Guid
    3,  // number of instances of this class
    0  // flags
  },
  {
    &HBAAttributesGUID, // guid
    1,  // number of instances of this class
    0  // flags
  }
};

배열에는 HBAStatisticsHBAAttributes라는 두 WMI 클래스의 GUID에 대한 정보가 포함되어 있습니다. GUID의 기호 상수는 WMI 도구 모음( mofcompwmimofck 도구)을 사용하여 두 클래스를 정의하는 MOF 파일을 컴파일하여 생성된 헤더 파일에서 가져옵니다. 이러한 도구를 사용하는 방법에 대한 자세한 내용은 드라이버의 MOF 파일 컴파일wmimofck.exe사용을 참조하세요.

WMI 도구 모음은 "GUID" 접미사를 WMI 클래스의 이름에 연결하여 GUID에 대한 기호 상수의 이름을 생성합니다. 예를 들어 HBAStatistics 클래스의 경우 도구는 해당 클래스의 GUID를 나타내는 HBAStatisticsGUID 라는 기호 상수로 만듭니다.