디바이스 설치 Co-Installer 디버깅
일부 하드웨어 디바이스 설치 패키지에는 디바이스 설치를 지원하는 공동 설치 관리자라고 하는 DLL 파일이 포함됩니다.
다른 모듈과 동일한 방식으로 공동 설치 관리자를 디버그할 수 없습니다. 이는 공동 설치 관리자가 로드되는 고유한 방식과 개발자가 실행 중인 프로세스에 침입할 기회를 제공하지 않고도 많은 설치 시나리오가 자동으로 발생하기 때문입니다.
디바이스를 프로그래밍 방식으로 설치하여 이 문제를 resolve 수 있습니다. 디바이스를 설치하는 애플리케이션에 디버거를 연결하면 공동 설치 관리자 자체에 액세스할 수 있습니다. 이 작업을 수행하는 가장 간단한 방법은 WDK(Windows 드라이버 키트)에 포함된 DevCon 도구를 사용하여 디바이스를 설치하거나 다시 설치하는 것입니다. 그런 다음 WinDbg를 사용하여 공동 설치 관리자를 디버그할 수 있습니다.
다음 절차를 사용하여 이 작업을 수행합니다. 이 절차에서는 공동 설치 관리자를 사용하는 디바이스에 대한 작업 드라이버 설치 패키지를 개발했다고 가정합니다. 또한 WDK의 최신 복사본이 있다고 가정합니다. 드라이버, 드라이버 설치 패키지 및 드라이버 설치 공동 설치 관리자 개발에 대한 자세한 내용은 WDK 설명서를 참조하세요.
DevCon 및 WinDbg를 사용하여 공동 설치 관리자 디버깅
하드웨어 디바이스를 연결합니다.
새 하드웨어 발견 마법사를 취소합니다.
WinDbg를 시작합니다.
WinDbg의 파일 메뉴에서 실행 파일 열기를 선택합니다.
실행 파일 열기 대화 상자에서 다음을 수행합니다.
파일 선택 텍스트 상자에서 DevCon 도구(Devcon.exe)를 선택합니다. 이를 위해 WDK 설치 폴더로 이동한 다음, 하위 디렉터리 도구를 연 다음, 하위 디렉터리 devcon을 연 다음, 컴퓨터의 프로세서 아키텍처와 일치하는 하위 디렉터리를 연 다음, Devcon.exe 선택합니다. Devcon.exe 한 번만 클릭하고 아직 열기를 누르지 않습니다.
인수 텍스트 상자에 다음 텍스트를 입력합니다. 여기서 INFFile은 INF(디바이스 설치 정보) 파일의 파일 이름이며 HardwareID는 디바이스의 하드웨어 ID입니다.
update INFFile HardwareID
디렉터리 시작 텍스트 상자에 디바이스 설치 패키지의 경로를 입력합니다.
열기를 클릭합니다.
디버깅 프로세스가 시작되고 DevCon이 드라이버를 설치하기 전에 WinDbg가 DevCon 프로세스에 침입합니다.
디버거가 로드될 때 공동 설치 관리자 프로세스에 침입하도록 구성합니다. 다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.
디버거 명령 창에서 sxe(예외 설정) 명령 뒤에 ld: 및 파일 확장명을 제외한 공동 설치 관리자의 파일 이름을 사용합니다. 콜론 다음에 공백이 없어야 합니다. 예를 들어 공동 설치 관리자의 이름이 mycoinst.dll 경우 다음 명령을 사용합니다.
sxe ld:mycoinst
WinDbg의 디버그 메뉴에서 이벤트 필터를 선택합니다. 이벤트 필터 대화 상자에서 모듈 로드를 선택합니다. 실행에서 사용을 선택합니다.계속에서 처리되지 않음을 선택합니다.인수 단추를 클릭한 다음 텍스트 상자에 파일 확장명(예: mycoinst.dll "mycoinst"를 입력)을 제외하고 공동 설치 관리자의 파일 이름을 입력합니다. 확인을 클릭한 다음 닫기를 클릭합니다.
F5 키를 누르거나 디버거 명령 창에서 g(Go) 명령을 입력하여 실행을 다시 시작합니다.
공동 설치 관리자가 로드되면 실행이 디버거로 다시 중단됩니다. 이 시점에서 필요한 추가 중단점을 설정할 수 있습니다.
이 절차의 제한 사항
경우에 따라 DevCon에서 디바이스 설치 패키지를 실행하면 다른 보안 토큰 등으로 인해 PnP 설치와 약간 다른 동작이 발생할 수 있습니다. 공동 설치 관리자에서 특정 문제를 디버그하려는 경우 DevCon이 관련된 경우 이 문제가 복제되지 않을 수 있습니다. 따라서 이 기술을 사용하기 전에 DevCon을 사용하여 이 문제가 PnP 및 DevCon 시나리오 모두에 있는지 확인하기 위해 디버거 없이 드라이버를 설치해야 합니다.
DevCon이 설치를 시작할 때마다 문제가 사라지면 DevCon을 사용하지 않고 공동 설치 관리자를 디버그해야 합니다. 이 작업을 수행하는 한 가지 방법은 /m 옵션과 함께 TList 도구를 사용하여 공동 설치 관리자 모듈을 로드하는 프로세스를 확인한 다음 디버거를 해당 프로세스에 연결하는 것입니다.