Windows 윈도우 운영 체제에서 제공하는 레지스트리 값 형식

레지스트리 값은 데이터를 저장하는데 사용되는 여러 가지 형식 중 하나를 가질 수 있습니다. 예를 들어, RegSetValueEx 함수를 사용하여 레지스트리 값에 데이터를 저장할 때, 아래에 설명된 형식 중 하나를 선택하여 데이터의 형식을 지정할 수 있습니다. 또한, RegQueryValueEx와 같은 함수를 사용하여 레지스트리 값을 검색할 때, 이러한 형식 중 하나를 통해 검색된 데이터의 형식을 나타낼 수 있습니다.

간단히 정리하면 다음과 같습니다.

  • 레지스트리 값은 다양한 형식의 데이터를 저장할 수 있습니다.
  • 데이터 저장 및 검색에 사용되는 함수는 이러한 형식을 지정하거나 확인할 수 있습니다.
  • 함수를 사용하여 값을 저장하거나 검색할 때 데이터 형식을 지정하거나 확인하는 것이 중요합니다.
아래 설명은 comeinsidebox.com 에서 테스트 및 검증 후 작성 된 내용이지만 이것이 본문의 내용의 정확성이나 신뢰성에 대해 보증을 하는 것은 아니니 단순 하게 참고용으로 확인바랍니다.

이 정보는 마이크로소프트 공식 문서를 기반으로 하며 본 내용은 필자의 블로그에 인용 목적으로 좀 더 쉽게 이해할 수 있도록 재 가공된 것 입니다.

레지스트리 값 형식

다음 레지스트리 값 형식은 Windows 운영 체제에서 제공하는 헤더 파일 중 하나이며, 지스트리 값 형식과 관련된 정의를 포함하고 있는 winnt.h 파일에 정의되어 있습니다. 이 헤더 파일을 사용하여 프로그래밍 언어로 작성된 프로그램이 레지스트리 값 형식에 대한 정보를 참조할 수 있습니다.

값 형식설명
REG_BINARY모든 형태의 이진 데이터입니다. 즉, 이진 형식으로 저장된 데이터입니다.
REG_DWORD32비트 숫자입니다. 일반적으로 정수 값으로 사용됩니다.
REG_DWORD_LITTLE_ENDIANlittle-endian 형식의 32비트 숫자입니다. Windows는 little-endian 컴퓨터 아키텍처에서 실행되도록 설계되었습니다.
REG_DWORD_BIG_ENDIANbig-endian 형식의 32비트 숫자입니다. 일부 UNIX 시스템은 빅 엔디안 아키텍처를 지원합니다.
REG_EXPAND_SZ환경 변수에 대한 확장되지 않은 참조(예: %PATH%)를 포함하는 null로 종료된 문자열입니다. 환경 변수 참조를 확장하기 위해 사용될 수 있습니다.
REG_LINK기호 링크의 대상 경로를 포함하는 null로 종료된 유니코드 문자열입니다. 심볼릭 링크에 대한 정보를 포함하는 null로 끝나는 유니코드 문자열입니다.
REG_MULTI_SZnull로 끝나는 문자열 시퀀스입니다. 여러 개의 문자열을 포함할 수 있으며, 각 문자열은 null 문자로 구분됩니다. 빈 문자열(\0)에 의해 종료됩니다.
REG_NONE정의된 형식이 없는 데이터입니다.
REG_QWORD64비트 숫자입니다.
REG_QWORD_LITTLE_ENDIANlittle-endian 형식의 64비트 숫자입니다.
Windows는 little-endian 컴퓨터 아키텍처에서 실행되도록 설계되었습니다. Windows 운영 체제에서 사용되는 표준 형식입니다.
REG_SZnull로 끝나는 문자열입니다. 일반적으로 텍스트 형식으로 사용됩니다.

이 형식들을 사용하여 레지스트리 값에 저장되는 데이터의 형식을 나타낼 수 있으며, 해당 형식으로 검색된 데이터를 표현할 수 있습니다.

Windows에서 PuTTY 설치하는 방법

문자열 값

문자열 값은 REG_SZ, REG_MULTI_SZ, 또는 REG_EXPAND_SZ 형식 중 하나일 수 있는데 레지스트리에서 이런 문자열 값을 다룰 때 몇 가지 주의해야 할 사항이 있습니다. 문자열은 적절한 종료 null 문자와 함께 저장되지 않았을 수 있습니다. 따라서 레지스트리에서 문자열 값을 읽을 때, 문자열을 사용하기 전에 문자열이 올바르게 종료되었는지 확인해야 합니다. 그렇지 않으면 버퍼 오버플로우와 같은 문제가 발생할 수 있습니다.

문자열 값을 레지스트리에 쓸 때, 종료 null 문자(\0)를 포함하여 문자열의 길이를 지정해야 합니다. 일반적인 실수는 strlen 함수를 사용하여 문자열의 길이를 계산하면서 종료 null 문자를 고려하지 않고 문자열의 문자 수만 반환하는 것입니다. 따라서 문자열의 길이를 계산할 때에는 strlen(string) + 1과 같이 종료 null 문자를 고려해야 합니다.

REG_MULTI_SZ 형식의 경우, 문자열 시퀀스는 길이가 0인 문자열로 끝나야 합니다. 따라서 시퀀스에 길이가 0인 문자열을 포함할 수 없으며, 빈 시퀀스는 \0로 정의됩니다.

