PNP 드라이버 파일 교체 시 재부팅 후 원본 파일로 복구되는 현상
윈도우 8.1 64비트, 윈도우 10 인사이더 프리뷰 64비트 이상의 운영체제에서 발생하는 현상입니다. ( 윈도우 7 SP1 32비트 및 64비트 이하는 해당 현상이 발생하지 않음 )
inf를 통해서 SetupDiCallClassInstaller 설치 된 드라이버가 %systemroot%\system32\drivers 에 설치가 되는데 이 파일을 새로운 드라이버 파일 ( sys ) 로 교체하고 재부팅을 하게 되면 새로운 드라이버가 메모리에 올라올 것이라고 생각했으나 실제로는 이전의 드라이버 파일로 자동 복구 되는 현상을 발견하였습니다.
이렇게 되는 이유는 PNP 드라이버 설치 시 윈도우 비스타 이상부터 드라이버 패키지를 설치 시 드라이버 스토어라는 저장 공간 ( %systemroot%\System32\DriverStore\FileRepository ) 에 드라이버 패키지 파일들이 저장되게 되는데 해당 경로에 파일을 읽어와서 원본 파일로 복구하게 됩니다.
아무래도 새로운 드라이버 보호 시스템이 윈도우 8.1에서 추가 된 것으로 보입니다.
만약 PNP 드라이버 파일만 교체하는 방식으로 드라이버를 업데이트하는 방식을 사용하려면 추가적인 코드가 필요할꺼 같네요. 참고로 DriverPackageUninstall 함수를 사용하면 드라이버 스토어에서 드라이버 패키지만 삭제되는게 아니라 드라이버가 언인스톨되므로 이런식으로 하면 안됩니다.
드라이버 스토어에 대한 자세한 참고 링크
https://msdn.microsoft.com/en-us/library/windows/hardware/ff544868(v=vs.85).aspx
http://www.verboon.info/2010/12/inside-the-windows-7-driver-store/
DIFx ( 드라이버 인스톨 프레임 워크 ) 를 통한 드라이버 패키지를 드라이버 스토어에 설치하는 함수에 대한 참고 링크
https://msdn.microsoft.com/en-us/library/windows/hardware/ff543637(v=vs.85).aspx