디바이스 설치 및 드라이버 업데이트 동안 시스템 다시 시작 방지
디바이스를 설치하는 동안 시스템이 다시 시작되는 것을 방지하려면 다음 규칙을 사용합니다.
INF DDInstall 섹션에서 다시 부팅 또는 다시 시작 항목을 사용하지 마세요. 이러한 지시문은 원래 Windows 9x/Me와의 호환성을 위해 제공되었으며 Windows 2000 이상 버전의 Windows에 사용하면 안 됩니다.
절대적으로 필요한 경우가 아니면 INF CopyFiles 지시문에 COPYFLG_FORCE_FILE_IN_USE 또는 COPYFLG_REPLACE_BOOT_FILE 플래그를 사용하지 마세요.
드라이버 패키지의 모든 파일을 드라이버 저장소에서 실행합니다.
드라이버 패키지의 파일이 드라이버 저장소에서 실행되지 않는 경우 클래스 설치 관리자 또는 공동 설치 관리자의 각 새 버전 또는 서비스 DLL에 새 파일 이름을 할당합니다. 따라서 이전 버전이 사용 중인 경우 시스템을 다시 시작할 필요가 없습니다. (실제로 업데이트된 클래스 설치 관리자 또는 클래스 공동 설치 관리자에 새 파일 이름을 사용하지 않는 경우 이러한 새 파일은 설치에 사용되지 않습니다.)
디바이스의 드라이버를 업데이트하려면 드라이버 파일 업데이트에 나열된 규칙을 따릅니다.
파일 기반 드라이버를 업데이트할 때 다시 시작 최소화
Windows 10 전에 모든 커널 모드 드라이버는 시스템의 페이징 파일에서 백업되었습니다. 결과적으로 드라이버가 실행되는 동안에도 디스크에서 드라이버 이진 파일을 덮어쓸 수 있습니다.
성능을 향상시키기 위해 Windows 10 시작되지 않은 대부분의 드라이버는 대신 디스크의 드라이버 이진 파일에 의해 지원됩니다.
이제 파일 백업되는 드라이버 시작 형식은 다음과 같습니다.
SERVICE_SYSTEM_START(0x00000001)
SERVICE_AUTO_START(0x00000002)
SERVICE_DEMAND_START(0x00000003)
부팅 시작 드라이버는 페이징 파일에서 계속 지원됩니다.
파일 지원 드라이버를 업데이트하려면 다음 모범 사례를 사용합니다. 그렇지 않으면 업데이트에 두 번의 다시 시작이 필요할 수 있습니다. 하나는 파일을 바꾸고 다른 하나는 새 버전의 드라이버를 로드하는 것입니다.
INF 파일을 사용하는 경우 다음 단계를 수행합니다.
다음과 같이 COPYFLG_IN_USE_RENAME 사용하도록 드라이버 INF 파일의 CopyFiles 섹션을 수정합니다.
[MyDriver_Install.NT] CopyFiles=MyDriverCopy [MyDriverCopy] MyDriver.sys,,,0x00004000 ; COPYFLG_IN_USE_RENAME
이 플래그를 사용하는 경우 Windows는 디스크의 드라이버 파일을 바꾸려고 시도합니다. 자세한 내용은 INF CopyFiles 지시문을 참조하세요.
INF가 PnP 드라이버용인 경우 디바이스 설치 중에 Windows는 새 버전의 드라이버를 선택하기 위해 실행 중인 드라이버를 언로드하고 사용하는 디바이스를 다시 시작하려고 시도합니다. 실패하면 디바이스 설치는 시스템을 다시 부팅해야 했음을 나타냅니다.
INF가 PnP 드라이버용이 아니고 InstallHInfSection 과 같은 메서드를 사용하여 INF를 처리하는 경우 드라이버를 수동으로 중지하고 다시 시작합니다.
열려 있는 모든 핸들을 드라이버에 닫은 다음 다음 방법 중 하나를 사용하여 드라이버를 중지합니다.
sc.exe stop <mydriver>
ControlService(SERVICE_CONTROL_STOP)
자세한 내용은 ControlService 함수를 참조하세요.
INF 파일을 사용하지 않는 경우 다음 단계를 사용합니다.
위에서 설명한 대로 드라이버를 중지합니다. 이전 드라이버 이진 파일을 새 파일로 바꿉다.
드라이버를 중지할 수 없는 경우 기존 파일의 이름을 바꾸고, 새 파일을 제자리에 복사하고, 나중에 삭제할 기존 파일을 설정합니다(예: MOVEFILE_DELAY_UNTIL_REBOOT 플래그와 함께 MoveFileEx 사용). 새 버전의 드라이버를 사용하려면 시스템을 다시 시작해야 합니다.