WMI_SET_DATAITEM_CALLBACK 콜백 함수(wmilib.h)

DpWmiSetDataItem 루틴은 데이터 블록의 instance 단일 데이터 항목을 변경합니다. 이 루틴은 선택 사항입니다.

구문

WMI_SET_DATAITEM_CALLBACK WmiSetDataitemCallback;

NTSTATUS WmiSetDataitemCallback(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP Irp,
  [in] ULONG GuidIndex,
  [in] ULONG InstanceIndex,
  [in] ULONG DataItemId,
  [in] ULONG BufferSize,
  [in] PUCHAR Buffer
)
{...}

매개 변수

[in] DeviceObject

드라이버의 WDM DEVICE_OBJECT 구조체에 대한 포인터입니다.

[in] Irp

IRP에 대한 포인터입니다.

[in] GuidIndex

드라이버가 WmiSystemControl에 전달한 WMILIB_CONTEXT 구조에서 제공한 GUID 목록에 0부터 시작하는 인덱스를 제공하여 데이터 블록을 지정합니다.

[in] InstanceIndex

GuidIndex에서 지정한 블록에 여러 인스턴스가 있는 경우 InstanceIndex는 instance 지정하는 0부터 시작하는 값입니다.

[in] DataItemId

설정할 데이터 항목의 ID를 지정합니다.

[in] BufferSize

버퍼에서 버퍼의 크기(바이트)를 지정합니다.

[in] Buffer

데이터 항목에 대한 새 값을 포함하는 버퍼에 대한 포인터입니다.

반환 값

DpWmiSetDataItem 은 STATUS_SUCCESS 또는 다음과 같은 적절한 오류 코드를 반환합니다.

설명

WMI는 드라이버가 IRP_MN_CHANGE_SINGLE_ITEM 요청에 대한 응답으로 WmiSystemControl을 호출한 후 드라이버의 DpWmiSetDataItem 루틴을 호출합니다.

시스템에서 제공하는 사용자 모드 구성 요소에 이 기능이 필요하다고 확신하지 않는 한 DpWmiSetDataItem 을 구현하지 마세요. DpWmiSetDataItem 루틴을 구현하는 경우 드라이버는 WmiSystemControl에 전달하는 WMILIB_CONTEXT 구조체의 SetWmiDataItem 멤버에 루틴의 주소를 배치해야 합니다. DpWmiSetDataItem 루틴을 구현하지 않으면 드라이버는 SetWmiDataItemNULL로 설정해야 합니다. 후자의 경우 WMI는 호출자에게 STATUS_READ_ONLY 반환합니다.

드라이버는 모든 입력 인수의 유효성을 검사해야 합니다. 특히 드라이버는 다음을 수행해야 합니다.

  • WMILIB_CONTEXT 구조체의 GuidCount 멤버에 따라 GuidIndex 값이 0과 GuidCount-1 사이인지 확인합니다.
  • 드라이버가 제거를 위해 지정된 데이터 블록에 플래그를 지정하지 않은지 확인합니다. 드라이버가 최근에 WMILIB_CONTEXT 구조에 포함된 WMIGUIDREGINFO 구조체에서 WMIREG_FLAG_REMOVE_GUID 플래그를 지정한 경우 제거가 발생하기 전에 집합 요청이 도착할 수 있습니다.
  • InstanceIndex 값이 데이터 블록에 대한 드라이버에서 지원하는 instance 인덱스 범위 내에 있는지 확인합니다.
  • DataItemId 값이 데이터 블록에 대한 드라이버에서 지원하는 데이터 항목 식별자 범위 내에 있는지 확인합니다.
  • BufferBufferSize가 유효한 크기의 데이터 항목을 설명하고 버퍼의 내용이 데이터 항목에 유효한지 확인합니다.
  • 지정된 데이터 항목이 드라이버가 호출자 시작 수정을 허용하는 항목인지 확인합니다. 즉, 드라이버는 읽기 전용으로 의도한 데이터 항목에 대한 수정을 허용해서는 안 됩니다.
스레드 컨텍스트가 시작 사용자 모드 애플리케이션의 컨텍스트라고 가정하지 마세요. 상위 수준 드라이버가 변경되었을 수 있습니다.

이 루틴은 페이지 가능할 수 있습니다.

이 루틴을 구현하는 방법에 대한 자세한 내용은 WmiSystemControl을 호출하여 WMI IRP 처리를 참조하세요.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 wmilib.h(Wmilib.h 포함)
IRQL PASSIVE_LEVEL 호출되었습니다.

추가 정보

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl