USB 직렬 드라이버(Usbser.sys)
중요
이 항목은 프로그래머를 위한 것입니다. USB 문제가 발생하는 고객인 경우 일반적인 USB 문제 해결을 참조하세요.
지원되는 버전
- Windows 11
- Windows 10
- Windows 8.1
적용 대상
- CDC 제어 디바이스의 디바이스 제조업체
통신 및 CDC 제어 디바이스에 대해 Microsoft에서 제공하는 기본 제공 드라이버(Usbser.sys)입니다.
Windows 10 커널 모드 드라이버 프레임워크를 사용하여 드라이버를 다시 작성하여 드라이버의 전반적인 안정성을 향상했습니다.
- 드라이버의 향상된 플러그 앤 플레이 및 전원 관리.
- USB 선택적 일시 중단과 같은 전원 관리 기능이 추가되었습니다.
또한 UWP 애플리케이션은 이제 Windows 제공하는 API를 사용할 수 있습니다. 앱이 이러한 디바이스와 통신할 수 있도록 하는 Devices.SerialCommunication 네임스페이스입니다.
Usbser.sys 설치
통신 및 CDC 제어 디바이스에 대해 Microsoft에서 제공하는 기본 제공 드라이버(Usbser.sys)를 로드합니다.
참고
Windows 포함된 USB 디바이스 클래스 드라이버를 설치하려는 경우 드라이버를 다운로드할 필요가 없습니다. 자동으로 설치됩니다. 자동으로 설치되지 않은 경우 디바이스 제조업체에 문의하세요. Windows 포함된 USB 디바이스 클래스 드라이버 목록은 Windows 포함된 USB 디바이스 클래스 드라이버를 참조하세요.
Windows 10 이상
Windows 10 시작해서 Usbser.inf가 %Systemroot%\INF 디렉터리에 추가되었습니다. 이 디렉터리에서는 Usbser.sys 디바이스 스택의 FDO(기능 디바이스 개체)로 로드합니다. 디바이스가 통신 및 CDC 제어 디바이스 클래스에 속하는 경우 Usbser.sys 자동으로 로드됩니다. 드라이버를 참조하기 위해 고유한 INF를 작성할 필요가 없습니다. 드라이버는 Windows 포함된 다른 USB 디바이스 클래스 드라이버와 유사한 호환 ID 일치를 기반으로 로드됩니다.
USB\Class_02
USB\Class_02&SubClass_02
- Usbser.sys 자동으로 로드하려면 클래스 코드를 02로 설정하고 디바이스 설명자에서 하위 클래스 코드를 02로 설정합니다. 자세한 내용은 USB 통신 디바이스 클래스를 참조하세요. 이 방법을 사용하면 시스템에서 Usbser.inf를 사용하기 때문에 디바이스에 대한 INF 파일을 배포할 필요가 없습니다.
- 디바이스에서 클래스 코드 02를 지정하지만 02 이외의 하위 클래스 코드 값을 지정하는 경우 Usbser.sys 자동으로 로드되지 않습니다. 플러그 앤 플레이 관리자는 드라이버를 찾으려고 합니다. 적합한 드라이버를 찾을 수 없는 경우 디바이스에 드라이버가 로드되지 않았을 수 있습니다. 이 경우 사용자 고유의 드라이버를 로드하거나 다른 기본 제공 드라이버를 참조하는 INF를 작성해야 할 수 있습니다.
- 디바이스에서 클래스 및 서브클래스 코드를 02로 지정하고 Usbser.sys대신 다른 드라이버를 로드하려는 경우 설치할 디바이스 및 드라이버의 하드웨어 ID를 지정하는 INF를 작성해야 합니다. 예를 들어 샘플 드라이버 에 포함된 INF 파일을 살펴보고 디바이스와 유사한 디바이스를 찾습니다. INF 섹션에 대한 자세한 내용은 INF 파일 개요를 참조하세요.
참고
가능한 경우 언제든지 기본 제공 드라이버를 사용하는 것이 좋습니다. Windows 10 Mobile 같은 Windows 모바일 버전에서는 운영 체제의 일부인 드라이버만 로드됩니다. 데스크톱 버전과 달리 외부 드라이버 패키지를 통해 드라이버를 로드할 수 없습니다. 새 INF를 사용하면 모바일 디바이스에서 USB-직렬 디바이스가 감지되면 Usbser.sys 자동으로 로드됩니다.
Windows 8.1 및 이전 버전
Windows 8.1 이전 버전의 운영 체제에서는 USB-직렬 디바이스가 컴퓨터에 연결되어 있을 때 Usbser.sys 자동으로 로드되지 않습니다. 드라이버를 로드하려면 Include 지시문을 사용하여 모뎀 INF(mdmcpq.inf)를 참조하는 INF를 작성해야 합니다. 이 지시문은 서비스를 인스턴스화하고, 받은 편지함 이진 파일을 복사하고, 애플리케이션이 디바이스를 찾아 통신하는 데 필요한 디바이스 인터페이스 GUID를 등록하는 데 필요합니다. 해당 INF는 디바이스 스택에서 "Usbser"를 낮은 필터 드라이버로 지정합니다.
또한 INF는 mdmcpq.inf를 사용하려면 디바이스 설정 클래스를 모뎀으로 지정해야 합니다. INF의 버전 섹션에서 모뎀 및 디바이스 클래스 GUID를 지정합니다. 자세한 내용은 시스템 제공 디바이스 설정 클래스를 참조하세요.
[DDInstall.NT]
include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
[DDInstall.NT.Services]
include=mdmcpq.inf
AddService=usbser, 0x00000000, LowerFilter_Service_Inst
[DDInstall.NT.HW]
include=mdmcpq.inf
AddReg=LowerFilterAddReg
자세한 내용은 USB(유니버설 직렬 버스) 모뎀 .inf 파일에서 Usbser.sys 드라이버를 사용하거나 참조하는 방법을 참조하세요.
Usbser.sys 대한 선택적 일시 중단 구성
Windows 10Usbser.sysUSB 선택적 일시 중단을 지원합니다. 시스템이 S0 상태로 유지되는 동안 연결된 USB-직렬 디바이스가 사용하지 않을 때 저전력 상태로 진입할 수 있습니다. 디바이스와의 통신이 다시 시작되면 디바이스는 일시 중단 상태를 그대로 두고 작업 상태를 다시 시작할 수 있습니다. 이 기능은 기본적으로 사용하지 않도록 설정되며 이 레지스트리 키 아래에 IdleUsbSelectiveSuspendPolicy 항목을 설정하여 사용하도록 설정하고 구성할 수 있습니다.
HKEY\_LOCAL\_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB\\<hardware id>\\<instance id>\\Device Parameters
Usbser.sys전원 관리 기능을 구성하려면 IdleUsbSelectiveSuspendPolicy를 다음으로 설정할 수 있습니다.
"0x00000001": 유휴 상태일 때 선택적 일시 중단을 입력합니다. 즉, 디바이스 간에 활성 데이터 전송이 없는 경우입니다.
"0x00000000": 디바이스에 열린 핸들이 없는 경우에만 선택적 일시 중단을 입력합니다.
해당 항목은 다음 두 가지 방법 중 하나로 추가할 수 있습니다.
설치 INF를 참조하는 INF를 작성하고 HW에 레지스트리 항목을 추가합니다 . AddReg 섹션.
확장 속성 OS 기능 설명자의 레지스트리 항목을 설명합니다. bPropertyName 필드를 유니코드 문자열인 "IdleUsbSelectiveSuspendPolicy"로 설정하고 wPropertyNameLength를 62바이트로 설정하는 사용자 지정 속성 섹션을 추가합니다. bPropertyData 필드를 "0x00000001" 또는 "0x00000000"로 설정합니다. 속성 값은 little-endian 32비트 정수로 저장됩니다.
자세한 내용은 Microsoft OS 설명자를 참조하세요.
USB CDC 디바이스용 Windows 애플리케이션 개발
USB CDC 디바이스에 대한Usbser.sys 설치하는 경우 애플리케이션 프로그래밍 모델 옵션은 다음과 같습니다.
Windows 10 Windows 앱은 Windows 사용하여 Usbser.sys 요청을 보낼 수 있습니다. Devices.SerialCommunication 네임스페이스입니다. 직렬 포트 또는 직렬 포트의 일부 추상화 또는 USB CDC 디바이스와 통신하는 데 사용할 수 있는 Windows 런타임 클래스를 정의합니다. 클래스는 이러한 직렬 디바이스를 검색하고, 데이터를 읽고 쓰고, 흐름 제어에 대한 직렬별 속성(예: 전송 속도 설정, 신호 상태)을 제어하는 기능을 제공합니다.
Windows 8.1 이전 버전에서는 가상 COM 포트를 열고 디바이스와 통신하는 Windows 데스크톱 애플리케이션을 작성할 수 있습니다. 자세한 내용은 다음을 참조하십시오.
Win32 프로그래밍 모델:
-
.NET Framework 프로그래밍 모델: