INF 파일에서 WDF 지시문 지정

WDF 드라이버를 설치하는 INF 파일에는 두 개의 WDF 관련 섹션이 포함되어야 합니다.

  • 각 [DDInstall] 섹션에 대한 [DDInstall.wdf] 섹션
  • [DDInstall.wdf]의 KmdfService 또는 UmdfService 지시문에 지정된 섹션 이름이 있는 [wdf-service-install] 섹션

이러한 섹션에는 WDF 관련 지시문이 포함되어 있습니다. UMDF 관련 지시문은 UMDF 접두사로 시작하고 KMDF 관련 지시문은 KMDF 접두사로 시작합니다.

다음 코드 예제에서는 UMDF 관련 지시문을 보여 줍니다.

[ECHO_Device.NT.Wdf]
UmdfService = Echo, Echo_service_wdfsect
UmdfServiceOrder = Echo

[Echo_service_wdfsect]
UmdfLibraryVersion = $UMDFVERSION$
ServiceBinary = %13%\echo.dll

다음 코드 예제에서는 KMDF 관련 지시문을 보여 줍니다.

[ECHO_Device.NT.Wdf]
KmdfService = Echo, Echo_service_wdfsect

[Echo_service_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$

[DDInstall.WDF 섹션에 대한 UMDF 지시문]

다음은 코드 예제입니다. DDInstall.WDF 섹션의 각 UMDF 관련 지시문은 아래에 설명되어 있습니다.

[ECHO_Device.NT.Wdf]
UmdfService = Echo, Echo_service_wdfsect
UmdfServiceOrder = Echo

UmdfService

`UmdfService = <serviceName>, <sectionName>

UMDF 드라이버를 설치하는 데 필요한 정보가 포함된 [wdf-service-install] 섹션에 UMDF 드라이버를 연결합니다. serviceName 매개 변수는 UMDF 드라이버를 지정하며 길이는 최대 31자로 제한됩니다. sectionName 매개 변수는 [wdf-service-install] 섹션을 참조합니다. 유효한 INF 파일에는 일반적으로 하나 이상의 UmdfService 지시문이 필요합니다. 그러나 UMDF 드라이버가 운영 체제의 일부인 경우 UMDF 드라이버에 대한 UmdfService 지시문은 필요하지 않습니다. 따라서 대부분의 INF 파일에는 각 UMDF 드라이버에 대해 하나의 UmdfService 지시문이 있지만 유효한 INF 파일에는 UmdfService 지시문이 없을 수 있습니다.

UmdfHostProcessSharing

이 지시문은 UMDF 버전 1.11 이상에서 지원됩니다.

UmdfHostProcessSharing = <ProcessSharingDisabled | ProcessSharingEnabled>

디바이스 스택이 공유 프로세스 풀(ProcessSharingEnabled) 또는 자체 개별 프로세스(ProcessSharingDisabled)에 배치되는지 여부를 결정합니다. 기본값은 ProcessSharingEnabled입니다. 이 지시문은 드라이버별이 아닌 디바이스에 따라 다릅니다.

디바이스 풀링에 대한 자세한 내용은 UMDF 드라이버에서 디바이스 풀링 사용을 참조하세요.

UmdfDirectHardwareAccess

이 지시문은 UMDF 버전 1.11 이상에서 지원됩니다.

UmdfDirectHardwareAccess = <AllowDirectHardwareAccess | RejectDirectHardwareAccess>

프레임워크에서 드라이버가 디바이스 레지스터 및 포트 액세스, 디바이스에 할당된 하드웨어 리소스 검사, 하드웨어 인터럽트 처리 또는 연결 리소스 획득과 같은 직접 하드웨어 액세스 기능을 사용하도록 허용할지 여부를 나타냅니다.

UmdfDirectHardwareAccessAllowDirectHardwareAccess로 설정된 경우 프레임워크를 사용하면 드라이버가 직접 하드웨어 액세스를 수행하는 UMDF 인터페이스를 사용할 수 있습니다.

UMDF 드라이버가 레지스터 또는 포트, 인터럽트, GPIO(범용 I/O) 핀 또는 I2C, SPI 및 직렬 포트와 같은 직렬 버스 연결과 같은 하드웨어 리소스에 액세스하는 경우 AllowDirectHardwareAccess를 지정해야 합니다. 드라이버는 EvtDevicePrepareHardware 콜백 함수의 ResourcesRawResourcesTranslated 매개 변수를 통해 이러한 모든 리소스를 받습니다.

참고

UMDF 버전 2.15부터 EvtDevicePrepareHardware 콜백 루틴에서 하드웨어 리소스 목록을 수신하기 위해 UMDF 드라이버는 AllowDirectHardwareAccess를 지정할 필요가 없습니다. 지정하지 않으면 드라이버에 이러한 리소스를 사용할 수 있는 액세스 권한이 없습니다. 단, 디바이스에 하나 이상의 연결 리소스(CmResourceTypeConnection)와 하나 이상의 인터럽트 리소스(CmResourceTypeInterrupt)가 할당된 경우 드라이버는 EvtDevicePrepareHardware 콜백 루틴(EvtDriverDeviceAdd에서 제외)에서 WdfInterruptCreate를 호출할 수 있습니다.

UMDF 드라이버를 특정 유형의 리소스에 연결하는 방법에 대한 자세한 내용은 다음을 참조하세요.

UmdfDirectHardwareAccessRejectDirectHardwareAccess로 설정된 경우 프레임워크는 드라이버가 직접 하드웨어 액세스 기능을 사용하도록 허용하지 않습니다. 기본값은 RejectDirectHardwareAccess입니다.

UMDF 드라이버가 하드웨어 리소스에 액세스하는 방법에 대한 자세한 내용은 하드웨어 리소스 찾기 및 매핑을 참조하세요.

UmdfHostPriority

이 지시문은 UMDF 버전 2.15 이상에서 지원됩니다.

UmdfHostPriority = <PriorityHigh>

UMDF HID 클라이언트 드라이버는 스레드 우선 순위를 높이기 위해 UmdfHostPriorityPriorityHigh 로 설정할 수 있습니다. 이 지시문은 사용자 응답 시간에 민감한 터치 또는 입력 드라이버에만 사용해야 합니다. 드라이버가 PriorityHigh를 지정하면 시스템은 우선 순위가 비슷한 다른 드라이버와 함께 별도의 디바이스 풀에 배치합니다. 추가 디바이스 풀은 더 많은 메모리를 사용하므로 이 설정을 주의해서 사용해야 합니다. 디바이스 풀링에 대한 자세한 내용은 UMDF 드라이버에서 디바이스 풀링 사용을 참조하세요.

UmdfRegisterAccessMode

이 지시문은 UMDF 버전 1.11 이상에서 지원됩니다.

UmdfRegisterAccessMode = <RegisterAccessUsingSystemCall | RegisterAccessUsingUserModeMapping>

프레임워크가 레지스터를 사용자 모드 주소 공간에 매핑해야 하는지(시스템 호출이 레지스터에 액세스하는 데 관여하지 않도록) 또는 시스템 호출을 사용하여 레지스터에 액세스해야 하는지 여부를 나타냅니다.

UmdfRegisterAccessModeRegisterAccessUsingSystemCall로 설정된 경우 프레임워크는 시스템 호출을 사용하여 레지스터에 액세스합니다.

UmdfRegisterAccessModeRegisterAccessUsingUserModeMapping으로 설정된 경우 프레임워크는 레지스터에 액세스하는 데 시스템 호출이 필요하지 않도록 레지스터를 사용자 모드 주소 공간에 매핑합니다. 기본값은 RegisterAccessUsingSystemCall입니다.

UmdfServiceOrder

UmdfServiceOrder = <serviceName1> [, <serviceName2> ...]

공동 설치 관리자가 디바이스 스택에 UMDF 드라이버를 설치하는 순서를 나열합니다. 공동 설치 관리자가 디바이스 스택에 UMDF 드라이버를 하나만 설치하더라도 INF 파일에는 이 지시문이 포함되어야 합니다. serviceNameXx 매개 변수는 각 UmdfService 지시문에 대한 serviceName 매개 변수에 해당합니다. UMDF 드라이버는 나열된 순서대로 디바이스 스택에 추가되므로 첫 번째 매개 변수는 디바이스 스택에서 가장 낮은 UMDF 드라이버를 지정합니다.

UMDF 공동 설치 관리자가 디바이스를 설치하도록 하려면 지정된 WDF 관련 DDInstall 섹션에 하나의 UmdfServiceOrder 지시문만 있어야 합니다. 즉, IncludeNeeds 지시문을 사용하여 UmdfServiceOrder 지시문을 가져올 수 없습니다.

UmdfImpersonationLevel

UmdfImpersonationLevel = <level>

UMDF 드라이버가 가질 수 있는 최대 가장 수준에 대해 프레임워크에 알릴 수 있습니다. UmdfImpersonationLevel 지시문은 선택 사항입니다. 가장 수준을 지정하지 않으면 기본값은 Identification입니다. 애플리케이션에서 파일 핸들을 열면 애플리케이션이 드라이버에 더 큰 가장 수준을 부여할 수 있습니다. 그러나 드라이버는 IWDFIoRequest::Impersonate 메서드를 호출하여 UmdfImpersonationLevel 이 지정하는 수준보다 큰 가장 수준을 요청할 수 없습니다. 이 지시문에 사용할 수 있는 값은 다음과 같습니다.

  • 익명

  • ID

  • 가장

  • 위임

이러한 값은 SECURITY_IMPERSONATION_LEVEL 열거형에 지정된 값에 해당합니다.

UmdfMethodNeitherAction

UmdfMethodNeitherAction = <거부 복사 | >

요청 개체에 METHOD_NEITHER 버퍼 액세스 방법을 지정하는 I/O 제어 코드가 포함된 경우 프레임워크가 디바이스의 I/O 요청을 수락(복사)하거나 거부(거부)할지 여부를 나타냅니다. UmdfMethodNeitherAction 지시문은 선택 사항입니다. 지시문을 지정하지 않으면 기본값은 Reject입니다.

UMDF 기반 드라이버에서 METHOD_NEITHER 버퍼 액세스 방법을 지원하는 방법에 대한 자세한 내용은 UMDF 드라이버에서 버퍼링된 I/O 또는 직접 I/O 사용을 참조하세요.

UmdfDispatcher

UmdfDispatcher = <FileHandle | WinUsb | NativeUSB>

I/O가 디바이스 스택의 사용자 모드 부분을 통과한 후 I/O를 보낼 위치를 프레임워크에 알릴 수 있습니다. 기본적으로 I/O는 리플렉터(WUDFRd.sys)로 전송됩니다. UmdfDispatcherWinUsb로 설정하면 드라이버는 UMDF에 I/O를 WinUsb 아키텍처로 보내도록 지시합니다. UMDF 2.15부터 NativeUSB 를 지정하면 리플렉터에서 USB I/O를 처리합니다.

  • 스택의 드라이버에서 파일 핸들 기반 대상을 사용하는 경우 이 지시문을 FileHandle로 설정합니다.
  • 드라이버가 UMDF 2.15 이상을 사용하고 USB I/O 대상을 사용하는 경우 이 지시문을 NativeUSB로 설정합니다.
  • 드라이버가 UMDF 2.15 이전이고 USB I/O 대상을 사용하는 경우 이 지시문을 WinUsb로 설정합니다.

UmdfDispatcher 지시문은 선택 사항입니다.

다음 코드 예제에서는 WDF 관련 DDInstall 섹션의 UmdfDispatcher 지시문을 보여 줌.

[Xxx_Install.Wdf]
UmdfDispatcher=NativeUSB

UmdfKernelModeClientPolicy

이 지시문은 UMDF 버전 1.9 이상에서 지원됩니다.

UmdfKernelModeClientPolicy = <AllowKernelModeClients | RejectKernelModeClients>

커널 모드 드라이버가 이전 UMDF 버전의 사용자 모드 드라이버 위에 로드되도록 허용하려면 이전 UMDF 버전의 커널 모드 클라이언트 지원을 참조하세요.

프레임워크가 드라이버가 커널 모드 드라이버에서 I/O 요청을 수신하도록 허용할지 여부를 나타냅니다.

UmdfKernelModeClientPolicyAllowKernelModeClients로 설정된 경우 프레임워크는 커널 모드 드라이버가 사용자 모드 드라이버 위에 로드되도록 허용하고 커널 모드 드라이버의 I/O 요청을 사용자 모드 드라이버로 전달합니다.

UmdfKernelModeClientPolicyRejectKernelModeClients로 설정된 경우 프레임워크는 커널 모드 드라이버가 사용자 모드 드라이버 위에 로드되는 것을 허용하지 않으며 커널 모드 드라이버의 I/O 요청을 사용자 모드 드라이버로 제공하지 않습니다. 드라이버의 INF 파일에 이 지시문이 없는 경우 기본값은 RejectKernelModeClients입니다. 자세한 내용은 커널 모드 클라이언트 지원을 참조하세요.

UmdfFileObjectPolicy

이 지시문은 UMDF 버전 1.11 이상에서 지원됩니다.

UmdfFileObjectPolicy = <RejectNullAndUnknownFileObjects | AllowNullAndUnknownFileObjects>

프레임워크가 파일 개체(IWDFFile)와 연결되지 않았거나 알 수 없는 파일 개체(드라이버가 이전에 만들기 요청을 보지 못한 파일 개체)와 연결된 I/O 요청(IWDFIoRequest)의 처리를 허용할지 여부를 나타냅니다.

UmdfFileObjectPolicyRejectNullAndUnknownFileObjects로 설정된 경우 프레임워크는 NULL 또는 알 수 없는 파일 개체와 연결된 요청 처리를 허용하지 않습니다.

UmdfFileObjectPolicyAllowNullAndUnknownFileObjects로 설정된 경우 프레임워크는 NULL 또는 알 수 없는 파일 개체와 연결된 요청을 처리할 수 있습니다.

기본값은 RejectNullAndUnknownFileObjects입니다.

UmdfFsContextUsePolicy

이 지시문은 UMDF 버전 1.11 이상에서 지원됩니다.

UmdfFsContextUsePolicy = <CanUseFsContext | CanUseFsContext2 | CannotUseFsContexts>

프레임워크가 WDM 파일 개체의 특정 컨텍스트 멤버에 내부 정보를 저장할 수 있는지 여부를 나타냅니다. 동일한 스택의 커널 모드 드라이버가 파일 개체의 특정 멤버를 사용하는 경우 이 지시문을 사용하여 프레임워크가 동일한 위치를 사용하지 않도록 요청할 수 있습니다.

UmdfFsContextUsePolicyCanUseFsContext로 설정된 경우 프레임워크는 WDM 파일 개체의 FsContext 멤버에 정보를 저장합니다.

UmdfFsContextUsePolicyCanUseFsContext2로 설정된 경우 프레임워크는 WDM 파일 개체의 FsContext2 멤버에 정보를 저장합니다.

UmdfFsContextUsePolicyCannotUseFsContexts로 설정된 경우 프레임워크는 FsContext 또는 FsContext2를 사용하지 않습니다.

기본값은 CanUseFsContext입니다.

[wdf-service-install 섹션에 대한 UMDF 지시문]

다음은 코드 예제입니다. [wdf-service-install] 섹션의 각 UMDF 관련 지시문은 아래에 설명되어 있습니다. 섹션 이름은 [DDInstall.wdf] 섹션의 UmdfService 지시문에 지정됩니다.

[Echo_service_wdfsect]
UmdfLibraryVersion = $UMDFVERSION$
ServiceBinary = %13%\echo.dll

UmdfLibraryVersion

UmdfLibraryVersion = <version>

UMDF 드라이버에서 사용할 프레임워크의 버전 번호에 대해 공동 설치 관리자에게 알릴 수 있습니다. 버전 문자열의 형식이 중요>합니다<.<minor>.<서비스.> 디바이스 스택의 드라이버가 둘 이상의 프레임워크 버전을 사용하는 경우 INF 파일은 각 프레임워크 버전에 대해 하나씩 여러 공동 설치 관리자를 하드 디스크 드라이브의 동일한 위치에 복사합니다. 그러나 INF 파일은 가장 높은 버전의 공동 설치 관리자만 CoInstallers32 레지스트리 값에 추가합니다. 공동 설치 관리자를 복사하는 방법에 대한 자세한 내용은 UMDF 공동 설치 관리자 사용을 참조하세요.

공동 설치 관리자는 버전 문자열을 확인하고 이를 사용하여 UMDF 드라이버에 대한 버전별 공동 설치 관리자를 찾습니다. 그런 다음, 공동 설치 관리자는 버전별 공동 설치 관리자에서 프레임워크를 추출합니다.

ServiceBinary

ServiceBinary = <binarypath>

UMDF 드라이버 이진 파일을 하드 디스크 드라이브에 배치할 위치를 UMDF에 알릴 수 있습니다.

UMDF 드라이버는 디렉터리에 복사되고 디렉터리에서 Windows\System32\Drivers\UMDF 실행되어야 합니다.

DriverCLSID

참고 이 지시문은 사용되지 않는 UMDF 1.x에서만 지원됩니다. 자세한 내용은 UMDF 1.x 디자인 가이드를 참조하세요.

DriverCLSID = <{CLSID}>

UMDF 드라이버의 CLSID(클래스 식별자)에 대해 UMDF에 알릴 수 있습니다. UMDF가 UMDF 드라이버를 로드할 때 UMDF 호스트는 UMDF 드라이버의 CLSID를 사용하여 UMDF 드라이버의 IDriverEntry 인터페이스 instance 만듭니다.

UmdfExtensions

UmdfExtensions = <cxServiceName>

Microsoft에서 제공하는 클래스 확장 드라이버와 통신하는 드라이버에 필요합니다. cxServiceName 매개 변수는 클래스 확장 드라이버 이진 파일과 연결된 서비스에 해당합니다.

클래스 확장 드라이버의 서비스 이름은 다음 레지스트리 키 아래에 하위 키로 배치될 수 있습니다.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services

[DDInstall.WDF 섹션에 대한 KMDF 지시문]

다음은 코드 예제입니다. DDInstall.WDF 섹션의 각 KMDF 관련 지시문은 아래에 설명되어 있습니다.

[ECHO_Device.NT.Wdf]
KmdfService = Echo, Echo_service_wdfsect

KmdfService

KmdfService = <serviceName>, <sectionName>

KMDF 드라이버를 설치하는 데 필요한 정보가 포함된 [wdf-service-install] 섹션에 KMDF 드라이버를 연결합니다. serviceName 매개 변수는 KMDF 드라이버를 지정하며 길이는 최대 31자로 제한됩니다. sectionName 매개 변수는 [wdf-service-install] 섹션을 참조합니다. 유효한 INF 파일에는 일반적으로 하나 이상의 KmdfService 지시문이 필요합니다. 그러나 KMDF 드라이버가 운영 체제의 일부인 경우 KMDF 드라이버에 대한 KmdfService 지시문은 필요하지 않습니다. 따라서 대부분의 INF 파일에는 각 KMDF 드라이버에 대해 하나의 KmdfService 지시문이 있지만 유효한 INF 파일에 는 KmdfService 지시문이 없을 수 있습니다.

[wdf-service-install 섹션에 대한 KMDF 지시문]

다음은 코드 예제입니다. [wdf-service-install] 섹션의 각 KMDF 관련 지시문은 아래에 설명되어 있습니다. 섹션 이름은 DDInstall.wdf 섹션의 KmdfService 지시문에서 가져옵니다.

[Echo_service_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$

KmdfLibraryVersion

KmdfLibraryVersion = <version>

버전 문자열의 형식은 입니다 major.minor. 일반적으로 를 지정 $KMDFVERSION$ 해야 하며 WDK 빌드 프로세스는 이를 올바른 버전 번호로 대체합니다.