none
MFC REG_BINARY data를 얻는 방법은 무엇인가요? RRS feed

  • 질문

  • 이미지

    ::RegQueryValueEx을 사용하여 바이너리의 정보 데이터를 배열에 저장했는데 배열에 저장된 내용이 정확하지않고 

    윈도우니 변환 할때 리틀 엔디언을 적용해야하는지도 잘 모르겠습니다.

    질문

    1. 레지스트리 키에서 바이너리 데이터(REG_BINARY)를 정확하게 얻어오는 방법이 무엇인가요?

    2. 변환시 리틀엔디언을 적용해서 변환해야하나요?

    2017년 8월 5일 토요일 오전 12:58

답변

  • Registry Value Type이 REG_BINARY 타입이라면 RegQueryValueEx 함수의 5번째와 6번째 파라미터에

    BYTE 배열과 배열 사이즈를 넘겨주시면 됩니다.

    여기서 주의할 것은 BYTE 배열의 크기가 실제 레지스트리에 저장된 값 보다는 크거나 같아야겠죠.

    BYTE 배열 크기 잡기가 어려우시다면 RegQueryValueEx 호출하실 때 5번째 파라미터에 NULL을 전달하면

    6번째 파라미터에 실제 레지스트리에 저장된 값의 사이즈를 반환하므로

    이를 이용하여 동적 배열을 할당하여 넘기셔도 됩니다.

    그리고 BYTE 배열 형태이기 때문에 엔디안 변환은 따로 필요 없습니다.

    • 답변으로 표시됨 GoodHa 2017년 8월 8일 화요일 오전 3:34
    2017년 8월 7일 월요일 오전 12:47

모든 응답

  • Registry Value Type이 REG_BINARY 타입이라면 RegQueryValueEx 함수의 5번째와 6번째 파라미터에

    BYTE 배열과 배열 사이즈를 넘겨주시면 됩니다.

    여기서 주의할 것은 BYTE 배열의 크기가 실제 레지스트리에 저장된 값 보다는 크거나 같아야겠죠.

    BYTE 배열 크기 잡기가 어려우시다면 RegQueryValueEx 호출하실 때 5번째 파라미터에 NULL을 전달하면

    6번째 파라미터에 실제 레지스트리에 저장된 값의 사이즈를 반환하므로

    이를 이용하여 동적 배열을 할당하여 넘기셔도 됩니다.

    그리고 BYTE 배열 형태이기 때문에 엔디안 변환은 따로 필요 없습니다.

    • 답변으로 표시됨 GoodHa 2017년 8월 8일 화요일 오전 3:34
    2017년 8월 7일 월요일 오전 12:47
  • 문제 해결에 도움을 주셔서 감사합니다.

    추가적으로 질문이 있습니다.

    5번째 파라미터에 NULL을 주게 된다면 6번째 파라미터에 실제 레지스트리에 저장된 값의 사이즈를 반환하다고 하셨는데

    5번째 파라미터에 null을 주게 된다면 해당 data를 동적으로 어떤 방식으로 받아야하는지 의문입니다.

    추가적인 질문으로

    레지스트리 키에 데이터(데이터 타입은 바이너리입니다.)에서 시간에 대한 데이터를 추출을 했는데

    이 16진수를 우리가 읽을수 있는 시간으로 변경하는 방법 알고싶습니다..

    질문에 답해주셔서 감사합니다.

    2017년 8월 8일 화요일 오전 3:39
  • 5번째 파라미터에 null을 주게 된다면 해당 data를 동적으로 어떤 방식으로 받아야하는지 의문입니다.

    -> 5번째 파라미터에 NULL을 주어서 한 번 호출하고(사이즈 얻기), 버퍼를 넘겨서 한 번 더 호출하시면 됩니다.

    결과적으로 RegQueryValueEx 함수를 두 번 호출하는 것이지요.

    레지스트리 키에 데이터(데이터 타입은 바이너리입니다.)에서 시간에 대한 데이터를 추출을 했는데 이 16진수를 우리가 읽을수 있는 시간으로 변경하는 방법 알고싶습니다..

    -> 시간 데이터가 어떤 포맷으로 저장되어있는지 제가 알 방법이 없으니 도움을 드리기 어려울 것 같네요.

    2017년 8월 10일 목요일 오전 12:19
  • 응용 프로그램에 대한 정보를 담고있는 바이너리 입니다.

    저 파란색으로 줄처진 부분이 시간을 담고있는 부분인데

    DCode프로그램으로 windows 리틀 엔디안형식 일반 시간 변경으로 변경하면 해당 시간이 나오는데

    코드상으로 저 바이너리 값을 어떻게 변경해야 우리가 알아볼수 있는 시간이 될수있는지 궁굼합니다. 

    2017년 8월 15일 화요일 오전 12:48