다음을 통해 공유


디바이스 설치 및 드라이버 업데이트 동안 시스템 다시 시작 방지

디바이스를 설치하는 동안 시스템이 다시 시작되는 것을 방지하려면 다음 규칙을 사용합니다.

  • 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 파일을 사용하는 경우 다음 단계를 수행합니다.

  1. 다음과 같이 COPYFLG_IN_USE_RENAME 사용하도록 드라이버 INF 파일의 CopyFiles 섹션을 수정합니다.

    [MyDriver_Install.NT]
    CopyFiles=MyDriverCopy
    
    [MyDriverCopy]
    MyDriver.sys,,,0x00004000  ; COPYFLG_IN_USE_RENAME
    

    이 플래그를 사용하는 경우 Windows는 디스크의 드라이버 파일을 바꾸려고 시도합니다. 자세한 내용은 INF CopyFiles 지시문을 참조하세요.

  2. INF가 PnP 드라이버용인 경우 디바이스 설치 중에 Windows는 새 버전의 드라이버를 선택하기 위해 실행 중인 드라이버를 언로드하고 사용하는 디바이스를 다시 시작하려고 시도합니다. 실패하면 디바이스 설치는 시스템을 다시 부팅해야 했음을 나타냅니다.

  3. INF가 PnP 드라이버용이 아니고 InstallHInfSection 과 같은 메서드를 사용하여 INF를 처리하는 경우 드라이버를 수동으로 중지하고 다시 시작합니다.

    • 열려 있는 모든 핸들을 드라이버에 닫은 다음 다음 방법 중 하나를 사용하여 드라이버를 중지합니다.

      • sc.exe stop <mydriver>

      • ControlService(SERVICE_CONTROL_STOP)

      자세한 내용은 ControlService 함수를 참조하세요.

INF 파일을 사용하지 않는 경우 다음 단계를 사용합니다.

  1. 위에서 설명한 대로 드라이버를 중지합니다. 이전 드라이버 이진 파일을 새 파일로 바꿉다.

  2. 드라이버를 중지할 수 없는 경우 기존 파일의 이름을 바꾸고, 새 파일을 제자리에 복사하고, 나중에 삭제할 기존 파일을 설정합니다(예: MOVEFILE_DELAY_UNTIL_REBOOT 플래그와 함께 MoveFileEx 사용). 새 버전의 드라이버를 사용하려면 시스템을 다시 시작해야 합니다.

파일 백업 및 페이지 파일 백업 섹션

드라이버가 로드되는 시기를 결정하는 사항