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 네이티브 시스템 서비스 루틴의 NtXxx 및 ZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 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) |