요약하면,

  • 문자열 값 확인: 레지스트리에서 문자열 값을 읽을 때, 문자열이 올바르게 null 문자로 끝나는지 확인해야 합니다. 이렇게 하지 않으면 버퍼 오버플로우3와 같은 문제가 발생할 수 있습니다.
  • 문자열 길이 계산: 레지스트리에 문자열을 저장할 때는 문자열의 길이를 지정해야 하며, 이 길이에는 종결 null 문자(\0)도 포함되어야 합니다. 함수를 사용하여 문자열의 길이를 계산하는 경우, strlen(string) + 1를 사용하여 종결 null 문자를 포함한 문자열 길이를 얻을 수 있습니다.
  • REG_MULTI_SZ 문자열: REG_MULTI_SZ는 여러 개의 문자열을 포함하는 시퀀스입니다. 종료 문자는 빈 문자열인 \0을 사용하며, 두 개의 연속된 null 문자로 끝나야 합니다.
  • 빈 문자열 시퀀스 대한 정의: 길이가 0인 문자열이 사용되는 경우, 이 값은 빈 문자열로 간주되며, 이러한 빈 문자열은 시퀀스 내에 포함될 수 없습니다. 시퀀스를 정의할 때는 \0을 사용하여 빈 문자열로 표시합니다.

이러한 점을 유의하여 문자열 값을 레지스트리에서 읽거나 쓸 때는, 문자열의 끝을 나타내는 null 문자와 문자열의 길이를 정확하게 고려해야 합니다. 그렇게 함으로써 문제 발생을 예방하고, 문자열을 올바르게 처리할 수 있습니다.

바이트 형식

바이트 형식은 컴퓨터 메모리에 여러 바이트의 값을 저장하는 방식에 관한 것으로 주로 little-endian 형식과 big-endian 형식 이렇게 두 가지 형식이 있습니다. 이러한 바이트 형식은 컴퓨터 아키텍처 및 플랫폼에 따라 다를 수 있으며, 데이터의 엔디안ENDIAN 형식을 알고 있어야 올바르게 데이터를 해석하거나 교환할 수 있습니다.

윈도우 11 화면 분할 나누기 기능 Snap Layouts을 끄는 방법

little-endian 형식

Little-endian은 Little-endian 컴퓨터 아키텍처를 가리키는 용어입니다. Little-endian 컴퓨터 아키텍처는 컴퓨터 메모리에 숫자를 저장할 때 가장 작은 바이트가 가장 앞에 오는 방식이며 다음과 같은 특징이 있습니다.

  • 다중 바이트 값의 저장 순서는 가장 낮은 바이트(Least Significant Byte, LSB)부터 시작하여 가장 높은 바이트(Most Significant Byte, MSB)로 저장됩니다.
  • 예시: 4바이트 값인 0x12345678은 little-endian 형식으로 0x78 0x56 0x34 0x12 순서로 저장됩니다.
  • 주로 Intel 프로세서와 같은 x86 아키텍처에서 사용되는 방식입니다.
  • Little-endian 형식의 장점은 메모리에서 값을 읽을 때 원하는 바이트 수 만큼 쉽게 추출할 수 있다는 것입니다.
  • "little-endian"이라는 용어는 조나단 스위프트의 소설인 "걸리버의 여행"에서 비틀거리는 동작을 가리키는 가벼운 문화적 참조라고 볼 수 있습니다4.

big-endian 형식

big-endian은 Little-endian과 반대로 가장 높은 바이트부터 낮은 바이트 순으로 데이터를 저장하는 방식으로 다음과 같은 특징이 있습니다.

  • 다중 바이트 값을 메모리에 저장할 때, 가장 높은 바이트(Most Significant Byte, MSB)부터 시작하여 가장 낮은 바이트(Least Significant Byte, LSB) 순서로 저장됩니다.
  • 예시: 4바이트 값인 0x12345678은 big-endian 형식으로 0x12 0x34 0x56 0x78 순서로 저장됩니다.
  • Motorola, IBM PowerPC 프로세서 등에서 사용되는 저장 방식입니다.
  • Big-endian 형식의 장점은 숫자의 부호 비트를 바로 확인할 수 있으며, 음수 작업을 수행하기 쉽습니다.
  • "big-endian"이라는 용어 역시 "걸리버의 여행"에서 비틀거리는 동작을 가리키는 것으로 단순한 문화적 참조입니다.

여기에 추가로 알아두면 좋은 점이 있습니다.

  • 바이트 형식은 다중 바이트 값을 저장하는 방식을 나타냅니다. 예를 들어, 2바이트의 숫자 0x1234를 저장할 때 little-endian 형식에서는 메모리에 0x34 0x12로 저장되고, big-endian 형식에서는 0x12 0x34로 저장됩니다.
  • 엔디안 형식은 컴퓨터 아키텍처에 따라 다를 수 있으며, 데이터를 교환할 때 서로 다른 엔디안 형식을 고려해야 합니다.
  • 엔디안 변환은 다른 엔디안 형식으로 데이터를 변환하는 과정을 의미합니다. 이는 데이터 교환 및 호환성 문제를 해결하기 위해 사용될 수 있습니다.
참고: 두 형식은 데이터 저장 방식이 서로 다르기 때문에 서로 호환되지 않는 경우가 있습니다. 따라서 두 형식간의 데이터 전송이 필요한 경우, 바이트 순서를 변환하는 작업이 필요할 수 있습니다. 이러한 바이트 순서의 변환 작업을 바이트 스왑Byte Swap이라고 합니다. 이렇게 함으로써 데이터 전송이나 파일 저장 과정에서 발생할 수 있는 오류를 줄일 수 있습니다.
Windows 10 계정 이름 변경 하는 방법 로컬 과 마이크로소프트 계정 모두 정리

관련 글

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

Leave a Comment