다음을 통해 공유


WdfRegistryQueryUnicodeString 함수(wdfregistry.h)

[KMDF 및 UMDF에 적용]

WdfRegistryQueryUnicodeString 메서드는 현재 지정된 레지스트리 문자열 값에 할당된 문자열 데이터를 검색하고 지정된 UNICODE_STRING 구조체에 문자열을 복사합니다.

구문

NTSTATUS WdfRegistryQueryUnicodeString(
  [in]            WDFKEY           Key,
  [in]            PCUNICODE_STRING ValueName,
  [out, optional] PUSHORT          ValueByteLength,
  [in, out]       PUNICODE_STRING  Value
);

매개 변수

[in] Key

열린 레지스트리 키를 나타내는 레지스트리 키 개체에 대한 핸들입니다.

[in] ValueName

레지스트리 값의 이름을 포함하는 UNICODE_STRING 구조체에 대한 포인터입니다.

[out, optional] ValueByteLength

종료 NULL 바이트를 포함하여 이 가리키는 유니코드 문자열에 포함된 바이트 수를 수신하는 위치에 대한 포인터입니다. 이 포인터는 선택 사항이며 NULL일 수 있습니다.

[in, out] Value

Key에서 지정하는 키에 대한 데이터 문자열을 수신하는 UNICODE_STRING 구조체에 대한 포인터입니다. 이 매개 변수가 NULL 이고 ValueByteLengthNULL이 아닌 경우 WdfRegistryQueryUnicodeString 은 문자열 크기만 반환합니다.

반환 값

WdfRegistryQueryUnicodeString 은 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_INVALID_DEVICE_REQUEST

WdfRegistryQueryUnicodeString 은 IRQL = PASSIVE_LEVEL 호출되지 않았습니다.

STATUS_INVALID_PARAMETER
잘못된 매개 변수가 지정되었습니다.
STATUS_INSUFFICIENT_RESOURCES
작업을 완료할 메모리가 부족했습니다.
STATUS_ACCESS_DENIED
드라이버가 KEY_QUERY_VALUE, KEY_READ 또는 KEY_ALL_ACCESS 액세스 권한이 있는 레지스트리 키를 열지 않았습니다.
STATUS_OBJECT_TYPE_MISMATCH
ValueName 매개 변수가 REG_SZ 않은 레지스트리 값의 데이터 형식입니다.
STATUS_BUFFER_OVERFLOW
Value 매개 변수가 가리키는 버퍼가 너무 작아서 부분 데이터만 버퍼에 기록되었습니다.
STATUS_BUFFER_OVERFLOW
Value 매개 변수가 가리키는 버퍼가 너무 작아서 버퍼에 데이터가 기록되지 않았습니다.
STATUS_OBJECT_NAME_NOT_FOUND
레지스트리 값을 사용할 수 없습니다.
 

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

레지스트리 키 개체에 대한 자세한 내용은 Framework-Based 드라이버에서 레지스트리 사용을 참조하세요.

예제

직렬 샘플 드라이버의 다음 코드 예제는 디바이스의 하드웨어 키 아래 PortName 값에 할당된 문자열 데이터를 나타내는 유니코드 문자열을 검색합니다.

NTSTATUS
SerialReadSymName(
    IN WDFDEVICE Device,
    __out PWCHAR RegName,
    IN OUT PUSHORT LengthOfRegName // In characters
    )
{
    NTSTATUS status;
    WDFKEY hKey;
    UNICODE_STRING value;
    UNICODE_STRING valueName;
    USHORT requiredLength;

    value.Buffer = RegName;
    value.MaximumLength = *LengthOfRegName;
    value.Length = 0;

    status = WdfDeviceOpenRegistryKey(
                                      Device,
                                      PLUGPLAY_REGKEY_DEVICE,
                                      STANDARD_RIGHTS_ALL,
                                      WDF_NO_OBJECT_ATTRIBUTES,
                                      &hKey
                                      );

    if (NT_SUCCESS (status)) {
        RtlInitUnicodeString(
                             &valueName,
                             L"PortName"
                             );
        status = WdfRegistryQueryUnicodeString (
                                      hKey,
                                      &valueName,
                                      &requiredLength,
                                      &value
                                      );
        WdfRegistryClose(hKey);
    }
    return status;
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfregistry.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

추가 정보

RtlInitUnicodeString

UNICODE_STRING

WdfRegistryClose

WdfRegistryQueryMemory

WdfRegistryQueryMultiString

WdfRegistryQueryString

WdfRegistryQueryULong

WdfRegistryQueryValue