이녁 하늘 아래

Windows x64용 1회성 부팅 관리 유틸리티 제작 기술 팁 본문

Autoit3 및 PureBASIC

Windows x64용 1회성 부팅 관리 유틸리티 제작 기술 팁

이녁 2026. 9. 19. 21:11

 

OnceBootBCD / Windows x64용 1회성 부팅 관리 유틸리티 제작 기술 팁 소개

 
첨부 파일 :

boot.sdi
0.94MB

 
 ** 윈도우 설치 폴더에도 이 파일이 있음.
 
개발 도구 : PureBasic 6.40 한글(PureBasic 6.20 Korean Language)


더보기

[BCD 진행 과정 참조]

 

bcdedit /create /d "WinPE" /application osloader


└ 이 때 /d 는 부팅 항목의 표시 이름으로 적절히 지정합니다. 명령 후 생성된 부팅 항목의 GUID 식별자가 출력되며, 이후의 명령부터는 해당 GUID 식벽자를 지정하여 작업을 진행하면 됩니다. 이하 {GUID} 로 표시.

bcdedit /set {GUID} device "ramdisk=[F:]\sources\boot.wim,{ramdiskoptions}"
bcdedit /set {GUID} osdevice "ramdisk=[F:]\sources\boot.wim,{ramdiskoptions}"
bcdedit /set {GUID} path \Windows\System32\Boot\Winload.efi
bcdedit /set {GUID} systemroot \Windows
bcdedit /set {GUID} locale ko-KR
bcdedit /set {GUID} inherit {bootloadersettings}
bcdedit /set {GUID} detecthal Yes
bcdedit /set {GUID} winpe Yes
bcdedit /set {GUID} ems Yes


└ 이 때 만약 WIM 이미지 파일의 전체 경로에 공백이 포함되어 있다면 경로 전체를 ""(큰 따옴표)로 묶어주어야 하며, 아니라면 큰 따옴표는 생략해도 됩니다.

전체 경로 중 드라이브 문자는 [](대괄호)로 묶어주어야 함을 잊지 마세요.


bcdedit /displayorder {GUID} /addlast

 

└ 이 과정을 빼먹으면 멀티 부팅 화면에 해당 부팅 항목이 출력되지 않습니다. 반드시 잊지 마시고 목록의 가장 처음으로 등록을 원하는 경우에는 /addlast 대신 /addfirst 를 사용하면 됩니다.

 

 

참고로 옵션들 중에서 isolatedcontext 와 bootmenupolicy 옵션은 없어도 부팅에 지장은 없습니다.


기존 MBR 환경용으로 구성된 WIM 이미지 부팅 항목의 옵션 수정

보통 UEFI 부팅 환경에서 WIM 이미지의 부팅을 시도했다가 실패하신 분들의 대부분은, 해당 부팅 항목의 옵션이 MBR 부팅 환경용으로 구성되어 있기 때문입니다. MBR 부팅 환경용의 WIM 이미지 부팅 옵션과 UEFI 부팅 환경용의 WIM 이미지 부팅 옵션의 차이는 사실 Path 항목 하나만 다르다고 할 수 있습니다.

그래서 기존의 부팅 항목에서 Path 옵션의 값만 UEFI 환경용에 맞춰 바꿔주면 해당 이미지로 정상적으로 부팅할 수 있습니다.

 

단! 이것은 해당 WIM 이미지가 지금까지 말한 것과 같이 64비트 버전이라는 전제하에 이야기한 것입니다. 만약 32비트 버전이라면 이야기한 것처럼 UEFI 부팅을 지원하지 않기 때문에 이렇게 해도 부팅이 실패하게 됩니다.

 

배치 파일을 사용하도록 하면 편리하겠죠. 간단한 배치 파일입니다. MBR 부팅 환경은 물론 설명한 UEFI 부팅 환경에서도 함께 사용할 수 있도록 하는 것이 가능합니다.

 

첨부 파일 : 

배치 파일 실행

 

 

WIM / VHD를 Windows BCD로 1회성 부팅하는 유틸리티

 

