최근에 드라이버 코드를 개발하면서 새로 들어온 개발자와 다소 의견 차이가 있었다. 내가 드라이버 파일이 삭제된 경우에는 어떻게 할거냐고 물었는데 그 친구는 계속 로드된 드라이버 파일이 삭제되지는 않는다는 이야기를 했다. 아니? 뭐지? 일반적으로 커널 모드 드라이버 파일은 로딩을 완료한 후에는 자유롭게 삭제가 된다. 특수한 처리 방식이 있는 게 아니고 아래와 같은 코드로 간단하게 구현할 수 있다.
LoadDriver(path);
DeleteFile(path);
그래서 혹시 그 친구가 테스트를 안해본게 아닌가 해서 이만저만하게 해서 테스트를 해보라고 했더니 테스트 했는데 삭제가 안된다고 한다. 아니? 그럴수가? 그래서 나도 테스트 해봤는데 삭제가 되지 않았다. 이 무슨 시츄레이션이지…
해서 Windows 7에서 테스트를 해봤다. 역시나 삭제가 잘됐다. 그래서 혹시나 해서 Windows 10 TH1에서 테스트를 해봤다. 역시나 삭제가 잘 됐다. TH1 이후 어딘가부터 윈도우 구조가 바뀌면서 드라이버 파일이 삭제가 되지 않도록 변경된 것으로 보였다.
그 친구는 개발을 배울 당시가 해당 윈도우 버전이라 파일이 삭제된다는 걸 본적이 한번도 없었고, 나는 Windows XP부터 개발을 했던 사람이라 삭제가 안된다는 걸 최근에 테스트한 적이 없었던 것이다. 그래서 혹시나 해서 드라이버 개발을 전문적으로 하는 사람한테 물어봤더니 역시나 몰랐다. 고인물들이란 ㅎㅎ^^
그럼에도 이 모든 걸 뚫고 최신 버전 윈도우에도 파일이 없는 드라이버가 상주한 것들이 몇 개 있었다. 당췌 얘들은 뭐지 해서 검색해봤더니 레이몬드 첸 아저씨가 2016년에 이미 다 알려준 내용들.
https://devblogs.microsoft.com/oldnewthing/20160913-00/?p=94305
고인물들의 지식은 업데이트된지 너무 오래 되었고, 새로 배우는 친구들은 역사를 알기가 어렵다. 그와중에 MS 개발자들은 너무 열일하신다는거…
덧) windows 10 th1 부터 변경된 것으로 보여집니다. feat KINUX