안녕하세요. 이재홍입니다.

윈도우 드라이버 개발을 하다 보면 유저 모드에서 돌아가는 응용프로그램의 기능을 커널 모드 드라이버에서 지원해줘야 하는 경우가 있습니다.

하지만 유저 모드 응용프로그램의 기능을 커널 모드 드라이버로 옮긴 다는 것은 말처럼 쉬운 일이 아닙니다.

포팅에 있어서 가장 먼저 해야 할 일은 포팅이 가능한지 여부를 판단하는 것입니다. 대략적으로 포팅 가능 여부는 아래 기준으로 판단할 수 있습니다.

로직으로만 구성되어있는가?

암호화 알고리즘과 같이 로직으로만 구성된 것은 커널 모드로 포팅이 가능합니다. 즉 수학적, 논리적 계산으로 결과값을 도출해내는류의 프로그램은 WDK를 이용하여 빌드만 정상적으로 성공한다면 큰 어려움 없이 포팅할 수 있습니다.

또한 암호화 알고리즘 이외에도 DB 라이브러리(예 : SQLite)와 같이 로직으로만 구성된 프로그램도 포팅이 가능합니다. 이 경우에는 WDK를 이용한 빌드 뿐만 아니라. I/O 부분을 신경써줘야 합니다.

자료 구조를 위한 알고리즘(스택, 큐, B+ Tree, AVL Tree, Name-Value Pair 등)도 포팅이 가능합니다.

유저 모드 응용 API에 얼마나 의존하는가?

I/O를 위한 기본 API (CreateFile, ReadFile, WriteFile)이 외에 다양한 기능을 제공하는 응용 API를 얼마나 많이 사용하고 있느냐에 따라 포팅 가능 여부가 결정됩니다.

대부분의 윈도우 기본 API는 커널 모드 API와 1:1 매칭이 되어 포팅에 큰 어려움이 없습니다. 그래서 파일 I/O등 기본 API만 사용한다면 큰 어려움 없이 포팅이 가능합니다.

하지만 유저 모드에만 유효한 GDI 및 DirectX , 세션, 오디오, 사운드, COM 관련 API를 상당수 사용하고 있다면, 커널 모드 포팅에 어려움이 있습니다. 이러한 응용프로그램은 커널 모드로 포팅해도 별 의미가 없는 경우가 대부분입니다.

 

이 두가지 사항으로 커널 모드 포팅이 가능하다고 판단하여, 한참 포팅을 진행하다가 난관에 봉착하는 경우가 있습니다. 특정 API가 커널 모드에서 매치가 되지 않을 때입니다. 이 때는 해당 API의 기능을 할 수 있도록 다른 API를 사용하여 구현을 해야 합니다.

다음 글 부터는 실제로 포팅을 진행할 때 빌드 방법과 구현 방법을 알아보도록 하겠습니다.

관련글


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

11 July 2009