외국 포럼 뒤적거리다가... 흥미로운 프로젝트를 하나 발견했습니다.
NTOSKRNL Emu_Extender라는 프로젝트인데...
이걸로 윈도우 7/8/8.1/10용으로 제작된 상당수의 드라이버를 XP/2003/Vista/7에서 사용할 수 있다고 합니다.
아니 세상에 자기가 XP라는 운영체제인데 최신 하드웨어에서 설치가 된대 - 기글하드웨어
모 횐님이 예전에 올린 Windows XP Integral Edition에 동봉된 드라이버들(AHCI, NVMe, xHCI, UASP, eMMC 등등)도 대부분 이 방식으로 백포팅 되었더라고요?
대충 사용법을 보니까
- 윈도우 7 드라이버 개발 킷 설치
- git 다운로드 후, 개발킷에 있는 각 OS 및 CPU별 Environment에서 빌드 (ex. Vista x64) -> ntoskrn8.sys 생성
- 백포팅하려는 드라이버 파일 수정 - 커널 함수 요청을 ntoskrnl.exe 대신 ntoskrn8.sys로 하도록 바꾸고, .inf 파일에 ntoskrn8.sys 추가.
- 끝.
이게 도대체 무슨 원리로 적용되는건지 나름대로 생각해봤는데, 이쪽 분야를 제대로 배워본 적이 없어서 맞는지 모르겠습니다.
- 운영체제의 커널이나 드라이버도 결국에는 C 코드의 집합체이고, 일반적인 프로그램과의 차이점은 CPU, 메모리 등 하드웨어와 윈도우 커널에 직접적으로 접근할 수 있도록 Ring-0에서 구동된다는 점이다.
- 상위 버전 OS용으로 작성된 드라이버는, 하위 버전 OS에는 존재하지 않는 커널 함수들을 사용하도록 개발되어서 보통은 작동하지 않는다.
- 드라이버나 커널이나 Ring-0에서 구동되는 건 똑같으니까, 상위 버전 커널에만 있는 함수들의 코드를 따로 모아서 별개의 프로세스로 돌려준다면 작동하지 않을까?
- ntoskrn8.sys는 상위 버전 커널 함수를 처리하고, 기존 운영체제에 이미 존재하는 커널 함수는 그대로 ntoskrnl.exe에 넘겨준다. -> 최-신 OS용 드라이버를 구형 OS에서 돌린다!
제가 제대로 이해한 게 맞을까...요? 아무리 생각해도 국내 커뮤니티 중에서는 여기 말고 물어볼 곳이 없네요.