상세 컨텐츠

본문 제목

[Windows PE] 3. 윈도우 PE의 시작 프로그램 추가/제어하기

운영체제/Windows PE

by 컴 공 생 2017. 8. 25. 21:56

본문


저번 포스팅에서는 간단한 윈도우 PE를 만들어 보았습니다. (관련 글: [Windows PE] 2. 아주 간단한 윈도우 PE를 만들어 보자!)

하지만 저번의 방법으로는 하나의 프로그램만 실행이 가능했었습니다. 물론, 쉘 프로그램도 실행되지 않았습니다. (쉘 프로그램이라 하면 윈도우의 UI(시작 표시줄, 작업 표시줄 등)를 담당하는 Explorer.exe 같은 프로그램들을 지칭합니다.) 

그래서 이번 포스팅에서는 여러 개의 프로그램을 동시에 실행하는 방법에 대하여 포스팅 하겠습니다. (쉘 프로그램에 대해서는 다음 편에서 다룰 예정입니다.) 이번 포스팅에서는 저번 편에서 첨부해드린 파일이 있어야 합니다. 준비되었나요? 시작합니다.


Windows PE의 작업 순서

Windows PE의 부팅 프로세스는 다음과 같습니다.

1. 특정 미디어의 부팅 섹터가 로드됩니다. 컨트롤이 Bootmgr에 전달됩니다. Bootmgr은 BCD(부팅 구성 데이터)에서 기본 부팅 정보를 추출하고 컨트롤을 Boot.wim에 포함된 winload.exe에 전달합니다. 그러면 Winload.exe는 적절한 HAL(하드웨어 추상화 계층)을 로드하고 시스템 레지스트리 하이브 및 필요한 부팅 드라이버를 로드합니다. 로드가 완료되면 커널을 실행할 환경이 준비됩니다.

2. Ntoskrnl.exe가 실행되고 환경 설정이 완료됩니다. 세션 관리자(SMSS)로 제어가 전달됩니다.

3. SMSS는 레지스트리의 나머지를 로드하고 Win32 하위 시스템(Win32k.sys)과 해당 여러 프로세스를 실행하도록 환경을 구성합니다. SMSS는 Winlogon 프로세스를 로드하여 사용자 세션을 만든 다음 서비스 및 꼭 필요하지는 않은 나머지 장치 드라이버와 보안 하위 시스템(LSASS)을 시작합니다.

4. Winlogon.exe는 HKLM\SYSTEM\Setup\CmdLine 레지스트리 값에 따라 설치를 실행합니다. Winpeshl.exe%SYSTEMDRIVE%\sources\setup.exe(있는 경우)를 시작합니다. 그렇지 않으면 %SYSTEMROOT%\system32\winpeshl.ini에 지정된 응용 프로그램을 찾습니다. 응용 프로그램이 지정되지 않은 경우 Winpeshl.exe는 cmd /k %SYSTEMROOT%\system32\startnet.cmd를 실행합니다. 기본적으로 Windows PE에는 Wpeinit.exe를 시작할 Startnet.cmd 파일이 포함되어 있습니다. Wpeinit.exe는 네트워크 리소스를 로드하고 DHCP와 같은 네트워킹 구성 요소에 맞춰 조정됩니다.

5. Wpeinit.exe가 완료되면 명령 프롬프트 창이 표시됩니다. Windows PE의 부팅 프로세스가 완료됩니다.


출처 : http://technet.microsoft.com/ko-kr/library/cc721977(v=ws.10).aspx


마이크로소프트의 Technet 에서는 여러 OEM 제조사들을 위해 이렇게 자세한 PE 도움말을 제공하고 있습니다. 위의 내용은 이 중 대략적인 윈도우 PE의 작업 순서에 대한 내용인데요, 여기서 주목해야될 내용은 4번입니다. 대부분의 시작 프로그램이 레지스트리에 지정되어있는 일반 윈도우 환경과는 달리 윈도우 PE는 시작 프로그램들을 크게 3가지 방법으로 지정할 수 있는데요, 지난 포스팅에서 설명한 WINPESHL.INI를 통한 방법 외에도 Startnet.cmd, AutoUnattend.xml 을 통한 방법이 있습니다. AutoUattend.xml 를 이용한 방법 같은 경우에는 GRUB4DOS를 만들때에도 활용한 방법이고요.


단순히 윈도우 설치과정을 자동화 하기 위한 PE의 경우에는 AutoUattend.xml, Startnet.cmd 파일을 수정하는 방법을 활용해도 괜찮지만, WinPESHL.ini 를 로드하는 WinPESHL.exe 파일이 있어야 원활한 자원 분배가 가능하므로 마이크로소프트는 WINPESHL.ini를 통한 시작프로그램 지정을 권장하고 있습니다. 여기에서도 WinPESHL.ini 파일을 수정하는 방법을 다루도록 하겠습니다.


WINPESHL.ini 파일의 구조


