다음을 통해 공유


ScsiPortWmiSetData 함수(scsiwmi.h)

ScsiPortWmiSetData 루틴은 요청 컨텍스트 내의 WNODE_ALL_DATA 구조를 업데이트하여 인스턴스에 대한 데이터의 위치와 길이를 지정합니다.

참고 SCSI 포트 드라이버 및 SCSI 미니포트 드라이버 모델은 나중에 변경되거나 사용할 수 없습니다. 대신 Storport 드라이버 사용하고 storport 미니포트 드라이버 모델을 것이 좋습니다.
 

통사론

PVOID ScsiPortWmiSetData(
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG                    InstanceIndex,
  [in]      ULONG                    DataLength,
  [out]     PULONG                   BufferAvail,
  [in, out] PULONG                   SizeNeeded
);

매개 변수

[in] RequestContext

WMI SRB에 대한 요청 컨텍스트를 포함하는 형식 SCSIWMI_REQUEST_CONTEXT 구조체에 대한 포인터입니다.

[in] InstanceIndex

인스턴스 데이터의 위치와 길이를 지정할 인스턴스를 나타내는 인덱스를 포함합니다.

[in] DataLength

인스턴스를 설명하는 데 필요한 데이터 바이트 수를 지정합니다.

[out] BufferAvail

입력에 인스턴스 이름 및 데이터를 설명하는 데 사용할 수 있는 WNODE_ALL_DATA 구조체의 버퍼 공간 바이트 수를 포함해야 합니다. 반환할 때 이 멤버는 남아 있는 버퍼 공간의 바이트 수를 포함합니다.

BufferAvail 매개 변수에서 사용 가능한 버퍼 크기에 대한 값을 반환하는 세 가지 SCSI 포트 WMI 루틴이 있습니다.

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

ScsiPortWmiSetInstanceName

미니포트 드라이버는 먼저 ScsiPortWmiSetInstanceCount 호출해야 하지만 ScsiPortWmiSetInstanceCount 호출된 후에는 미니 드라이버가 ScsiPortWmiSetData 호출하고 ScsiPortWmiSetInstanceName호출하는 순서는 중요하지 않습니다. ScsiPortWmiSetData 또는 ScsiPortWmiSetInstanceName호출하는 경우 BufferAvail 매개 변수의 루틴에 전달된 값은 가장 최근에 호출된 SCSI 포트 WMI 루틴에서 BufferAvail 매개 변수에 반환된 값과 동일해야 합니다. 예를 들어 미니 드라이버가 scsiPortWmiSetInstanceCount 호출하고 이 루틴은 BufferAvail 매개 변수에서 1,000의 값을 반환한다고 가정합니다. 다음으로, 미니 드라이버는 BufferAvail 매개 변수에서 500 값을 반환하는 ScsiPortWmiSetData 호출합니다. 마지막으로 미니 드라이버는 BufferAvail 매개 변수에서 200 값을 반환하는 ScsiPortWmiSetInstanceName 호출합니다. 초기 값 1,000은 BufferAvailScsiPortWmiSetData 전달되어야 하며, 값 500은 ScsiPortWmiSetInstanceName전달되어야 합니다.

DataLength 바이트크기의 새 인스턴스 데이터를 추가하는 데 사용할 수 있는 메모리가 충분하지 않은 경우 BufferAvail 멤버에 반환됩니다.

[in, out] SizeNeeded

입력에서 InstanceIndex지정된 인스턴스에 대한 설명 데이터를 추가하기 전에 전체 WNODE 설명하는 데 필요한 바이트 수를 나타냅니다. 반환할 때 이 멤버는 새 인스턴스에 대한 데이터를 포함하여 WNODE의 크기를 포함합니다.

반환 값

ScsiPortWmiSetData 루틴은 호출자가 InstanceIndex식별된 인스턴스에 대한 설명 정보를 저장할 수 있는 버퍼에 대한 포인터를 반환합니다. ScsiPortWmiSetData 인스턴스 데이터에 충분한 메모리를 할당할 수 없거나 요청 컨텍스트 내에 포함된 WNODE가 WNODE_ALL_DATA형식이 아니면 ScsiPortWmiSetData NULL 반환합니다.

발언

ScsiPortWmiSetData호출하기 전에 미니 드라이버는 ScsiPortWmiSetInstanceCount 호출해야 합니다.

RequestContext 매개 변수는 WMI(Windows Management Instrumentation) SRB(SCSI 요청 블록)와 연결된 정보를 포함하는 요청 컨텍스트 구조(SCSIWMI_REQUEST_CONTEXT)를 가리킵니다. 요청 컨텍스트 구조는 WMI 시스템에서 사용자 모드 데이터 소비자와 커널 모드 데이터 공급자(예: 드라이버) 간에 데이터를 전달하는 데 사용하는 WMI WNODE_XXX 구조 중 하나를 포함합니다.

ScsiPortWmiSetData 루틴에는 요청 컨텍스트 내에 정의된 WNODE 구조체가 WNODE_ALL_DATA형식이어야 합니다. 이는 ScsiPortWmiSetData WMI 데이터 블록과 연결된 인스턴스에 대한 데이터 버퍼의 위치와 길이를 지정할 수 있기 때문입니다. 단일 인스턴스에 대한 정보를 포함하는 WNODE_SINGLE_INSTANCE 구조와 달리 WNODE_ALL_DATA 구조에는 여러 인스턴스의 버퍼 영역에 대한 포인터 배열이 포함되며, ScsiPortWmiSetDataInstanceIndex 매개 변수를 이 배열의 인덱스로 사용하여 특정 인스턴스에 적합한 배열 요소를 초기화합니다. 초기화된 각 배열 요소에는 인스턴스에 대한 버퍼 영역의 크기와 위치가 포함됩니다.

요청 컨텍스트에 할당된 메모리는 미니포트 드라이버가 ScsiPortWmiPostProcess호출하고 ScsiPortWmiPostProcess 최종 SRB 상태 및 버퍼 크기를 반환할 때까지 유효해야 합니다. SRB가 보류될 수 있는 경우 요청 컨텍스트에 대한 메모리는 SRB 확장에서 할당되어야 합니다. SRB가 보류할 수 없는 경우 범위를 벗어나지 않는 스택 프레임에서 메모리를 할당할 수 있습니다.

요구 사항

요구
대상 플랫폼 바탕 화면
헤더 scsiwmi.h(Miniport.h, Scsi.h 포함)

참고 항목

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE