다음을 통해 공유


UMDF 드라이버에 대한 세션 제로 지침

Windows Vista부터 운영 체제는 세션 0에서 서비스 및 시스템 프로세스를 격리하고 애플리케이션은 더 높은 번호가 매겨진 후속 세션에서 실행됩니다. UMDF 호스트 프로세스(WUDFHost.exe)는 세션 0에서 실행되는 시스템 프로세스 중 하나이므로 UMDF 드라이버는 애플리케이션에서 격리됩니다. 따라서 드라이버를 개발할 때 다음 지침을 사용해야 합니다.

  • 대화 상자와 같은 UI(사용자 인터페이스) 요소를 만들거나 사용자 입력에 의존하지 마세요. 사용자가 세션 0에서 실행되고 있지 않으므로 UI를 볼 수 없으며 이에 응답할 수 없습니다.

    마찬가지로 UI 요소를 조작하지 마세요. 예를 들어 UMDF 드라이버는 사용자의 세션에서 창을 열거할 수 없습니다.

  • 드라이버가 서비스와 통신해야 하는 경우 RPC(원격 프로시저 호출) 또는 명명된 파이프와 같은 클라이언트/서버 메커니즘을 사용합니다.

  • Windows API에서 함수를 호출할 때는 주의해야 합니다. 일부 함수는 UI 요소를 조작하거나 사용자 세션에서 명명된 개체에 액세스하려고 시도할 수 있습니다. 사용자 모드 서비스에서 호출하지 않을 Windows 함수를 호출하지 마세요. 일반적으로 UMDF 드라이버는 kernel32.dll 내보낸 함수를 안전하게 호출할 수 있지만 user32.dll 내보낸 함수는 호출할 수 없습니다.

    UMDF 드라이버는 Windows 함수를 호출하여 다음 작업을 수행할 수 있습니다.

    • 드라이버는 SetupDiXxx 함수를 호출하여 플러그 앤 플레이 디바이스 속성을 검색할 수 있습니다. 예를 들어 OSR USB Fx2 학습 키트용 UMDF 샘플 드라이버는SetupDiGetDeviceRegistryProperty 를 호출하여 디바이스의 버스 유형에 대한 GUID를 검색합니다. 참고 UMDF 드라이버는 많은 SetupDiXxx 함수를 안전하게 호출할 수 없지만 디바이스 노드 속성을 검색하는 함수를 호출하는 것이 안전합니다.

    • 수동 큐에서 I/O 요청을 검색하는 드라이버는 주기적인 타이머를 만들어 큐를 폴링할 수 있습니다. 예를 들어 WudfVhidmini 샘플은 CreateThreadpoolTimer를 호출하여 타이머 콜백 루틴을 등록한 다음 SetThreadpoolTimer를 호출하여 주기적인 타이머를 설정합니다. 참고 버전 1.11부터 UMDF는 작업 항목에 대한 지원을 제공합니다. 자세한 내용은 작업 항목 사용을 참조하세요.

프레임워크 외부에서 시스템 서비스를 사용하는 방법에 대한 자세한 내용은 Orwick, Penny 및 Guy Smith의 14장("프레임워크 너머")을 참조하세요. Windows 드라이버 파운데이션을 사용하여 드라이버 개발 레드먼드, 워싱턴: Microsoft Press, 2007.

세션 제로 격리에 대한 자세한 내용은 Windows의 서비스 및 드라이버에 대한 세션 0 격리의 영향을 참조하세요.