운영 체제가 안전 모드에서 실행 중인지 확인
이 항목에서는 디바이스 드라이버가 실행 중인 운영 체제가 안전 모드에서 시작되었는지 여부를 확인하는 방법을 설명합니다. 이 항목에서는 드라이버가 안전 모드에서 작동하지 못하도록 방지하는 방법도 설명합니다.
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 값을 검사. 운영 체제가 안전 모드인 경우 다음을 수행합니다.
- 필터 디바이스 개체를 디바이스 스택에 연결하지 마세요.
- 필터 드라이버의 AddDevice 루틴에서 성공을 반환합니다.
기타 드라이버
함수 또는 필터 드라이버 이외의 드라이버의 경우 드라이버의 DriverEntry 루틴에서 InitSafeBootMode 값을 검사. 운영 체제가 안전 모드인 경우 오류 상태 반환합니다.