Admiral
19-11-2009, 02:45
Данная программа представляет собой GUI оболочку над системными утилитами BootSect и BcdEdit.
Прямая ссылка на исходник -> http://www.topsoftzone.ru/files_soft/multiboot/multiboot_src.zip
FAQ
Q. Как скомпилировать?
A. Я использовал Microsoft 32-bit C/C++ Optimizing Compiler версии 15.00.30729.01 входящий в Microsoft Visual С++ 2008 Express Edition.
cl MultiBoot.cpp Kernel32.lib User32.lib Shell32.lib Gdi32.lib Comdlg32.lib ComCtl32.lib Version.lib AdvApi32.lib /D "_UNICODE" /D "UNICODE" /link /subsystem:windows
Требуется так же наличие Microsoft SDK. Например последний - Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (http://www.microsoft.com/downloads/details.aspx?familyid=71DEB800-C591-4F97-A900-BEA146E4FAE1&displaylang=en) на конкретную платформу (x86, x64, IA64).
Опционально можно добавить ещё ключи /MERGE:.rdata=.text /SECTION:.text,EWR
Компилировал именно с консоли (Пуск->Программы->Visual C++ 9.0 Express Edition->Visual Studio Tools->Visual Studio 2008 Command Prompt)
http://s55.radikal.ru/i150/0911/8b/b937c846669ax.jpg (http://s55.radikal.ru/i150/0911/8b/b937c846669a.png)
Так как не хотелось навязывать "Распространяемый пакет Microsoft Visual C++" (Microsoft Visual C++ Redistributable Package).
Если известно где в среде отключается данная зависимость, то прошу об этом сообщить в теме Visual C++ 9.0 и C++Builder 2007 - программы на голой винде (без .NET и тд) (http://forum.oszone.net/thread-135316.html)
Для компиляции так же годится
Visual C++ Toolkit 2003 и Visual C++ 2005 Express Edition
Q. Так может где-то есть бинарник?
A. Да есть http://soft.oszone.net/program/9336/MultiBoot/
Q. Как добавить ресурсы в выходной файл, как это сделано в бинарнике выше?
A. Нужно указать подготовленный ресурс при компиляции.
cl MultiBoot.cpp Kernel32.lib User32.lib Shell32.lib Gdi32.lib Comdlg32.lib ComCtl32.lib Version.lib AdvApi32.lib /D "_UNICODE" /D "UNICODE" /link /subsystem:windows MultiBoot.res
Q. А как подготовить ресурс файл?
A. Для этого в блокноте пишем следующие строки
BootSect.exe RCDATA bootsect.exe
BcdEdit.exe RCDATA bcdedit.exe
сохраняем файл, например под именем MultiBoot.rc. Дальше понадобится компилятор ресурсов. Например Microsoft Windows Resource Compiler (http://msdn.microsoft.com/en-us/library/aa381042(VS.85).aspx). Можно найти в составе SDK.
В консоли заходим в папку с RC и пишем такую команду
rc -r -DWIN32 MultiBoot.rc
Если требуется, указываем полный путь к MultiBoot.rc. В результате получаем MultiBoot.res файл.
Q. Ну а как быть с манифестом, его ведь тоже можно разместить в ресурсах?
A. Да можно, для этого есть специализированная утилита mt (Manifest Tool), входящая в SDK.
mt.exe" -manifest MultiBoot_with_res.exe.manifest -outputresource:MultiBoot_with_res.exe;1
В результате манифест разместится в ресурсах.
Так же есть возможность разместить и через компилятор ресурсов, для этого пишем или дописываем выше начатый RC файл
1 24 DISCARDABLE MultiBoot.exe.manifest
и проделываем действия из ответа выше.
Q. Как собрать х64 версию бинарника?
A. Алгоритм сбора непосредственно в средстве разработке мне неизвестный. Попробуйте узнать например через тему Компиляция кода в VS 2005 для Win x64 (http://forum.oszone.net/thread-124058.html)
При установленной SDK это можно сделать следующим образом
идём в Start Menu->Programs->Microsoft Windows SDK v6.1->CMD Shell (путь может отличатся, в зависимости от установленной версии SDK) задаём переменные среды setenv /Release /x64 /xp (setenv имя батника, может быть другим в конкретной версии SDK) компилируем по командам выше. При компиляции версии с ресурсами есть нюанс – нужно явно задать платформу - /MACHINE:X64
cl MultiBoot.cpp Kernel32.lib User32.lib Shell32.lib Gdi32.lib Comdlg32.lib ComCtl32.lib Version.lib AdvApi32.lib /D "_UNICODE" /D "UNICODE" /link /subsystem:windows /MACHINE:x64 ..\MultiBoot_x64.res /MERGE:.rdata=.text /SECTION:.text,EWR /OUT:MultiBoot_with_res_x64.exe
Q. Где бы ещё что-то почитать по данному коду? Может есть какие-нибудь источники?
A. Да, конечно. Вот список руководств по WIN32 (на английском)
Forger's Win32 API Tutorials (http://www.winprog.org/tutorial/)
The Winapi (C Win32 API, No MFC) tutorial (http://zetcode.com/tutorials/winapi/)
Damb - Tutorials (http://damb.dk/tutorial.php)
Пример работы с GetVersion (http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2006-01/msg00151.html) в программу вошёл практически без изменений.
Связанная тема Прозрачный STATIC текст (http://forum.oszone.net/thread-87182.html)
Q. Могу ли я использовать код в своих программах?
A. Да, конечно. Cпециально для участников и гостей конференции OSZone.net
Найдёте баг - дайте знать. Есть предложение, не стесняйтесь.
Темы подкатегории Example, предложены участником hasherfrog.
Тема построена по аналогии с этой (http://forum.oszone.net/post-205023.html#post205023).
Прямая ссылка на исходник -> http://www.topsoftzone.ru/files_soft/multiboot/multiboot_src.zip
FAQ
Q. Как скомпилировать?
A. Я использовал Microsoft 32-bit C/C++ Optimizing Compiler версии 15.00.30729.01 входящий в Microsoft Visual С++ 2008 Express Edition.
cl MultiBoot.cpp Kernel32.lib User32.lib Shell32.lib Gdi32.lib Comdlg32.lib ComCtl32.lib Version.lib AdvApi32.lib /D "_UNICODE" /D "UNICODE" /link /subsystem:windows
Требуется так же наличие Microsoft SDK. Например последний - Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (http://www.microsoft.com/downloads/details.aspx?familyid=71DEB800-C591-4F97-A900-BEA146E4FAE1&displaylang=en) на конкретную платформу (x86, x64, IA64).
Опционально можно добавить ещё ключи /MERGE:.rdata=.text /SECTION:.text,EWR
Компилировал именно с консоли (Пуск->Программы->Visual C++ 9.0 Express Edition->Visual Studio Tools->Visual Studio 2008 Command Prompt)
http://s55.radikal.ru/i150/0911/8b/b937c846669ax.jpg (http://s55.radikal.ru/i150/0911/8b/b937c846669a.png)
Так как не хотелось навязывать "Распространяемый пакет Microsoft Visual C++" (Microsoft Visual C++ Redistributable Package).
Если известно где в среде отключается данная зависимость, то прошу об этом сообщить в теме Visual C++ 9.0 и C++Builder 2007 - программы на голой винде (без .NET и тд) (http://forum.oszone.net/thread-135316.html)
Для компиляции так же годится
Visual C++ Toolkit 2003 и Visual C++ 2005 Express Edition
Q. Так может где-то есть бинарник?
A. Да есть http://soft.oszone.net/program/9336/MultiBoot/
Q. Как добавить ресурсы в выходной файл, как это сделано в бинарнике выше?
A. Нужно указать подготовленный ресурс при компиляции.
cl MultiBoot.cpp Kernel32.lib User32.lib Shell32.lib Gdi32.lib Comdlg32.lib ComCtl32.lib Version.lib AdvApi32.lib /D "_UNICODE" /D "UNICODE" /link /subsystem:windows MultiBoot.res
Q. А как подготовить ресурс файл?
A. Для этого в блокноте пишем следующие строки
BootSect.exe RCDATA bootsect.exe
BcdEdit.exe RCDATA bcdedit.exe
сохраняем файл, например под именем MultiBoot.rc. Дальше понадобится компилятор ресурсов. Например Microsoft Windows Resource Compiler (http://msdn.microsoft.com/en-us/library/aa381042(VS.85).aspx). Можно найти в составе SDK.
В консоли заходим в папку с RC и пишем такую команду
rc -r -DWIN32 MultiBoot.rc
Если требуется, указываем полный путь к MultiBoot.rc. В результате получаем MultiBoot.res файл.
Q. Ну а как быть с манифестом, его ведь тоже можно разместить в ресурсах?
A. Да можно, для этого есть специализированная утилита mt (Manifest Tool), входящая в SDK.
mt.exe" -manifest MultiBoot_with_res.exe.manifest -outputresource:MultiBoot_with_res.exe;1
В результате манифест разместится в ресурсах.
Так же есть возможность разместить и через компилятор ресурсов, для этого пишем или дописываем выше начатый RC файл
1 24 DISCARDABLE MultiBoot.exe.manifest
и проделываем действия из ответа выше.
Q. Как собрать х64 версию бинарника?
A. Алгоритм сбора непосредственно в средстве разработке мне неизвестный. Попробуйте узнать например через тему Компиляция кода в VS 2005 для Win x64 (http://forum.oszone.net/thread-124058.html)
При установленной SDK это можно сделать следующим образом
идём в Start Menu->Programs->Microsoft Windows SDK v6.1->CMD Shell (путь может отличатся, в зависимости от установленной версии SDK) задаём переменные среды setenv /Release /x64 /xp (setenv имя батника, может быть другим в конкретной версии SDK) компилируем по командам выше. При компиляции версии с ресурсами есть нюанс – нужно явно задать платформу - /MACHINE:X64
cl MultiBoot.cpp Kernel32.lib User32.lib Shell32.lib Gdi32.lib Comdlg32.lib ComCtl32.lib Version.lib AdvApi32.lib /D "_UNICODE" /D "UNICODE" /link /subsystem:windows /MACHINE:x64 ..\MultiBoot_x64.res /MERGE:.rdata=.text /SECTION:.text,EWR /OUT:MultiBoot_with_res_x64.exe
Q. Где бы ещё что-то почитать по данному коду? Может есть какие-нибудь источники?
A. Да, конечно. Вот список руководств по WIN32 (на английском)
Forger's Win32 API Tutorials (http://www.winprog.org/tutorial/)
The Winapi (C Win32 API, No MFC) tutorial (http://zetcode.com/tutorials/winapi/)
Damb - Tutorials (http://damb.dk/tutorial.php)
Пример работы с GetVersion (http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2006-01/msg00151.html) в программу вошёл практически без изменений.
Связанная тема Прозрачный STATIC текст (http://forum.oszone.net/thread-87182.html)
Q. Могу ли я использовать код в своих программах?
A. Да, конечно. Cпециально для участников и гостей конференции OSZone.net
Найдёте баг - дайте знать. Есть предложение, не стесняйтесь.
Темы подкатегории Example, предложены участником hasherfrog.
Тема построена по аналогии с этой (http://forum.oszone.net/post-205023.html#post205023).