BoxedApp

BoxedApp: примеры использования, советы, приемы

BoxedApp Packer 2.1 и BoxedApp SDK 2.0: новые возможности


Наконец мы выпустили новые релизы с двумя очень интересными фичами:

Запуск процесса на основе виртуального файла

Если кратко, то, создав виртуальный файл с содержимым exe, можно запускать процесс на основе этого файла:

BoxedAppSDK_Init();

HMODULE hModule = GetModuleHandle(NULL);
HRSRC hResInfo = FindResource(hModule, _T("BIN1"), _T("BIN"));
HGLOBAL hResData = LoadResource(hModule, hResInfo);
LPVOID lpData = LockResource(hResData);
DWORD dwSize = SizeofResource(hModule, hResInfo);

HANDLE hFile = 
   BoxedAppSDK_CreateVirtualFile(
      _T("app1.exe"), 
      GENERIC_WRITE, 
      FILE_SHARE_READ, 
      NULL, 
      CREATE_NEW, 
      0, 
      NULL);

DWORD temp;
WriteFile(hFile, lpData, dwSize, &temp, NULL);

CloseHandle(hFile);

ShellExecute(NULL, NULL, _T("app1.exe"), NULL, NULL, SW_SHOW);

Общая виртуальная файловая система для нескольких процессов

Прежде BoxedApp SDK был ограничен единственным процессом, однако мы получили множество запросов, суть которых сводилась к необходимости давать доступ стороннему приложению к созданным в основном процессе виртуальным файлам.

Мы доработали BoxedApp, добавив функцию BoxedAppSDK_AttachToProcess, которая внедряет BoxedApp в процесс. После внедрения процесс начинает видеть все виртуальные файлы, что созданы или создаются в основном процессе. Он может модифицировать их и т.д. Иными словами, оба процесса полностью разделяют общую виртуальную файловую систему. Можно вызвать BoxedAppSDK_AttachToProcess сразу для нескольких процессов, и все они будут иметь одну и ту же виртуальную файловую систему.

Кроме того, добавлена опция DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, которая указывает, следует ли внедрять BoxedApp в каждый дочерний процесс (по умолчанию, эта опция выключена), который создается в программе:

// да, внедрять в дочерние процессы
BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, TRUE);
...
// нет, не внедрять в дочерние процессы
BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, FALSE);

[ Загрузить демонстрационные версии ]







Написать комментарий

Вы должны залогиниться чтобы комментировать. Залогиниться