이녁 하늘 아래

WIM 1회 부팅 도구 제작 본문

Autoit3 및 PureBASIC

WIM 1회 부팅 도구 제작

인생은 다 그런거야 2026. 8. 18. 23:14
WIM 1회 부팅 도구 제작

 

WIM 1회 부팅 도구(1BootBCD)는 Windows 재부팅 시 지정한 WIM이나 VHD/VHDX 이미지를 단 1회만 임시로 부팅시킨 뒤, 다음 재부팅 때 자동으로 원래 OS로 돌아오도록 BCD(부팅 구성 데이터)를 제어하는 유틸리티입니다.

 

주요 특징 및 핵심 기능

  • 안전한 1회성 부팅 (/bootsequence): BCD 부팅 메뉴에 항목을 영구 등록하지 않고, 다음 1회 재부팅에만 해당 이미지를 로드하므로 기존 부팅 환경을 더럽히지 않습니다.
  • WIM 및 VHD/VHDX 완벽 지원: RAMDisk 기반의 WinPE(.wim) 부팅에 필요한 boot.sdi 자동 추출/연결 기능과 가상 하드디스크(.vhd/.vhdx) 직접 부팅을 모두 지원합니다.
  • 트랜잭션 기반 안정성 & 자동 롤백: BCD 객체 생성 중 에러가 발생하거나 최종 검증에 실패하면, 작업 전 상태로 자동 롤백되어 BCD 손상으로 인한 부팅 불능 위험을 차단합니다.
  • 펌웨어 자동 감지: UEFI(winload.efi) 및 Legacy BIOS(winload.exe) 환경을 자동으로 판별하여 적절한 부트 로더 경로를 구성합니다.
  • 탐색기 우클릭(컨텍스트) 메뉴 지원: 인자 없이 실행 시 .wim, .vhd 파일 우클릭 메뉴에 "1회성 부팅" 항목을 자동으로 등록하거나 삭제할 수 있습니다.

동작 프로세스

  1. 대상 및 환경 검증: 이미지 파일 존재 여부, 경로 형식, 관리자 권한 및 WIM 부팅용 필수 파일(boot.sdi) 유효성을 검증합니다.
  2. 기존 BCD 상태 백업: 현재 설정된 BootSequence 상태와 이전 1BootBCD 잔여 항목을 백업 및 수집합니다.
  3. BCD 객체 생성:
    • WIM: RAMDisk 장치 생성 및 boot.sdi 연결 $\rightarrow$ OS Loader 생성 $\rightarrow$ winpe yes 속성 설정
    • VHD: VHD 장치 생성 $\rightarrow$ OS Loader 연결 $\rightarrow$ inherit 및 nx 속성 설정
  4. 1회성 부팅 지정: 생성된 Loader GUID를 BootManager의 /bootsequence 항목으로 지정합니다.
  5. 최종 검증 및 재부팅: BCD에 값이 정확히 반영되었는지 검증을 거친 후 시스템을 즉시 재부팅합니다.

주요 활용 분야

활용 목적 설명
시스템 복구/백업 복구용 PE(.wim)로 1회 진입하여 OS 백업/복구 작업 후 원래 OS로 자동 복귀
OS 설치 및 테스트 가상 하드디스크(.vhd)에 설치된 타 OS를 멀티부팅 메뉴 추가 없이 임시 진입
원격 유지보수 원격 접속 환경에서 부팅 메뉴 선택 화면 없이 1회성 PE 부팅 후 자동 작업 수행

 

WIM 1회 부팅 도구 제작

준비물 :

boot.sdi
0.94MB

 

- 위 소스를 RC 소스로 변환 사용

 

Initialize
   │
   ├─ 관리자 권한 확인
   │
   ├─ WIM/VHD 경로 검증
   │
   ├─ 내장 boot.sdi 추출
   │       │
   │       ├─ 실패 → 종료
   │       └─ 성공
   │
   ├─ 기존 1회BootBCD 확인
   │
   ├─ 새 BCD 객체 생성
   │       │
   │       ├─ 실패 → 새 객체 삭제
   │       └─ 성공
   │
   ├─ ramdiskoptions 구성
   │
   ├─ boot.sdi 연결
   │
   ├─ WIM 연결
   │
   ├─ 모든 BCD 설정 검증
   │
   ├─ BootSequence 설정
   │       │
   │       ├─ 실패 → 새 BCD 전체 롤백
   │       └─ 성공
   │
   └─ 재부팅

 

위의 구조로 스크립트 구성됨.

 

<< 최종적으로 >> 

새 항목 생성
   ↓
boot.sdi 확인
   ↓
WIM 확인
   ↓
BCD 모든 옵션 확인
   ↓
BootSequence 확인
   ↓
        성공
         ↓
기존 1회BootBCD 삭제
         ↓
재부팅

 

 

<< 설명 >>

새로운 WIM 부팅 항목 생성 중 오류가 발생해도 기존 부팅 설정을 최대한 보존할 수 있으며, (1BootBCD_x64.pb 기준)

boot.sdi를 EXE에 RCDATA로 내장하고, 실행 시 자동 추출 → BCD 연결 → 실패 시 삭제/롤백까지 포함됨.

 

첨부 파일 :

1BootBCD 부팅도구.exe
0.22MB

 

 - 64용

 - 제작 언어 : 

 - 프로세스 개선(2026.08.19)


 

[1] InitializeApplication() 
    └─ 환경변수(WINDIR) 취득, bcdedit.exe 존재 여부 확인 및 언어 감지

[2] Main() - 인자(Parameter) 분석
    ├─ 인자 0개  : 레지스트리 컨텍스트 메뉴(우클릭) 등록/해제 (ToggleContextMenu)
    ├─ -restore  : 기존 1BootBCD 관련 BCD 객체 삭제 정리 (Delete1BootBCD)
    └─ 파일 경로 : 절대경로, 확장자(.wim, .vhd, .vhdx), WinPE X: 드라이브 제한 검증

[3] boot.sdi 추출 및 검증
    └─ 대상 경로에 boot.sdi 추출 (ExtractEmbeddedBootSDI) -> 매직 헤더($SDI0001) 검증 (VerifyBootSDI)

[4] Build1BootBCD() - BCD 트랜잭션 빌드
    ├─ ① Collect1BootBCD() : 기존 1BootBCD 객체 목록 수집
    ├─ ② CaptureBootSequence() : 현재 부팅 시퀀스 상태 백업
    ├─ ③ WOW64 리디렉션 비활성화
    ├─ ④ BCD 객체 생성 (WIM인 경우 RAMDisk 장치 -> OS Loader 생성 / VHD인 경우 OS Loader 직접 생성)
    ├─ ⑤ BCD 속성 설정 (osdevice, device, path, winpe/nx, detecthal 등)
    ├─ ⑥ bcdedit /bootsequence 설정 (영구 메뉴 변경인 displayorder 대신 1회성 적용)
    ├─ ⑦ VerifyCreatedBcd() : BCD 적용 상태 최종 검증 (실패 시 즉시 RollbackNewBcd 및 RestoreBootSequence)
    └─ ⑧ 구형 1BootBCD 잔재 정리 (DeleteBcdObject)

[5] RebootSystem()
    └─ 일반 윈도우(shutdown.exe) 또는 WinPE(wpeutil.exe reboot)를 통한 시동 재부팅

 

 

Comments