안전모드에서 디바이스 드라이버를 사용하기 위해서는 드라이버를 정적 로딩을 해야 한다.
정적 로딩을 하기 위해서는 CreateService() 호출시 SERVICE_BOOT_START 로
등록후 리부팅을 해야 한다.
SERVICE_BOOT_START 로 등록하기 위해서는 .sys 파일이 c:\windows\system32\drivers 에 있어야 한다.
정적 등록된 드라이버를 안전모드에서 사용하기 위해서는
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Network
에 드라이버 이름으로 키를 만드고 (확장자 불필요), 기본값에 REG_SZ 로 "Driver" 라고 적어주면 된다.
드라이버에서 현재 안전모드인지 확인하기
Windows 운영 체제 커널 InitSafeBootMode라는 ULONG 변수에 포인터를 내보냅니다. 이 변수는 안전 모드 설정이 포함 되어 있습니다.
다음 표에서 다른 값에 대 한 모드입니다.
값 모드
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3 * SAFEBOOT_DSREPAIR
* 참고값 3 Windows 도메인 컨트롤러에만 적용 됩니다.
extern PULONG InitSafeBootMode;
시스템 안전 모드에서 실행 중인지 여부를 확인 하려면 InitSafeBootMode 값을 확인 해야 합니다.
if (*InitSafeBootMode > 0){
// The system is in Safe Mode.
// Take appropriate action.
//
}