Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - C/C++|Example|Программа для восстановления загрузчиков Windows Vista и Windows 7

Ответить
Настройки темы
Win32 API - C/C++|Example|Программа для восстановления загрузчиков Windows Vista и Windows 7

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Данная программа представляет собой GUI оболочку над системными утилитами BootSect и BcdEdit.

Прямая ссылка на исходник -> http://www.topsoftzone.ru/files_soft...tiboot_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 на конкретную платформу (x86, x64, IA64).
Опционально можно добавить ещё ключи /MERGE:.rdata=.text /SECTION:.text,EWR
Компилировал именно с консоли (Пуск->Программы->Visual C++ 9.0 Express Edition->Visual Studio Tools->Visual Studio 2008 Command Prompt)

Так как не хотелось навязывать "Распространяемый пакет Microsoft Visual C++" (Microsoft Visual C++ Redistributable Package).
Если известно где в среде отключается данная зависимость, то прошу об этом сообщить в теме Visual C++ 9.0 и C++Builder 2007 - программы на голой винде (без .NET и тд)

Для компиляции так же годится
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. Можно найти в составе 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
При установленной 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
The Winapi (C Win32 API, No MFC) tutorial
Damb - Tutorials

Пример работы с GetVersion в программу вошёл практически без изменений.
Связанная тема Прозрачный STATIC текст

Q. Могу ли я использовать код в своих программах?
A. Да, конечно. Cпециально для участников и гостей конференции OSZone.net
Найдёте баг - дайте знать. Есть предложение, не стесняйтесь.

Темы подкатегории Example, предложены участником hasherfrog.
Тема построена по аналогии с этой.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:45, 19-11-2009

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - C/C++|Example|Программа для восстановления загрузчиков Windows Vista и Windows 7

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Программы - Windows 7 Стиль для Windows Vista. ( Theme Windows7 for Vista) genuge Оформление Windows 11/ 10 / 8 / 7 / Vista 9 03-02-2017 14:28
Разное - Восстановление файлов после восстановления Windows Vista Sjova Microsoft Windows Vista 0 07-07-2008 13:58
Восстановление - Программы для восстановления состояния Windows XP ShaRP Программное обеспечение Windows 14 17-04-2008 19:45
[решено] Необходима программа для восстановления исходной информации Smasher_go Программное обеспечение Windows 3 26-10-2007 20:07
Программа для сохранения и последующего восстановления настроек ОС TechnoTrasher Microsoft Windows NT/2000/2003 8 14-09-2006 07:40




 
Переход