[LaunchApp]

AppPath = %SYSTEMDRIVE%\myshell.exe

[LaunchApps]

%SYSTEMDRIVE%\mydir\application1.exe, -option1 -option2

application2.exe, -option1 -option2


마이크로소프트 Technet에 공개된 WINPESHL.ini 도움말에서는 WinPESHL.ini 파일을 크게 두 부분, 즉 [LaunchApp] [LaunchApps] 부분으로 분류합니다. 똑같아 보이지만 두번째 부분은 LaunchApps 로 복수형이 사용된 것을 알 수 있는데요, 이를 통해 LaunchApp 부분은 하나의 프로그램을, LaunchApps 부분은 여러 프로그램들을 포함한다는 것을 알 수 있습니다.

[LaunchApp] 

AppPath = %SYSTEMDRIVE%\myshell.exe


[LaunchApp] 부분에는 쉘 프로그램을 지정합니다. '쉘 프로그램'은 윈도우의 시작메뉴, 작업표시줄 등 UI를 담당하는 Explorer.exe 같은 프로그램들을 지칭하는데요, 아무 프로그램이나 지정해줘도 상관없습니다. 하지만, 윈도우PE에서는 쉘 프로그램이 종료될 경우에는 자동으로 시스템이 종료된다는 것을 염두해두셔야 합니다.


'[Windows PE] 2. 아주 간단한 윈도우 PE를 만들어 보자!' 편에서는 Q-Dir 을 쉘 프로그램으로 지정했었습니다. 이 밖에도 수많은 프로그램들을 쉘 프로그램으로 사용할 수 있습니다. 가볍게 BSExplorer 을 사용할 수 있고, 실제 윈도우와 비슷하게 만드려면 Explorer 쉘을 사용할 수 있습니다.


쉘 프로그램을 지정할 때에는 [LaunchApp] 부분의 AppPath 항목에 실행될 프로그램을 지정해 주면 되며, 명령줄 옵션은 사용할 수 없습니다. 그리고 되도록이면 절대경로보다는 %SYSTEMDRIVE%, %SYSTEMROOT%, %WINDIR%, %TEMP% 와 같은 환경 변수들을 사용하는 것이 좋습니다.

[LaunchApps]

%SYSTEMDRIVE%\mydir\application1.exe, -option1 -option2

application2.exe, -option1 -option2


[LaunchApps] 부분에서는 시작 프로그램들을 지정합니다. 시작 프로그램들은 맨 위부터 순차적으로 실행되며, 파일의 경로만 써주시면 됩니다. 명령줄 옵션을 사용 가능하므로 여러 옵션들을 덧붙여도 됩니다.


주로 PENetwork 와 같이 PE 의 부팅과 함께 실행되어야 하는 프로그램들을 지정해서 사용하는 편입니다.


윈도우 PE에 시작프로그램 추가하기


방법을 알았으니 프로그램들을 추가해보도록 하겠습니다.

기본적인 방법은 저번 편에서 알려드린 것과 비슷합니다. boot.wim 파일을 마운트 후, WINPESHL.ini 파일을 수정해 주면 되는 일이니까요. 이건 저번 편에서 다 알려드렸습니다. (관련 글: [Windows PE] 2. 아주 간단한 윈도우 PE를 만들어 보자!) 여기서는 하나의 프로그램이 아닌 여러 개의 프로그램을 실행해 보도록 할게요. 추가할 때는 무설치 버전의 프로그램이 필요합니다. 저같은 경우에는 Q-Dir, PENetwork, WinNTSetup 을 추가할 것입니다.


[LaunchApps]

%SYSTEMDRIVE%\파일의 경로


추가 방법은 간단합니다. 그냥 진하게 표시된 부분을 그대로 쓰고 빨간색으로 되어있는 '파일의 경로' 부분만 바꾸어 주면 됩니다.

예를 들어 1.exe 파일이 Program Files 폴더 안에 있다면 경로는 'Program Files\1.exe' 가 되는겁니다. 이때 주의할 것이 있는데, 앞쪽의 '%SYSTEMDRIVE%' 는 그대로 두셔야 합니다. 이것을 바꾸어버리면 인식 자체를 하지 못해요.

여러개의 프로그램을 추가한 모습입니다. 경로 아래쪽으로 다시 경로를 쭉 써주시면 됩니다.

이렇게 추가 후 저장한 뒤 마운트를 헤제하세요. 후에 변경된 wim 파일을 GRUB4DOS 를 이용하여 추가 후 부팅하시면 자신이 입력한 프로그램이 실행됩니다. 단, 한꺼번에 실행되지 않고 하나하나씩 실행됩니다.

이렇게 윈도우PE에 시작 프로그램을 추가하는 방법을 알아보았습니다. 다음편에서는 실제 윈도우 환경에 비슷하게 만들 수 있는 BSExplorer 에 대하여 알아보도록 하겠습니다. 




관련글 더보기

댓글 영역