인터넷/IT/프로그래밍

UpdateDriverForPlugAndPlayDevices 함수 실패 시 에러코드 2번을 리턴하는 경우

coffee94 2015. 6. 22. 14:37

UpdateDriverForPlugAndPlayDevices 함수가 실패 시 GetLastError 함수를 호출하면 에러 코드를 리턴하는데 2를 리턴하는 경우가 있습니다.


MSDN에서는 FullInfPath 경로가 잘못되어서 그렇다라고 되어 있는데 그런 경우도 있지만 추가적인 경우도 있어서 정리해둡니다.


특정 드라이버를 inf로 설치하고 제거 시 드라이버 패키지가 다 제거되지 않고 예를 들어 sys 파일만 삭제 된 경우 다시 해당 드라이버를 inf로 설치 시 드라이버 스토어의 sys 파일이 없기 때문에 에러 코드 2를 리턴하게 됩니다.


이런 경우를 대비해서 해당 함수를 실행하기 전 또는 가장 좋은 방법으로 드라이버 설치 작업을 진행하기 바로 전에 DriverPackageUninstall 함수를 이용해 과거의 드라이버 패키지가 남아있을 수 있으므로 삭제를 하고 드라이버 설치를 진행하면 됩니다.


기존 코드는 드라이버 언인스톨 시에만 DriverPackageUninstall 함수를 호출하였는데 안정빵으로 드라이버 설치전에도 DriverPackageUninstall 함수를 호출하도록 바꿨습니다. ( 물론 결정적인 원인은 드라이버 언인스톨 시 먼가가 잘 못 되었기 때문에 발생한 것인데 일단 해당 문제가 발생하면 사용자단에서 pnputil을 사용하지 않는 이상은 해결이 되지 않아서 안전빵으로 추가코드를 작성한 것입니다. )