어디에도 검색을 해 보아도 1회 부팅 도구를 제작하는 데는 참고할 만한 기술 사이트 정보가 별로 존재하지 않는 것 같다. 그래서 여기서는 현재 제작하고 있는 소스 스크립트 내부를 해부해 본다. 이 글을 통해 범용성 1회 부팅 도구 개발에 도움이 되기를 기원해 본다.
 

WIM를 Windows BCD로 1회성 부팅하는 유틸리티

 
Windows PE 환경이나 테스트용 WIM 이미지를 직접 부팅해야 하는 경우가 있습니다. 일반적으로 이러한 작업은 bcdedit.exe를 이용하여 BCD(Boot Configuration Data)에 부팅 항목을 직접 추가하고, bootsequence를 설정한 다음 시스템을 재부팅하는 방식으로 처리할 수 있습니다.
하지만 BCD를 직접 수정하는 작업은 작은 실수도 다음 부팅 과정에 영향을 줄 수 있기 때문에 단순히 몇 개의 bcdedit 명령만 실행하는 것보다는,
 
백업 검증 BCD 구성 최종 확인 재부팅 복구 준비
 
라는 단계적인 구조가 필요합니다.
 
이번에 소개하는 OnceBootBCD는 이러한 과정을 하나의 프로그램으로 자동화하는 것을 목적으로 제작한 Windows x64용 스크립트 프로그램입니다.


1. 프로그램의 기본 목적

OnceBootBCD의 핵심 목적은 간단합니다.

WIM, VHD 파일을 지정하여 다음 한 번의 부팅에서 해당 이미지를 부팅하도록 Windows BCD를 구성하는 것

 
지원 대상은 다음과 같습니다.

  • .WIM 등

특히 WIM 파일의 경우 단순히 파일을 지정하는 것에서 끝나는 것이 아니라 Windows PE 이미지인지 확인하고, 필요한 boot.sdi를 준비하여 램디스크 기반 BCD 구성을 수행합니다.


2. 전체적인 처리 구조

프로그램의 핵심 실행 흐름은 다음과 같이 구성되어 있습니다.

프로그램 실행
      │
      ▼
관리자 권한 확인
      │
      ▼
중복 실행 확인(Mutex)
      │
      ▼
실행 인자 분석
      │
      ├── /gui       → GUI 실행
      ├── -restore   → BCD 복원
      ├── /lnk       → 바탕화면 바로가기
      ├── /sendto    → SendTo 등록
      ├── /help      → 도움말
      └── 파일 경로  → 1회성 부팅
                           │
                           ▼
                     WIM/VHD 확인
                           │
                           ▼
                    WIM인 경우 이미지 검증
                           │
                           ▼
                       BCD 백업
                           │
                           ▼
                 기존 OnceBootBCD 항목 제거
                           │
                           ▼
                     새로운 BCD 생성
                           │
                           ▼
                  최종 BCD 상태 검증
                           │
                           ▼
                  재부팅/복구 준비
                           │
                           ▼
                         재부팅

 
즉, 프로그램의 핵심은 단순한 bcdedit 실행기가 아니라 부팅 작업의 전체 상태를 단계적으로 관리하는 것에 있습니다.
 


3. 가장 중요한 기능 - BCD 백업

BCD를 수정하기 전에 먼저 현재 BCD 상태를 백업하도록 구성되어 있습니다.
소스에는 다음과 같은 기능이 존재합니다.

BackupBcdRegistry()
RestoreBcdRegistry()
VerifyFinalBcdState()

이 구조의 의미는 중요합니다.
 
BCD 작업 중 문제가 발생했을 경우 기존 상태로 돌아갈 수 있도록 하는 것입니다.
특히 다음과 같은 상황을 고려할 수 있습니다.

  • BCD 항목 생성 실패
  • GUID 생성 실패
  • BCD 옵션 설정 실패
  • 최종 BCD 검증 실패
  • 기존 OnceBootBCD 항목 제거 실패

이러한 경우 프로그램은 가능한 단계에서 RestoreBcdRegistry()를 호출하여 이전 BCD 상태를 복원하도록 설계되어 있습니다.


4. WIM 파일은 별도로 검증

WIM은 VHD와 처리 방식이 다릅니다.
WIM을 선택하면 프로그램은 내장된 wimlib-imagex.exe와 libwim-15.dll을 이용하여 이미지를 검사합니다.
소스에서는 다음과 같은 검증 과정을 수행합니다.
 

