UMDF 아키텍처
이 항목에서는 드라이버 관리자가 사용자 모드 디바이스 스택을 빌드하는 방법과 호스트 프로세스, 리플렉터 및 드라이버 관리자가 애플리케이션이 User-Mode Driver Framework(UMDF) 드라이버에 보내는 I/O 요청을 처리하는 방법을 설명합니다.
커널 모드 스택과 마찬가지로 사용자 모드 스택의 생성 및 해체는 플러그 앤 플레이(PnP) 이벤트에 의해 구동됩니다. 커널 모드 스택이 빌드된 후 리플렉터에서 드라이버 관리자에게 사용자 모드 스택 생성을 시작하도록 알릴 수 있습니다. 드라이버 관리자는 드라이버 호스트 프로세스를 시작하고 시작된 프로세스에 충분한 정보를 제공하여 사용자 모드 스택을 빌드합니다. 이러한 방식으로 사용자 모드 스택은 커널 모드 스택의 확장으로 간주될 수 있습니다.
드라이버 호스트 프로세스는 사용자 모드 드라이버에 대한 실행 환경을 제공하고 사용자 모드 스택의 드라이버 간에 메시지를 라우팅합니다. 리플렉터에서는 메시지 기반 프로세스 간 통신 메커니즘을 사용하여 드라이버 관리자 및 호스트 프로세스와 통신합니다.
UMDF 드라이버에 I/O 요청을 보내기 위해 애플리케이션은 CreateFile, ReadFileEx, CancelIoEx 또는 DeviceIoControl과 같은 Win32 파일 I/O 함수를 호출합니다. 리플렉터 클라이언트 애플리케이션에서 요청을 수신 하는 경우 적절 한 드라이버 호스트 프로세스에 요청을 보냅니다. 그런 다음 드라이버 호스트 프로세스는 요청을 올바른 사용자 모드 디바이스 스택의 맨 위로 라우팅합니다.
요청은 사용자 모드 스택의 드라이버 중 하나에 의해 완료되거나 드라이버 중 하나가 리플렉터로 다시 전달됩니다. 리플렉터에서 사용자 모드 드라이버 스택에서 요청을 받으면 완료를 위해 커널 모드 스택 아래로 요청을 보냅니다.