Windows RawInput으로 HID 바코드 스캐너 등록·관리하기

현장에서 사용하는 바코드 스캐너는 흔히 키보드처럼 동작합니다. 메모장이나 입력창에 커서를 두고 바코드를 읽으면 숫자와 문자열이 바로 입력되는 방식입니다. 설치와 사용은 간단하지만, 여러 장치가 동시에 연결되는 환경에서는 입력값만으로 어느 장치가 스캔했는지 판단하기 어렵습니다.

이번 개선의 핵심은 바코드 문자열만 받는 데서 그치지 않고, Windows RawInput을 이용해 입력 장치를 구분하고 등록된 HID 장치를 관리할 수 있도록 흐름을 정리한 것입니다. 등록 화면에서는 최근 앱 로그에서 발견된 미등록 HID를 선택하거나 VID와 PID를 직접 입력하고, 장치의 표시명·분류·리더 모드·사용 여부를 함께 관리할 수 있습니다.

기존 키보드 입력 방식의 불편

키보드 에뮬레이션 방식은 스캐너가 입력한 값과 사용자가 실제 키보드로 입력한 값을 애플리케이션 관점에서 구별하기 어렵습니다. 스캐너가 두 대 이상 연결되어도 동일한 입력 이벤트로 처리되기 때문에 다음과 같은 문제가 생길 수 있습니다.

  • 어느 장비에서 입력된 값인지 확인하기 어렵습니다.
  • 여러 스캐너의 용도나 설치 위치를 구분하기 어렵습니다.
  • 관리 대상이 아닌 HID 장치가 연결되어도 별도로 분류하기 어렵습니다.
  • 입력창의 포커스가 다른 곳으로 이동하면 값이 예상하지 않은 화면에 입력될 수 있습니다.
  • 스캔 문자열과 일반 키보드 입력이 섞여 한 건의 데이터가 손상될 수 있습니다.

특히 MES나 현장 운영 시스템에서는 “무엇을 읽었는가”뿐 아니라 “어떤 장비가 읽었는가”도 중요합니다. 공정별 스캐너를 구분하거나 장비 단위로 로그를 확인해야 한다면 일반 키보드 이벤트만으로는 한계가 있습니다.

RawInput으로 장치 정보까지 함께 받기

Windows RawInput은 키보드와 마우스 같은 입력을 장치 단위로 구분해 받을 수 있는 기능입니다. HID 키보드 모드로 동작하는 바코드 스캐너도 RawInput 대상으로 등록하면 입력 데이터와 함께 장치 핸들을 확인할 수 있습니다.

장치 핸들을 통해 조회한 장치 경로에는 일반적으로 다음과 같은 정보가 포함될 수 있습니다.

  • VID: 제조사에 할당되는 Vendor ID
  • PID: 제조사가 제품 계열을 구분하는 Product ID
  • Device Path: 운영체제가 장치를 참조하기 위해 제공하는 경로
  • Device Handle: 현재 실행 세션에서 RawInput 장치를 구분하는 핸들

예를 들어 로그를 VALUE=[스캔값], VID=0C2E, PID=1001과 같이 남기면 같은 문자열이 입력되더라도 어느 장치 계열에서 발생했는지 함께 확인할 수 있습니다.

VID와 PID는 장치 모델을 분류하는 데 유용하지만 개별 물리 장치를 인증하는 고유 식별자는 아닙니다. 동일 모델의 장치는 같은 값을 사용할 수 있고, 일부 장치에서는 값이 모방될 수도 있습니다.

HID 등록 화면에서 관리하는 정보

등록 화면은 RawInput에서 발견한 장치 정보를 운영자가 이해하기 쉬운 설정으로 연결하는 역할을 합니다. 화면에서 관리하는 주요 항목은 다음과 같습니다.

  • 앱 로그 미등록 HID: 최근 앱 로그에서 발견했지만 아직 고객 HID 관리에 없는 장치를 선택합니다.
  • VID / PID: 대상 장치의 제조사 및 제품 식별값을 입력합니다.
  • 표시명: “지브라 바코드 스캐너”처럼 운영자가 알아보기 쉬운 이름을 지정합니다.
  • 장치 분류: 스캐너와 NFC 리더 등 장치의 용도를 구분합니다.
  • 리더 모드: 장치 입력을 어떤 방식으로 처리할지 지정합니다. 화면 예시에서는 RAW INPUT이 선택되어 있습니다.
  • 사용 여부: 등록 정보는 유지하면서 실제 입력 허용 여부를 켜거나 끕니다.