WIM 정보 확인
     │
     ▼
System Root 확인
     │
     ▼
Windows\System32\Drivers 확인
     │
     ▼
wimfsf.sys 확인
     │
     ▼
Windows\System32\Boot 확인
     │
     ▼
winload.efi 확인
     │
     ▼
WIM 검증 완료

 
따라서 단순히 확장자가 .wim이라는 이유만으로 부팅 작업을 진행하지 않고, 이미지 내부 구조를 확인하는 방식입니다.


5. WIM 부팅에서 boot.sdi의 역할

WIM 기반 PE 부팅에서는 boot.sdi가 중요한 역할을 합니다.
OnceBootBCD는 WIM 파일과 같은 경로에서 boot.sdi를 확인하고 필요한 경우 준비하도록 구성되어 있습니다.
이후 BCD에는 다음과 같은 램디스크 관련 정보가 설정됩니다.

ramdisksdipath
ramdisksdidevice

그리고 OS Loader에는 WIM을 가리키는 다음과 같은 형태의 정보를 구성합니다.

ramdisk=[드라이브:]경로,WIM GUID

이 과정을 통해 Windows Boot Manager가 WIM 이미지를 램디스크 기반으로 로드할 수 있도록 BCD를 구성합니다.


6. VHD 부팅

WIM뿐 아니라 VHD도 지원합니다.
VHD의 경우 WIM과 달리 램디스크 GUID를 생성하지 않고 VHD 장치를 OS Loader에 설정합니다.
개념적으로 다음과 같은 구조입니다.

VHD=[드라이브:]경로

그리고 OS Loader에 다음 항목을 설정합니다.

osdevice
device
nx
inherit
locale
path
systemroot
detecthal

 
따라서 WIM과 VHD 프로그램에 처리하지만 실제 BCD 구성 과정은 구분되어 있습니다.


7. UEFI와 Legacy BIOS 구분

프로그램에는 펌웨어 유형을 확인하는 기능도 포함되어 있습니다.

GetFirmwareTypeEx()

이를 이용하여 현재 시스템이

  • UEFI
  • Legacy BIOS
  • Unknown

중 어떤 환경인지 확인합니다.
WIM 부팅에서는 UEFI 환경일 경우 winload.efi 존재 여부를 확인하여 32비트 PE 등 부팅할 수 없는 이미지를 사전에 걸러내도록 구성되어 있습니다.(블루스크린 방지)


8. Single Instance

프로그램 시작 단계에서는 Mutex를 생성합니다.

OnceBootBCD_SingleInstance_Mutex

 
이미 동일 프로그램이 실행되고 있다면 새 프로그램을 계속 실행하지 않고 사용자에게 알림을 표시합니다.
이 기능은 BCD를 수정하는 프로그램에서 특히 중요합니다.
동시에 두 개의 프로그램이 BCD를 수정하게 되면 다음과 같은 문제가 발생할 가능성이 있기 때문입니다.

프로세스 A
  └─ BCD 백업
  └─ BCD 수정

프로세스 B
  └─ BCD 백업
  └─ BCD 수정
  └─ 다른 상태로 변경

 
따라서 하나의 BCD 작업만 수행하도록 실행 자체를 제한하는 구조를 사용하고 있습니다.


9. 관리자 권한

BCD와 Windows 시스템 영역을 직접 변경하기 때문에 관리자 권한이 필요합니다.
프로그램은 실행 초기에 관리자 권한 여부를 확인합니다.
관리자 권한이 없으면 다음과 같이 작업을 중단합니다.
 

권한 오류
이 프로그램을 실행하려면 '관리자 권한'이 필요합니다.

 
또한 다음 권한을 활성화하도록 구성되어 있습니다.

SeBackupPrivilege
SeRestorePrivilege

 
BCD 백업 및 복원과 Windows 시스템 영역에 대한 작업을 고려한 부분입니다.


10. 실패를 고려한 Rollback 구조

OnceBootBCD에서 중요한 부분 중 하나가 Rollback입니다.
예를 들어 새로운 OS Loader GUID를 생성하지 못했다면 단순히 프로그램을 종료하는 것이 아니라 기존 BCD 백업을 이용하여 복원하는 구조를 사용합니다.
 
