WDF_WMI_BUFFER_APPEND_STRING 함수(wdfwmi.h)
[KMDF에만 적용]
WDF_WMI_BUFFER_APPEND_STRING 함수는 지정된 유니코드 문자열을 WMI에 필요한 형식으로 지정된 버퍼에 복사합니다.
구문
NTSTATUS WDF_WMI_BUFFER_APPEND_STRING(
[out] PVOID Buffer,
[in] ULONG BufferLength,
[in] PCUNICODE_STRING String,
[out] PULONG RequiredSize
);
매개 변수
[out] Buffer
문자열을 수신하는 대상 버퍼에 대한 포인터입니다.
[in] BufferLength
문자열을 수신하는 대상 버퍼의 길이(바이트)입니다.
[in] String
복사할 문자열을 포함하는 UNICODE_STRING 구조체에 대한 포인터입니다.
[out] RequiredSize
대상 버퍼에 지정된 문자열을 저장하는 데 필요한 바이트 수를 수신하는 위치에 대한 포인터입니다.
반환 값
WDF_WMI_BUFFER_APPEND_STRING 작업이 성공하면 STATUS_SUCCESS 반환합니다. 대상 버퍼가 너무 작아 서 String 매개 변수가 지정하는 유니코드 문자열을 보유할 수 없는 경우 함수는 STATUS_BUFFER_TOO_SMALL 반환합니다.
설명
WMI를 사용하려면 EvtWmiInstanceQueryInstance 콜백 함수가 반환하는 문자열 앞에 바이트 수가 있어야 합니다. WDF_WMI_BUFFER_APPEND_STRING 함수는 바이트 수를 계산하고, 대상 버퍼에 저장한 다음, UNICODE_STRING 구조에서 대상 버퍼로 문자열을 복사합니다.
WDF_WMI_BUFFER_APPEND_STRING 반환되면 RequiredSize 매개 변수가 가리키는 위치에 버퍼에 기록된 총 바이트 수가 포함됩니다. 문자열 뒤에 있는 첫 번째 버퍼 주소를 찾으려면 드라이버가 RequiredSize 값을 Wdfcore.h에 정의된 WDF_PTR_ADD_OFFSET 매크로에 전달할 수 있습니다.
예제
다음 코드 예제는 직렬 샘플 드라이버에서 가져옵니다. 이 예제는 디바이스의 기호 이름을 가져오고 콜백 함수의 출력 버퍼에 이름을 복사하는 EvtWmiInstanceQueryInstance 콜백 함수입니다.
NTSTATUS
EvtWmiQueryPortName(
IN WDFWMIINSTANCE WmiInstance,
IN ULONG OutBufferSize,
IN PVOID OutBuffer,
OUT PULONG BufferUsed
)
{
WDFDEVICE device;
PSERIAL_DEVICE_EXTENSION pDevExt;
WCHAR pRegName[SYMBOLIC_NAME_LENGTH];
UNICODE_STRING string;
USHORT nameSize = sizeof(pRegName);
NTSTATUS status;
PAGED_CODE();
device = WdfWmiInstanceGetDevice(WmiInstance);
pDevExt = SerialGetDeviceExtension(device);
status = SerialReadSymName(
device,
pRegName,
&nameSize
);
if (!NT_SUCCESS(status)) {
return status;
}
RtlInitUnicodeString(
&string,
pRegName
);
return WDF_WMI_BUFFER_APPEND_STRING(
OutBuffer,
OutBufferSize,
&string,
BufferUsed
);
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
머리글 | wdfwmi.h(Wdf.h 포함) |
라이브러리 | 없음 |