최근 로그에 나타난 미등록 HID를 선택할 수 있게 하면 긴 장치 경로에서 VID와 PID를 직접 찾아 옮기는 수고를 줄일 수 있습니다. 필요한 경우에는 값을 직접 입력해 장치를 미리 등록하는 방식도 사용할 수 있습니다.

핵심 동작 흐름

구체적인 클래스나 저장소 구성과 무관하게, RawInput 기반 HID 관리 기능은 일반적으로 다음 순서로 동작합니다.

RawInput 메시지 수신
→ 입력을 발생시킨 장치 핸들 확인
→ 장치 경로와 VID/PID 조회 및 정규화
→ 등록된 HID 목록과 대조
→ 장치 분류와 리더 모드 확인
→ 입력 데이터를 문자 단위로 해석
→ 종료 키에서 한 건의 스캔으로 확정
→ 스캔값과 장치 정보를 함께 전달·기록

1. 장치 식별

입력이 들어오면 먼저 어느 장치에서 발생했는지 확인합니다. 장치 경로에서 VID와 PID를 추출할 때는 영문 대소문자와 접두어, 자릿수를 일정한 형식으로 정규화해야 등록 정보와 안정적으로 비교할 수 있습니다.

2. 등록 목록 대조

정규화한 장치 정보가 등록 목록에 있는지 확인합니다. 미등록 장치는 로그에 후보로 남기되 업무 입력으로 사용할지는 별도의 정책으로 결정해야 합니다. 등록되어 있더라도 사용 설정이 꺼져 있다면 입력 처리 대상에서 제외할 수 있습니다.

3. 스캔 데이터 조립

HID 키보드 RawInput은 완성된 문자열을 한 번에 전달하는 방식이 아닐 수 있습니다. 키 입력을 순서대로 해석하고 버퍼에 모은 뒤, 스캐너가 덧붙이는 Enter 같은 종료 키를 기준으로 한 건의 값으로 확정하는 과정이 필요합니다.

13자리 숫자라고 해서 모두 EAN-13이라고 단정할 수는 없습니다. EAN-13으로 사용할 경우에는 숫자 길이뿐 아니라 체크 숫자 검증과 업무 규칙도 함께 적용하는 것이 안전합니다.

4. 장치 정보와 함께 전달

완성된 값에는 표시명, 장치 분류, VID·PID 같은 출처 정보를 함께 연결합니다. 이후 업무 화면이나 로그에서는 값만 보는 것이 아니라 어느 장치에서 언제 발생한 입력인지 구분할 수 있습니다.

사용자가 HID 장치를 등록하는 방법

  1. 대상 바코드 스캐너나 NFC 리더를 PC에 연결합니다.
  2. 장치를 한 번 사용해 앱 로그에 HID 정보가 수집되도록 합니다.
  3. HID 관리 등록 화면에서 앱 로그 미등록 HID 목록을 확인합니다.
  4. 대상 장치를 선택합니다. 목록에 없다면 로그를 확인해 VID와 PID를 직접 입력합니다.
  5. 현장에서 알아보기 쉬운 표시명을 작성합니다.
  6. 장치 분류와 리더 모드를 실제 연결 방식에 맞게 선택합니다.
  7. 즉시 사용할 장치라면 사용 스위치를 켜고 등록합니다.
  8. 테스트 바코드를 읽어 입력값과 장치 정보가 의도한 항목으로 기록되는지 확인합니다.

같은 VID와 PID를 사용하는 동일 모델이 여러 대라면 등록 정보만으로 개별 장비를 구별할 수 있는지 추가로 확인해야 합니다. USB 연결 위치나 장치 경로를 보조 기준으로 사용할 수 있지만, 드라이버 재설치나 포트 변경 시 경로가 달라질 가능성도 고려해야 합니다.

장비별 입력 모드도 확인해야 한다

모든 스캐너가 동일한 방식으로 동작하는 것은 아닙니다. 제품 설정에 따라 다음과 같은 모드가 사용될 수 있습니다.

  • HID Keyboard 방식
  • 제조사 전용 Vendor HID 방식
  • 가상 COM 포트 방식

