다음을 통해 공유


ZwSetValueKey 함수(wdm.h)

ZwSetValueKey 루틴은 레지스트리 키의 값 항목을 만들거나 대체합니다.

구문

NTSYSAPI NTSTATUS ZwSetValueKey(
  [in]           HANDLE          KeyHandle,
  [in]           PUNICODE_STRING ValueName,
  [in, optional] ULONG           TitleIndex,
  [in]           ULONG           Type,
  [in, optional] PVOID           Data,
  [in]           ULONG           DataSize
);

매개 변수

[in] KeyHandle

레지스트리 키에 대한 핸들을 사용하여 값 항목을 작성합니다. 이 핸들은 ZwCreateKey 또는 ZwOpenKey성공적으로 호출하여 만듭니다.

[in] ValueName

데이터를 쓸 값 항목의 이름에 대한 포인터입니다. 값 항목에 이름이 없는 경우 이 매개 변수는 NULL 포인터가 될 수 있습니다. 이름 문자열을 지정하고 지정된 이름이 포함된 키를 기준으로 고유하지 않으면 기존 값 항목의 데이터가 바뀝니다.

[in, optional] TitleIndex

이 매개 변수는 예약되어 있습니다. 디바이스 및 중간 드라이버는 이 매개 변수를 0으로 설정해야 합니다.

[in] Type

작성할 다음 시스템 정의 데이터 형식 중 하나입니다.

형식 의미
REG_BINARY 모든 형태의 이진 데이터입니다.
REG_DWORD 4 바이트 숫자 값입니다.
REG_DWORD_LITTLE_ENDIAN 가장 낮은 주소에서 가장 큰 바이트가 가장 낮은 4 바이트 숫자 값입니다. REG_DWORD 동일합니다.
REG_DWORD_BIG_ENDIAN 가장 높은 주소에서 가장 큰 바이트가 가장 낮은 4 바이트 숫자 값입니다.
REG_EXPAND_SZ "%PATH%"와 같은 환경 변수에 대한 확장되지 않은 참조를 포함하는 null로 종료된 유니코드 문자열입니다.
REG_LINK 기호 링크의 이름을 지정하는 유니코드 문자열입니다. 이 유형은 디바이스 및 중간 드라이버와 관련이 없습니다.
REG_MULTI_SZ null로 끝나는 문자열의 배열로, 다른 0으로 종료됩니다.
REG_NONE 특정 형식이 없는 데이터입니다.
REG_SZ null로 끝나는 유니코드 문자열입니다.
REG_RESOURCE_LIST \ResourceMap 트리에서 드라이버 또는 제어하는 물리적 디바이스 중 하나에서 사용하는 디바이스 드라이버의 하드웨어 리소스 목록
REG_RESOURCE_REQUIREMENTS_LIST 디바이스 드라이버의 가능한 하드웨어 리소스 목록 또는 제어하는 물리적 디바이스 중 하나를 사용하여 시스템에서 하위 집합을 \ResourceMap 트리에 씁니다.
REG_FULL_RESOURCE_DESCRIPTOR 물리적 디바이스에서 사용, 검색 및 시스템에 의해 \HardwareDescription 트리에 기록되는 하드웨어 리소스 목록

디바이스 드라이버는 ZwSetValueKey 를 호출하여 \Registry...\ResourceMap 키의 하위 키에 값 항목을 명시적으로 작성하려고 시도해서는 안 됩니다. 시스템에서만 \Registry...\HardwareDescription 트리에 값 항목을 쓸 수 있습니다.

[in, optional] Data

값 항목에 대한 데이터를 포함하는 호출자가 할당한 버퍼에 대한 포인터입니다.

[in] DataSize

데이터 버퍼의 크기(바이트)를 지정합니다. Type이 REG_XXX_SZ이면 이 값은 종료되는 0에 대한 공간을 포함해야 합니다.

반환 값

ZwSetValueKey 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 루틴이 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_ACCESS_DENIED 호출자에게 레지스트리 값에 대한 적절한 액세스 권한이 없습니다.
STATUS_INVALID_HANDLE 핸들이 잘못되었습니다.

설명

ZwSetValueKey에 전달된 KeyHandle은 이 호출이 성공하려면 desiredAccess 플래그가 설정된 KEY_SET_VALUE 열어야 합니다. DesiredAccess에 대한 가능한 값에 대한 설명은 ZwCreateKey를 참조하세요.

지정된 키에 지정된 ValueName과 일치하는 이름의 기존 값 항목이 없는 경우 ZwSetValueKey 는 지정된 이름의 새 값 항목을 만듭니다. 일치하는 값 항목 이름이 있는 경우 이 루틴은 지정된 ValueName에 대한 원래 값 항목을 덮어씁니다. 따라서 ZwSetValueKey 는 특정 키의 각 값 항목에 대해 고유한 이름을 유지합니다. 각 값 항목 이름은 포함된 키에 고유해야 하지만 레지스트리의 여러 다른 키에는 동일한 이름의 값 항목이 있을 수 있습니다.

레지스트리 키 작업에 대한 자세한 내용은 드라이버에서 레지스트리 사용을 참조하세요.

이 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwSetValueKey" 대신 "NtSetValueKey"라는 이름을 사용해야 합니다.

커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

추가 정보

HalAssignSlotResources

IoAssignResources

IoQueryDeviceDescription

IoReportResourceUsage

네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용

ZwClose

ZwCreateKey

ZwFlushKey

ZwOpenKey