| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 노령연금
- 지역화
- 건강
- 안다르
- 반디집
- 이녁하늘
- 레시피
- 여행
- 7z
- 티스토리챌린지
- 오토잇
- 오블완
- 파일 탐색기
- 백신
- 한글 2022
- 한글패치
- Directory Opus
- 분석 도구
- 한글화
- 디스크샷
- 이녁 하늘
- 국민연금
- Soluling
- 탐색기
- 개인연금
- 파일관리자
- 한글 패치
- 파솔로 2022
- v3
- ANDAR
- Today
- Total
이녁 하늘 아래
[1부] 1회성으로 간편하게 부팅 본문
1회성으로 간편하게 부팅
AutoIt 소스 코드는 사용자가 WIM, VHD, VHDX 가상 이미지 파일을 우클릭(컨텍스트 메뉴)하여 단 1회성으로 간편하게 부팅할 수 있도록 제작된 강력한 자동화 유틸리티입니다. 핵심 내용을 체계적으로 정리해 보면,

1. 주요 기능 및 특징
- 확장자 컨텍스트 메뉴 연동: .wim, .vhd, .vhdx 파일의 우클릭 메뉴에 부팅 항목을 자동으로 등록하거나 제거할 수 있습니다.
- 스마트 다국어 지원: 운영체제 언어 환경(@OSLang)을 판별하여 한국어와 영어 메시지를 동적으로 출력합니다.
- 철저한 사전 검증: 64비트(x64) 운영체제 여부와 관리자 권한(IsAdmin)을 엄격하게 확인하여 오류를 방지합니다.
2. 핵심 작동 방식 (How It Works)
- 중복 실행 방지: 글로벌 뮤텍스(OnceBootBCD_SingleInstance_Mutex)를 사용하여 프로그램의 동시 중복 실행을 원천 차단합니다.
- BCD 및 RAMDisk 구성: WIM 이미지 부팅 시 boot.sdi 파일을 활용해 BCD(Boot Configuration Data)에 RAMDisk 디바이스 및 OS 로더 레코드를 생성합니다.
- 자동 정리 및 롤백: 1회성 부팅 구동 후 재시작 시점에 -restore 파라미터를 통해 임시 생성된 BCD 항목과 레지스트리를 깨끗하게 원복합니다.
3. 안정성 및 트랜잭션 관리
- 정밀 롤백 시스템 (_RollbackEnvironment_Precise): BCD 설정이나 레지스트리 수정 중 예외 상황이 발생하면, 사전 백업해 둔 스냅샷을 기반으로 원래 상태로 안전하게 되돌립니다.
- 상태 검증: _VerifyBcdState와 _VerifyRegistryState 함수를 통해 설정이 올바르게 적용되었는지 철저히 검증한 후 재부팅을 진행합니다.
1. 예제 화면(스크린샷) 설명 가이드
블로그 글 작성 시 독자의 이해를 돕기 위해 아래와 같은 순서로 스크린샷과 설명을 배치하면 좋습니다.
- [장면 1] 우클릭 컨텍스트 메뉴 활성화
- 설명: .wim, .vhd, .vhdx 파일 위에 마우스를 올리고 마우스 우클릭을 했을 때 나타나는 메뉴 화면입니다. 평상시에는 등록/해제를 토글(_regadd_del)하는 스크립트로 동작하며, 파일을 선택하면 "이 [확장자] 이미지로 1회성 부팅" 항목이 표시됩니다.

- [장면 2] 부팅 확인 알림창
- 설명: 사용자가 1회성 부팅 메뉴를 클릭했을 때 뜨는 확인 창입니다. 선택한 파일 이름($sFileName)을 보여주며 실수로 클릭하는 것을 방지하기 위해 예/아니오 확인 단계를 거칩니다.