RawInput 구조는 주로 HID 키보드 계열 장치를 구분할 때 유용합니다. Vendor HID는 제조사가 정의한 보고서 형식을 해석해야 할 수 있고, COM 포트 방식은 직렬 통신으로 별도 처리해야 합니다. 따라서 등록 전에 장치의 현재 인터페이스 모드와 매뉴얼을 확인하는 과정이 필요합니다.

안정성을 위해 고려할 사항

  • 연결과 해제 처리: 사용 중 장치가 분리되면 기존 핸들을 계속 사용하지 않고 장치 목록을 다시 확인해야 합니다.
  • 입력 버퍼 제한: 종료 키가 오지 않는 상황에 대비해 최대 길이와 입력 시간 제한을 두는 것이 좋습니다.
  • 중복 등록 방지: VID·PID, 장치 분류, 리더 모드 등 정책상 동일한 조합을 검사해야 합니다.
  • 입력 검증: 허용 문자, 길이, 체크 숫자와 업무 규칙을 적용해 비정상 입력을 걸러야 합니다.
  • 포커스 정책: 백그라운드 입력이 필요하다면 RawInput 등록 옵션과 처리 범위를 명확히 정해야 합니다. 모든 화면에서 무조건 입력을 받는 방식은 오작동을 만들 수 있습니다.
  • 장치별 테스트: Enter 접미어, 키보드 배열, Num Lock 상태와 특수문자 처리 방식이 장치 설정에 따라 달라질 수 있습니다.

보안상 주의할 점

등록된 VID와 PID만 허용하는 목록은 실수로 연결된 장치를 걸러내는 운영 통제 수단으로는 유용하지만, 강한 장치 인증으로 보기는 어렵습니다. VID와 PID는 공개적으로 확인할 수 있고 동일 모델 간에 공유되기 때문입니다.

  • 미등록 장치는 자동 승인하지 않고 관리자가 용도를 확인한 후 등록합니다.
  • HID 설정을 추가·수정·비활성화할 수 있는 권한을 제한합니다.
  • 설정 변경 이력에는 작업 시각, 대상과 변경 내용을 남깁니다.
  • 바코드에 개인정보나 업무상 민감한 값이 포함될 수 있으므로 원문 로그의 보관 범위와 기간을 최소화합니다.
  • 장치 경로나 스캔 문자열을 화면과 로그에 출력할 때 제어 문자와 예상하지 못한 값을 안전하게 처리합니다.
  • 높은 수준의 보안이 필요한 환경에서는 VID·PID 외에 장치 인증, 사용자 권한, 업무 단계 검증 같은 별도 통제를 함께 적용합니다.

무엇이 개선되었나

RawInput 기반 HID 등록 관리 구조를 적용하면 단순히 스캔 문자열을 받던 흐름에서 한 단계 더 나아갈 수 있습니다. 입력을 발생시킨 장치를 구분하고, 최근 로그에서 발견된 미등록 HID를 등록 후보로 확인하며, 장치의 용도와 처리 모드를 명시적으로 관리할 수 있습니다.

또한 장치를 삭제하지 않고 사용 여부만 전환할 수 있어 일시 중지와 재사용이 쉬워지고, 스캔값에 장치 정보를 함께 남겨 장애 분석과 운영 추적에도 활용할 수 있습니다. 다만 VID·PID만으로 개별 장치를 완전히 인증할 수는 없으므로, 이 기능은 입력 출처를 구분하고 허용 장치를 운영하는 기반으로 이해하는 것이 적절합니다.

현장 장비는 인터페이스 모드와 종료 문자, 드라이버 설정에 따라 동작이 달라질 수 있습니다. 등록 화면의 편의성뿐 아니라 실제 장치를 연결한 상태에서 입력 누락, 중복 처리, 재연결과 예외 상황까지 확인해야 안정적인 운영으로 이어질 수 있습니다.

관련 화면

Windows RawInput으로 HID 바코드 스캐너 등록·관리하기 - clipboard-97563C7A-8D11-4450-B7F2-80127AB6E294

#개발 #Windows RawInput #HID 장치 관리 #바코드 스캐너 #VID PID #장치 식별 #입력 보안

댓글 0

    댓글 남기기