디바이스를 설치하는 동안 시스템이 다시 시작되는 것을 방지하려면 다음 규칙을 사용합니다.
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 사용). 새 버전의 드라이버 사용을 시작하려면 시스템을 다시 시작해야 합니다.