개념적으로는 다음과 같습니다.

BCD 백업
   │
   ▼
BCD 수정
   │
   ├── 성공 → 최종 검증 → 재부팅
   │
   └── 실패
          │
          ▼
       BCD 복원
          │
          ▼
       작업 종료

 
이것은 BCD를 직접 변경하는 프로그램에서 상당히 중요한 설계 요소입니다.


11. 최종 BCD 검증

BCD 명령이 실행되었다는 것만으로 작업이 완전히 성공했다고 판단하지 않습니다.
소스에는 다음과 같은 최종 검증 단계가 존재합니다.

VerifyFinalBcdState()

 
즉,

BCD 명령 실행
      ↓
명령 자체의 성공 여부
      ↓
최종 BCD 상태 확인
      ↓
정상 상태인지 판단

 
이라는 이중 확인 구조를 사용하고 있습니다.
최종 검증에 실패하면 기존 BCD를 복원하도록 되어 있습니다.


12. 재부팅 후 자동 복구 준비

OnceBootBCD는 재부팅 전에 복구 환경도 준비합니다.
소스에서는 현재 Windows의

Windows\OWBRestore.exe

 
형태로 복구 프로그램을 준비하고 BCD 백업 파일도 Windows 디렉터리에 복사합니다.

 

그리고 Offline Software Registry Hive를 로드하여 RunOnce에 복구 프로그램을 등록하는 구조를 사용합니다.
개념적으로 다음과 같습니다.

현재 Windows
     │
     ├── BCD 백업
     │
     ├── OWBRestore.exe 복사
     │
     ├── Software Hive 로드
     │
     └── RunOnce 등록
              │
              ▼
            재부팅
              │
              ▼
        Windows 재진입
              │
              ▼
        복구 프로그램 실행

 
따라서 단순히 BCD만 수정하고 끝내는 구조와는 차이가 있습니다.


13. 명령행 실행도 지원

GUI 없이도 사용할 수 있도록 명령행 옵션을 제공합니다.
주요 옵션은 다음과 같습니다.

/gui
/?
/help
-restore
/lnk
/sendto
/timeout
/log

 
예를 들어 /gui를 사용하면 대화형 GUI를 실행할 수 있고, -restore는 준비된 BCD 복원 기능을 호출합니다.
또한 /timeout 옵션을 이용하여 부팅 메뉴 대기 시간을 설정할 수 있도록 구성되어 있습니다.


14. GUI 대시보드

GUI 모드에서는 다음 기능을 제공합니다.

  • 현재 펌웨어 유형 표시
  • WIM/VHD 파일 선택
  • Drag & Drop
  • BCD 수동 백업
  • BCD 원상 복원
  • 우클릭 메뉴 토글
  • 부팅 대기시간 설정
  • 1회성 부팅 실행

특히 Drag & Drop 방식으로 부팅 대상 파일을 선택할 수 있도록 구성되어 있어 명령행에 익숙하지 않은 사용자도 사용할 수 있도록 설계되어 있습니다.


15. Windows 탐색기 연동

프로그램에는 바탕화면 바로가기와 SendTo 메뉴 등록 기능도 포함되어 있습니다.
예를 들어 탐색기에서 파일을 선택한 후

보내기(SendTo)
   └─ 1회성 부팅 (OnceBootBCD)

 
형태로 사용할 수 있도록 구성할 수 있습니다.
또한 .wim, .vhd로 하는 1회성 부팅 작업을 보다 간편하게 실행하는 것을 목표로 합니다.


16. 로그 기능

문제가 발생했을 때 원인을 추적할 수 있도록 실행 추적 로그 기능도 포함되어 있습니다.
로그에는 실행 시간과 주요 작업 상태를 기록할 수 있습니다.
예를 들어,

[2026-08-31 12:00:00] === OnceBootBCD v1.0.9 실행 시작 ===
[2026-08-31 12:00:01] WIM 파일 진단 시작
[2026-08-31 12:00:02] BCD 백업 완료
[2026-08-31 12:00:03] OS Loader GUID 생성 완료

 
와 같은 형태로 작업 과정을 추적할 수 있습니다.
 