- [장면 3] BCD 등록 진행 스플래시 화면
- 설명: 부팅 데이터(BCD)에 RAMDisk 및 OS 로더 항목을 안전하게 등록하는 동안 화면 중앙에 뜨는 안내(SplashTextOn) 창입니다. 작업이 완료되면 자동으로 시스템이 재부팅됩니다.
2. 주요 함수 상세 코드 해설
스크립트의 핵심 메커니즘을 담당하는 주요 함수들에 대한 기술 해설입니다.
① _Main() — 실행 흐름 제어 및 보안 검증
- 역할: 프로그램이 실행될 때 가장 먼저 호출되는 메인 진입점입니다.
- 코드 포인트:
- _WinAPI_CreateMutex: 글로벌 뮤텍스를 생성하여 프로그램이 중복 실행되거나 충돌하는 것을 원천 방지합니다.
- IsAdmin() 및 @OSArch: 관리자 권한 여부와 64비트(x64) 운영체제인지를 엄격하게 검증하여 비정상적인 환경에서의 실행을 차단합니다.
② _CreateOsLoader() — BCD 부팅 항목 생성
- 역할: 선택한 이미지 파일(.wim, .vhd 등)을 윈도우 부트 매니저가 인식할 수 있도록 BCD에 osloader 애플리케이션 항목을 등록합니다.
- 코드 포인트:
- bcdedit.exe /create /application osloader 명령어로 새로운 부팅 레코드를 만듭니다.
- WIM 이미지의 경우 RAMDisk 설정(ramdisk=[드라이브]경로,GUID)과 winpe yes 속성을 부여하며, VHD/VHDX의 경우 가상 디스크 전용 파라미터(nx OptIn, inherit {bootloadersettings})를 유연하게 적용합니다.
③ _RollbackEnvironment_Precise() — 정밀 트랜잭션 롤백
- 역할: BCD 설정이나 레지스트리 수정 과정에서 에러가 발생할 경우, 시스템을 원래 상태로 완벽하게 되돌리는 안전장치입니다.
- 코드 포인트:
- 이번 실행으로 생성된 고유 GUID 항목만 정밀하게 삭제합니다.
- 원래 존재하지 않았던 임시 boot.sdi 파일이나 OWBRestore.exe 레지스트리(RunOnce) 변경 사항을 스냅샷 기반으로 정확히 복원하여 시스템 안정성을 보장합니다.
④ _ValidateWimImage() — WIM 이미지 무결성 검증
- 역할: 사용자가 지정한 WIM 파일이 실제 정상적인 Windows PE 부팅 구조를 갖추고 있는지 검사합니다.
- 코드 포인트:
- 내장된 wimlib-imagex.exe 도구를 활용하여 WIM 내부의 Windows\System32\Drivers\wimfsf.sys 및 winload.efi 존재 여부를 확인합니다.
- 잘못된 파일 형식이거나 32비트 PE 이미지를 UEFI 환경에서 실행하려는 경우 에러를 띄우고 안전하게 차단합니다.
이 프로그램의 핵심 목적은 Windows 환경에서 사용자가 지정한 WIM / VHD / VHDX 이미지 파일을 다음 부팅 시 자동으로 부팅할 수 있도록 Windows BCD(Boot Configuration Data)를 구성하는 것입니다.
즉, 단순히 파일을 실행하는 프로그램이 아니라 다음과 같은 부팅 준비 과정을 자동화합니다.
사용자
│
▼
WIM / VHD / VHDX 지정
│
▼
파일 경로 및 확장자 검증
│
▼
관리자 권한 / x64 환경 확인
│
▼
기존 BCD 및 Registry 상태 확인
│
▼
BCD Boot Entry 생성
│
▼
RAMDISK / OS Loader 구성
│
▼
복원용 Registry / RunOnce 구성
│
▼
설정 결과 검증
│
▼
재부팅
│
▼
지정 이미지로 1회 부팅
이 구조에서 가장 중요한 함수들을 크게 5개 그룹으로 나눌 수 있습니다.
[1] 실행 환경 관리
├─ _Main()
├─ Mutex
├─ 관리자 권한
└─ x64 검사
[2] 이미지 처리
├─ _ProcessImage()
├─ _CleanPath()
└─ _ValidateWimImage()
[3] BCD 구성
├─ _CreateRamdiskDevice()
├─ _CreateOsLoader()
└─ _ExecBcdCmd()
[4] 오류 및 복구
├─ _VerifyBcdState()
├─ _VerifyRegistryState()
└─ _RollbackEnvironment_Precise()
[5] 명령 실행 엔진
├─ _ExecCmd()
└─ _SplitExecCommand()
단순히 bcdedit.exe를 호출하는 AutoIt 스크립트에서 한 단계 더 나아가, 이미지 검증, 실행 환경 확인, 중복 실행 방지, BCD 구성, Registry 처리, 상태 검증, 오류 처리 및 Rollback을 하나의 작업 흐름으로 묶은 부팅 자동화 도구이다.
특히 외부 명령 실행을 _ExecCmd()로 추상화하고 BCD 작업을 _ExecBcdCmd()로 분리함으로써 시스템 명령 실행과 BCD 처리 로직을 분리했다는 점이 핵심적인 구조적 특징이다.
또한 BCD 및 Registry 변경 전에 기존 상태를 기록하고 실패 시 이를 복원하도록 설계함으로써 시스템 부팅 환경을 변경하는 작업에서 발생할 수 있는 부분적인 변경 상태를 최소화하도록 구성했다.
결과적으로 이 프로젝트의 핵심은 특정 명령어 하나가 아니라 “시스템 상태를 변경하는 프로그램을 어떻게 안전하게 설계할 것인가”에 있다.
'Autoit3 및 PureBASIC' 카테고리의 다른 글
| [3부] 1회성으로 간편하게 부팅 / 상세 설명 (0) | 2026.08.24 |
|---|---|
| [2부] 1회성으로 간편하게 부팅, 루틴 주요 해설 (1) | 2026.08.24 |
| WIM 1회 부팅 도구 제작 (0) | 2026.08.18 |
| Snapshot Native System Restore 도구 개발일지 (0) | 2026.08.15 |
| Snapshot SysRestorer 프로그램의 주요 특징 및 관련 정보 (0) | 2026.08.14 |
