기 타 pureBasic - PE 1회 부팅 PE 체크기능을 추가하여 보았습니다.
2024.03.21 18:06
먼저 지식을 아낌없이 베풀어 주신 입니다님께 머리숙여 감사드립니다
복 많이많이 받으십시요
pureBasic을 배우고 있는중이어서 진도가 나가는것이 느릴수 밖에 없습니다.. 생각지도 않은 진도를 팍 나가게 되었습니다
오늘 PESettings에 배경사진을 추가하는 사용기에 입니다님께서 정상 wim 파일일지 아닌지를 구분할수 있는 함수를 소개를 하여 주셨습
니다 api를 이용하는것이어서 Dism이나 WimLib를 이용하는것 처럼 별도의 추가 파일은 필요가 없습니다
PE 1회 부팅 관련해서는 오토잇버전과 cmd 버전 2가지에 대해서 사용기를 썼었습니다..cmd 버전을 스크린샷에 소개도 했었습니다
cmd에서는 어쩔수 없이 WimLib를 이용하지만 오토잇의 경우 입니다님이 소개하여주것처럼 dll을 활용을 합니다
이것을 pureBasic로 할 능력이 되지 않아서 아직 고려 대상이 아니었습니다..
입니다님께서 사용기에 소개를 해주신 내용은 wim 파일의 이미지 갯수를 파악해서 wim 파일의 정상 유무를 판단을 합니다
PE 1회 부팅에서는 wim이 정상이면서 1회 부팅이 가능한 PE라는것을 판단을 해야합니다..윈도우 설치와는 조금 상황이 다릅니다
입니다님께서 알려주신 소스로는..PE인지 체크를 할수가 없어서..소스를 가지고 구글을 검색을 했습니다..이것이 저의 실수였습니다
구글 검색은 실패했습니다..설명들을 보고 응용할 능력이 되지 않았습니다..그런데 중요한것을 잊고 있었죠...
입니다님의 Wiminfo 작품은 소스가 공개되어 있습니다.. 매인 소스가 6천줄이나 되어서..용어를 알지 못하면 그냥 외계어로 보여서 문제
이기는 합니다.. 입니다님께서 댓글에 알려주신 소스로 검색을 해서 살펴보았더니 필요한것이 딱 있었습니다
윈도우 백업,복원에 필요한 소드는 이미 입니다님이 다 공개를 해주셨는데 못찾고 있었던것입니다..
앞으로는 입니다님 소스를 더 열심히 살펴봐야할것 같습니다..
입니다님 멋진 작품에 소스까지 베풀어 주셔서 감사합니다
진행 과정을 자세히 정리를 한것은 입니다님께서 공개를 하여 주신 소스에 많은것들이 있고..도움을 주실 입니다님이 계신 상황이어서
윈도우 설치나 백업,복원에 관심이 있으신분들을 도전을 해보시는것도 좋을것 같아서 입니다
pecmd.exe 관련해서도 입니다님께서 도움을 주셔서 많이 배울수 있었습니다..그때 배웠던 지식과 소스들을 아직도 활용을 하고 있습니다
기회가 있을때 필요한것을 얻으실수 있으셨으면 좋겠습니다
아래는 구글 검색을 해서 찾은 정보입니다..어렵다는 구조체 이야기도 나옵니다
https://learn.microsoft.com/ko-kr/windows-hardware/manufacture/desktop/wim/dd834971(v=msdn.10)?view=windows-11
WIMGetImageCount
DWORD
WINAPI
WIMGetImageCount(
HANDLE hWim
);
반환 값은 .wim 파일의 이미지 수입니다.
이 값이 0이면 이미지 파일이 잘못되었거나 적용할 수 있는 이미지가 포함되지 않습니다.
WIMGetAttributes
BOOL
WINAPI
WIMGetAttributes(
HANDLE hWim,
PWIM_INFO pWimInfo,
DWORD cbWimInfo
);
[out] .wim 파일에 대한 정보와 함께 반환되는 WIM_INFO 구조체에 대한 포인터입니다.
WIM_INFO
typedef struct _WIM_INFO
{
WCHAR WimPath[MAX_PATH];
GUID Guid;
DWORD ImageCount;
DWORD CompressionType;
USHORT PartNumber;
USHORT TotalParts;
DWORD BootIndex;
DWORD WimAttributes;
DWORD WimFlagsAndAttr;
}
WIM_INFO, *PWIM_INFO, *LPWIM_INFO;
BootIndex
.wim 파일에서 부팅 가능한 이미지의 인덱스를 지정합니다.
이 값이 0이면 부팅 가능한 이미지를 사용할 수 없습니다. 부팅 가능한 이미지를 설정하려면 WIMSetBootImage 함수를 호출합니다.
PE에서 부팅 여부를 확인하기 위해서는 BootIndex 값을 가져와야 합니다..
cmd에서는 Dism, imageX, WimLib에서 정보를 가져와서 추출을 할수 있습니다
이 내용을 읽었는데도 윈도우 ISO 안에 있는 boot.wim에서 값이 2가 나올때 이미지가 2개여서 인줄 알았습니다
입니다님께서 댓글을 남겨주신 덕분에 두번째 이미지로 부팅이 된다는것을 알았습니다..아직도 배워야 할것이 너무 먆습니다
------------------------------------------------------------------------------------------------------
추가입니다.
입니다님께서 지난 사용기에 BootIndex에 대해서 자세히 설명을 해주셨습니다
이 BootIndex 값은 이 번호의 이미지로 부팅을 하라는 내용입니다.. PE의 경우는 부팅을 해야해서 이 값이 주어지고 윈도우 설치 wim의
경우 부팅도 되지 않지만 부팅을 하지 않기 때문에 이 BootIndex 값이 0 입니다
이런 차이를 가지고 PE를 구분을 하게 된것입니다
윈도우 설치 wim을 만들때 BootIndex 값을 실수(?)로 설정을 할수도 있을것입니다.
PE는 무조건 값이 있을것입니다.. MS에서 따로 규정한 방법은 아니어서 단순히 꼼수로 대충 구분을 하는 정도로 보아 주십시요
wim 파일 정상 비정상은 pe에서 wim 파일에서 정보를 가져오려고 할때 wim 파일이 정상이 아니면 아예 에러가 납니다
에러가 날때는 메세지에서 비정상이라고 보여주는것입니다..
------------------------------------------------------------------------------------------------------
입니다님께서 댓글로 지식을 베풀어 주신 덕분에 입니다님 소스에서 찾은 것을 PE 1회 부팅이 적용을 하여 보았습니다
1. wim 파일이 정상인지 아닌지에 구분해서 정상이 아닌 경우 안내 메세지를 보여줍니다
2. 정상 wim 파일인 경우 PE가 아니면 안내 메세지를 보여줍니다
이제서야 오토잇으로 만들었던 PEBoot 프로그램과 같은 수준이 된것 같습니다
한가지는 다릅니다 BCD에 등록되는 1회 부팅 메뉴는 윈도우로 부팅시에 삭제하지 않습니다..
1. 4.0 버전으로 업데이트가 되었습니다
2. 윈도우 백업 파일의 경우 입니다...PE가 아니라고 안내를 하고 있습니다
3. 윈도우 ISO에 있는 boot.wim 파일입니다..이것은 이미지가 2개 들어가 있죠...부팅이 가능한 PE입니다
4. 폴더를 7z으로 압축을 하고 wim 파일로 이름을 바꾼것입니다. 아래처럼 정상적인 wim 파일이 아니라고 안내를 하고 있습니다
5. 이 wim 파일을 PE를 압축 해재한후 T.Dism에서 PE로 캡처는 하는 도중에 작업을 중지한것입니다..
작업중에 중지를 해서 정상 wim이 아니라고 안내 메세지를 보여주고 있습니다
6. 정상적인 PE인 경우 아래처럼 1회 부팅여부를 확인하는 메세지가 나옵니다..
wim 파일 정상여부와 PE 여부에서 wim 파일 정상 여부가 먼저 판단이 됩니다..정상적인 wim 일때 PE 여부를 판단을 합니다
정상적인 wim이 아니면..api에서 바로 에러가나서 구분이 됩니다 판단하는 실제 시간은 느낄수 없을 정도 입니다
7. PE로 부팅이 잘되었습니다
8. 다른 PE로 부팅을 하여 보겠습니다
9. PE로 부팅을 하였습니다
10. 일이 일어서 왔다갔다 하면서 이것은 확인을 안했네요...윈도우 설치 wim 파일입니다..PE가 아니라고 메세지를 보여주고 있습니다
11. 마무리
고수님의 댓글 하나는 그냥 댓글이 아니죠...초보에게는 수많은 시간동안 헤메여야 배울수 있는 귀한 지식입니다...
아직 배울단계가 아니데..입니다님 덕분에 단계를 넘어서 PESettings 프로그램에 적용을 할수 있었습니다..
초보의 글에 관심을 가져주시고 지식을 베풀어 주신 입니다님께 다시 한번더 감사인사를 올립니다
pureBasic으로 만든 PE 1회 부팅 프로그램은 BCD에 등록된 1회 부팅 메뉴를 윈도우 부팅시에 삭제할 계획이 없습니다.
입니다님의 도움으로 어느 정도 완성이 된것 같습니다. 놓치고 있는 부분들이 있나 살펴보고 문제가 없으면 스크린샷에 소개를 하도록
하겠습니다
오늘을 축구를 하는 날입니다..
온 국민이 함께 웃을수 있는 시간이되었으면 좋겠습니다
즐거운 시간이 되시길 바랍니다
댓글 [15]
-
아이맥스 2024.03.21 18:17
-
lyj 2024.03.21 18:27
수고하셨습니다.
-
상발이 2024.03.21 18:37
수고하셨습니다.
-
소리애드 2024.03.21 19:02
수고하셨습니다 ..
-
소나무송 2024.03.21 19:02
수고하셨습니다.
-
수리수리 2024.03.21 19:45
수고하셨습니다^^
-
스마일^_^ 2024.03.21 19:57
감사합니다.
-
입니다 2024.03.21 20:46
-
왕초보 2024.03.21 20:58
축구를 보셔야 하는데 제가 불편을 드렸습니다..
진심으로 감사드립니다
-
왕초보 2024.03.21 21:13
저는 상상도 할수 없는 방법입니다
눈에 보이지를 않는 부분이어서 wim 파일안에 아래 정보가 저장이 되어 있는곳이 어디인지 궁금할정도 입니다
아래처럼 구분이 잘되었습니다...
PE로 캡처를 할때 WindowsPE 정보가 저장되고 이 정보를 가져오는것으로 결과만 이해가 됩니다
PE를 구분할수 있는 정확한 방법을 알려주셔서 감사합니다
PESettings에 PE 구분하는 방법을 잘 활용을 하도록 하겠습니다..
오늘도 큰 신세를 졌습니다...마음에 깊이 새겨 두도록 하겠습니다...감사합니다
-
왕초보 2024.03.21 21:35
컴퓨터 관련 직종아니어서 관심 있는 부분만 알고 있어서 나머지 부분은 제가 까막눈인것을 알고 있었습니다
오토잇에서 PE 구분은 BootIndex로 했습니다..제 수준에 PE와 윈도우 wim 파일을 구분할수 있는것은 이것이었습니다
진짜 중요한 내용이 같이 있었는데..xml 내용이 복잡해서 어떤것이 필요한것인지도 구분을 할수가 없었습니다
보물이 있는데도..보물을 가지고 있는 줄도 몰랐습니다..이제서야 어떤것으로 구분을 했는지 파악이 되었습니다
입니다님 감사합니다
1. 입니다님께서 알려주신 방법과 같은 방법으로 오토잇에서 추출한것입니니다 BootIndex값도 이지만 xml 내용도 같이 있습니다
이 내용들이 복잡해서 어떤 의미이지를 파악하지 못하였었습니다.. 이제서야 아래 단어들이 눈이 들어옵니다
PE일때 xml 내용입니다
2. 윈도우 설치 wim 파일의 경우 입니다..차이를 확실히 알것 같습니다..
-
왕초보 2024.03.22 09:26
버전 5.0으로 완성을 해서 테스트 하던중에 중국 pe를 sunshine님께서 한글화를 해주신 PE의 경우 XML의 <EDITIONID> 값이 수정이
되어 있습니다...
저는 자동으로 입력이 되는것인줄 알았습니다..실제 어제 pe를 압축해제하고 T.Dism로 윈도우용으로도 캡처를 해보았었습니다 이때에
pe로 등록이 되었었습니다.
한글화된 pe들이 배포가 많이되고 있어서 <EDITIONID> 값을 체크하는것은 도움을 주셨지만 활용하기가 어려울것 같습니다
죄송합니다..
1. 중국 pe가 한글화 된 pe 입니다. pe 체크를 하지 못하였습니다
2. xml 내용입니다.. 다른 이름으로 수정이 되어 있습니다
3. 이것도 중국 pe가 한글화 된 것입니다...pe 체크를 하지 못하였습니다
4. 이름이 변경이 되어 있습니다...win10 이라고 되어 있는곳도 있네요
-
hayi10 2024.03.21 22:06
о³°```″´·♧♧[수고 하셨습니다.]♧♧·´″```°³о ^.^ ★
-
광풍제월 2024.03.21 23:02
수고하셨습니다.
-
목련 2024.03.21 23:56
수고많이하셨습니다.
수고하셨습니다