BCD와 부팅 작업은 일반적인 파일 복사 프로그램보다 실패 원인을 추적하기 어려운 영역이기 때문에 로그 기능은 유지보수 측면에서 의미가 있습니다.


17. 프로그램의 핵심 설계 철학

이 프로그램에서 가장 중요한 부분은 특정 명령 하나가 아니라 작업 순서입니다.
 
핵심 구조를 요약하면 다음과 같습니다.

[1] 실행 환경 확인
       ↓
[2] 관리자 권한 확인
       ↓
[3] 중복 실행 방지
       ↓
[4] 입력 파일 확인
       ↓
[5] WIM인 경우 이미지 검증
       ↓
[6] 기존 BCD 백업
       ↓
[7] 기존 OnceBootBCD 제거
       ↓
[8] 새로운 BCD 항목 생성
       ↓
[9] 필요한 BCD 옵션 설정
       ↓
[10] 최종 BCD 검증
       ↓
[11] 재부팅 후 복구 준비
       ↓
[12] 시스템 재부팅

 
즉, “명령 실행”보다 “상태 관리”를 중심으로 설계한 것이 이 프로그램의 핵심입니다.


18. PureBasic 6.30 x64

현재 소스의 IDE 설정은 다음과 같이 되어 있습니다.

PureBasic 6.30
Windows - x64
Unicode
EnableAdmin
DPIAware

 
또한 wimlib 관련 실행 파일과 DLL을 DataSection / IncludeBinary 형태로 프로그램에 포함시키는 구조를 사용하고 있습니다.
따라서 외부 프로그램에 대한 의존성을 줄이고 하나의 실행 파일 형태로 구성하는 방향을 가지고 있습니다.


19. 이 프로그램을 한 문장으로 표현한다면

OnceBootBCD를 가장 간단하게 표현하면 다음과 같습니다.

“Windows BCD를 직접 조작하여 WIM/VHD를 다음 한 번의 부팅 대상으로 등록하고, 작업 전 BCD 백업과 작업 후 상태 검증 및 복구 준비까지 수행하는 Windows x64용 1회성 부팅 관리 유틸리티”

 
단순한 bcdedit 명령 자동화 프로그램이라기보다 BCD 변경 작업의 전 과정을 하나의 워크플로우로 묶은 프로그램이라고 설명하는 것이 더 정확합니다.


20. 마무리

OnceBootBCD는 Windows의 부팅 구성 데이터인 BCD를 이용하여 WIM, VHD 이미지 파일의 1회성으로 부팅하기 위한 목적으로 제작되었습니다.
 
특히 프로그램의 구성은 다음 네 가지에 초점을 맞추고 있습니다.
① 입력 이미지 검증
② BCD 변경 전 백업
③ BCD 변경 후 최종 검증
④ 오류 발생 시 복구를 고려한 구조
여기에 관리자 권한 확인, Single Instance, GUI, Drag & Drop, 로그, SendTo 연동 등의 기능을 결합했습니다.
 
결국 이 프로그램의 핵심은

“WIM을 부팅한다”

는 단순한 기능보다,

“Windows의 부팅 환경을 변경하는 작업을 가능한 한 단계적으로 관리한다.”

는 데 있습니다.
 
※ 이 글은 OnceBootBCD 소스에 구현된 구조를 기준으로 프로그램의 기능과 설계 의도를 설명한 것입니다. 실제 배포 전에는 다양한 BIOS/UEFI 환경, WIM 이미지, VHD 구성, BCD 오류 및 재부팅/복구 시나리오에 대한 별도의 실기 테스트가 필요하며 이 과정은 매우 중요합니다.
 
첨부 파일 :

TBWinPE_b01.exe
1.68MB

 
 * 참고로 위 방식과는 다른 방식(TBWinPE.EXE 이용)이나 Wim 부팅이미지 파일을 1회 부팅하는 목적은 동일합니다.
 ** windows\system32\winload.exe 위치에 이 파일이 없으면 블루스크린 발생(PECMD 방식인 경우)
 ** 정상적인 PE 이미지인 경우는 무관.
 


관련 게시글 : 

가. TBWinPE와 WIM 이미지로 만들어 보는 1회성 부팅 도구

 

Comments