다음을 통해 공유


운영 체제가 안전 모드에서 실행 중인지 확인

이 항목에서는 디바이스 드라이버가 실행 중인 운영 체제가 안전 모드에서 시작되었는지 여부를 확인하는 방법에 대해 설명합니다. 이 항목에서는 드라이버가 안전 모드에서 작동하지 못하도록 하는 방법도 설명합니다.

Microsoft Windows 운영 체제 커널은 InitSafeBootMode라는 포인터를 내보냅니다. InitSafeBootMode 는 현재 적용 중인 안전 모드 설정을 포함하는 ULONG 변수를 가리킵니다. 디바이스 드라이버는 이러한 설정을 검사하여 운영 체제가 안전 모드에서 실행 중인지 여부를 확인할 수 있습니다.

다음 표에서는 InitSafeBootMode 변수의 값에 대한 모드를 나열합니다.

가치 모드

0

운영 체제가 안전 모드가 아닙니다.

1

SAFEBOOT_MINIMAL

2

SAFEBOOT_NETWORK

3*

SAFEBOOT_DSREPAIR

참고 * 값 3은 Windows 도메인 컨트롤러에만 적용됩니다.

InitSafeBootMode 변수를 사용하려면 다음 코드 예제와 같이 드라이버에서 선언해야 합니다.

extern PULONG InitSafeBootMode;

InitSafeBootMode를 선언한 후 다음 코드 예제를 사용하여 운영 체제가 안전 모드에서 실행 중인지 여부를 확인할 수 있습니다.

if (*InitSafeBootMode > 0) {
    // The operating system is in Safe Mode.
    // Take appropriate action.
    //
}

드라이버가 안전 모드에서 작동하지 않도록 하려면 다음 목록에서 드라이버 유형과 일치하는 기술을 사용합니다.

  • 함수 드라이버

    함수 드라이버의 서비스 시작 유형이 SERVICE_BOOT_START 경우 함수 드라이버의 AddDevice 루틴에서 InitSafeBootMode 값을 확인합니다. 시스템이 안전 모드인 경우 실패 상태를 반환합니다.

    메모DriverEntry 루틴에서 오류를 반환해서는 안 됩니다.

  • 필터 드라이버

    시스템 시작 중에 필터 드라이버가 시작되면 필터 드라이버의 AddDevice 루틴에서 InitSafeBootMode 값을 확인합니다. 운영 체제가 안전 모드인 경우 다음을 수행합니다.

    1. 필터 디바이스 개체를 디바이스 스택에 연결하지 마세요.
    2. 필터 드라이버의 AddDevice 루틴에서 성공을 반환합니다.
  • 기타 드라이버

    함수 또는 필터 드라이버 이외의 드라이버의 경우 드라이버의 DriverEntry 루틴에서 InitSafeBootMode 값을 확인합니다. 운영 체제가 안전 모드인 경우 실패 상태를 반환합니다.