반응형
RegSetValueEx
- 해당키에 값을 지정할 때 사용합니다.
- 해당키에 값을 지정할 때 사용합니다.
LONG WINAPI RegSetVlaueEx(
HKEY hKey,
LPCTSTR lpValueName,
DWORD lpReserved,
DWORD dwType,
const BYTE *lpData,
BYTE *cbData,
);
HKEY hKey,
LPCTSTR lpValueName,
DWORD lpReserved,
DWORD dwType,
const BYTE *lpData,
BYTE *cbData,
);
Parameters
- hKey
- 해당 레지스트리 키의 핸들. RegCreateKeyEx 또는 RegOpenKeyEx 로 획득한 핸들이나
기본적으로 정의되어 있는 키의 핸들(predefined keys)을 사용합니다.
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
- lpValueName
- 해당 레지스트리 이름.
정보를 설정하고자 하는 항목의 이름을 가지고 있는 문자열의 주소를 명시한다. 만약, hKey에 속한 항목들중에서 lpValueName에 명시된 이름을 가진 항목이 존재하지 않는다면 lpValueName에 명시된 이름으로 항목을 추가한다. 그리고 이 문자열은 NULL로 끝나는 문자열이여야 한다.현재는 사용하지 않습니다. 미래를 위해 예약된 인자입니다. 반드시 0 을 주어야 합니다.
- lpReserve
- 예약된 값으로 0을 입력. ( 예약된 값 )
- dwType
- lpData에 들어있는 정보를 설정할 항목의 데이터 형식을 명시한다. 만약, 해당 항목의 데이터 형식을 알지 못한다면 RegQueryValueEx 함수를 이용하여 데이터 형식을 알아내면 된다. 이 함수에서 사용가능한 데이터 형식에 대한 코드 값은 아래와 같다.
REG_BINARY - 여러개의 이진값(실제로는 16진수)으로 구성되어 있는 데이터 형식
REG_DWORD - 32비트 크기의 정수 데이터 형식
REG_DWORD_LITTLE_ENDIAN - 32비트 크기의 정수 데이터 형식 (바이트 정렬 : little endian)
0x12345678 저장 -> 0x78, 0x56, 0x34, 0x12 형식으로 저장됨
Windows 95/98/Me, NT/2000/XP는 little endian 방식을 사용한다.
REG_SZ - NULL로 끝나는 문자열 형식
REG_MULTI_SZ - NULL로 끝나는 문자열이 나열되어 있는 형식. 종결시에는 NULL을 연속해서 사용
예를들어, "홍길동", "홍순이"와 같은 두 문자열이 REG_MULTI_SZ 형식으로 구성된다면
"홍길동(NULL)홍순이(NULL)(NULL)" 이다.
REG_EXPAND_SZ - NULL로 끝나는 문자열 형식이다.
하지만 REG_SZ 형식과는 달리 환경변수를 참조할수 있는 형식이 포함될수 있다.
예를들어, C:\Program Files\Microsoft Visual Studio\VC98\cl.exe와 같은 문자열 정보를
%PATH%\cl.exe와 같이 사용할수 있는 형식이다.
REG_RESOURCE_LIST - 장치 드라이버(Device Driver)의 자원 목록에 관련된 형식
REG_NONE - 데이터 형식이 정해져 있지 않은 경우
( REG_LINK와 같은 코드 값도 있지만 응용프로그램에서는 이 값을 사용하지 않는다.)
- lpData
- 설정할 항목에 사용할 데이터가 들어있는 메모리 공간의 주소를 명시한다. 해당 데이터가 문자열 형식(REG_SZ)이라면 NULL로 끝나는 문자열이여야 하고 다중문자열(REG_MULTI_SZ)형식이라면 마지막에 NULL을 두번 연속사용해야 한다.
- cbData
- lpData 매개변수에 사용한 메모리 공간의 크기를 명시한다. 만약, lpData에 사용한 정보가 문자열 형식(REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ) 중에 하나라면 해당 문자열의 길이를 명시하면 된다. 즉, 메모리 공간의 크기가 64라고 할지라도 내용이 "MyVideo"라면 8( 7 + NULL 문자 포함)을 명시하면 된다. 바로 위에서 사용한 예제 코드를 완성해보면 아래와 같다. ( 크기는 바이트 단위이다. 즉, 3이면 3바이트이다. )
- Return Value
- 이 함수가 성공적으로 작업을 완료했다면 ERROR_SUCCESS 값을 반환한다. 만약, 실패했다면 0이 아닌 값을 반환하고 이 에러값은 winerror.h에 정의 되어 있다. 그리고 에러에 대한 좀더 상세한 내용을 알고 싶다면 FORMAT_MESSAGE_FROM_SYSTEM 값을 이용하여 FormatMessage 함수를 호출하면 된다.
함수 사용시 주의사항
정보를 저장할때 레지스트리의 효율적인 사용을 위해서 크기가 2048보다큰 정보는 별도의 파일을 만들고그 파일 이름을 저장하는것이 좋다. 즉, 무리하게 큰 정보를 레지스트리에 직접 저장하는것은 레지스트리의
효율성을 저해하는 요소가 될것이다.
이 함수를 사용하기 위해서는 레지스트리 키를 열때 RegCreateKeyEx 또는 RegOpenKeyEx 함수를 사용해야하고
이 두 함수 중에 하나를 호출할때 KEY_SET_VALUE 권한을 명시해야 한다.
Windows 95/98/Me에서는 레지스트리 서브키나 값의 이름은 그 문자열의 길이가 255를 초과할수 없다. 그리고
설정하고자 하는 데이터의 크기는 16,300Bytes를 넘을수 없다. 또한 한개의 키에 여러개의 항목이 있는 경우,
각 항목에 설정된 데이터의 크기를 합산한 값이 64KBytes를 넘어서도 안된다.
요구사항
Window NT/2000/XP: Included in Windows NT 3.1 and later.Windows 95/98/Me: Included in Windows 95 and Later.
Header: Declared in Winbase.h: Include Windows.h.
Library: Use Advapi32.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000/XP.
Also supported by Microsoft Layer for Unicode.
반응형
'프로그래밍 > Windows API' 카테고리의 다른 글
GetLastError() 함수로 얻는 애러코드 (0) | 2010.12.11 |
---|---|
동적 링크 라이브러리(DLL) 사용 / 만들기 #1 (0) | 2010.11.16 |
동적 링크 라이브러리(DLL) 사용 / 만들기 #2 (0) | 2010.11.12 |
MultiByteToWideChar와 WideCharToMultiByte 함수 (2) | 2010.11.09 |
INI 파일 제어 함수 (Get...Profile... / Write...Profile...) (0) | 2010.11.04 |
API 함수 레퍼런스 (0) | 2010.11.04 |
레지스터 관련 - RegOpenKeyEx 함수 (0) | 2010.10.27 |
꼭 알아야 할 필수 API 함수 (0) | 2010.10.27 |
레지스터 관련 - RegCreateKeyEx 함수 (0) | 2010.10.27 |
Windows 와 Linux Thread Control 함수 비교 (동기화 함수) (0) | 2010.10.27 |