logotype


Что такое BoxedApp SDK?

BoxedApp SDK - это DLL, которая предоставляет набор функций для эмуляции файловой системы и реестра для приложения. Используя эти функции, вы можетет создавать виртуальный файлы, ключи реестра, регистрировать ActiveX / OCX в виртуальном реестре, и даже внедрять .NET Runtime.

Поддерживается как 32-х, так и 64-битное окружение.

Доступны примеры для C++, Delphi, VB6, C#, VB.Net

BoxedApp SDK поставляется в виде:

  • DLL - для любого окружения: VC++, VB6, C#, VB.Net, Delphi / Builder C++ и т.д.;
  • Статическая библиотека (только в полной версии) - для всех версий VC++;
  • OBJ file (для статической линковки) - для всех версий Delphi / Builder C++;

Когда это полезно

  • Когда приложение должно работать даже если недостаточно прав для записи в системный реестр или на диск
  • Когда приложение нуждается в DLL и файлах, которые должны быть надежно спрятаны, и поэтому не могут быть сохранены на диск
  • Когда приложение использует ActiveX, но не имеет инсталлятора, т.к. должно запускаться мгновенно, без установки (например, когда это т.н. portable-приложение, которое запускается с флеш-карты)

Пример

Небольшой пример: программа использует Flash ActiveX для проигрывание флеш-роликов и видео. Конечный пользователь должен иметь установленный в его системе флеш-плеер (Flash ActiveX), чтобы такое приложение корректно работало. Но прав на запись в реестр у программы нету. И, болеет того, даже если предположить, что права есть, то совершенно некорретно заменять уже установленный Flash ActiveX на тот, что поставляется с программой. Как было бы чудесно, если бы можно было временно "зарегистрировать" Flash ActiveX, причем не в системном реестре, а только для одной программы, только для одного процесса. BoxedApp SDK умеет делать это!

Другими словами, теперь вы можете внедрить все DLL-ки, все файлы, все ActiveX-ы, которые нужны приложению, в один единственный EXE. BoxedApp SDK не распаковывает внедренные файлы на диск, временные файлы не используются

Хотите посмотреть BoxedApp SDK в действии? Загрузить демо-версию прямо сейчас! Она включает множество интересных примеров использования:

  • Основной пример, показывающий, как внедрить и использовать DLL
  • Как включить Flash ActiveX в программу
и много других!


Возможности

Примеры использования

Создание виртуального файла

[ Скачать этот пример ]

Пример того, как создать виртуальный файл:

[ Скачать этот пример ]

[ C++ ]
HANDLE hVirtualFile = 
	BoxedAppSDK_CreateVirtualFile(
			_T("C:\\1.swf"), 
			GENERIC_READ, 
			FILE_SHARE_READ, 
			NULL, 
			CREATE_NEW, 
			0, 
			NULL);

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);

DWORD dwTemp;
WriteFile(hVirtualFile, lpData, dwSize, &dwTemp, NULL);

CloseHandle(hVirtualFile);

[ Скачать этот пример ]

Наверх | Вопросы? Задавайте!

Создание виритуального ключа реестра

[ Скачать этот пример ]

Как создать виртуальный ключ реестра:

[ Скачать этот пример ]

[ C++ ]
// Create hKey_Classes to work well even under registry reflection
HKEY hKey_Classes;
RegOpenKey(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Classes"), &hKey_Classes);

HKEY hVirtualKey;
DWORD dwDisposition;

LONG lResult = 
	BoxedAppSDK_CreateVirtualRegKey(
		hKey_Classes, 
		_T("Typelib\\{D27CDB6B-AE6D-11CF-96B8-444553540000}"), 
		0, 
		NULL, 
		REG_OPTION_NON_VOLATILE, 
		KEY_ALL_ACCESS, 
		NULL, 
		&hVirtualKey, 
		&dwDisposition
	);

	HKEY hVirtualKey__10;

lResult = 
	BoxedAppSDK_CreateVirtualRegKey(
		hKey_Classes, 
		_T("Typelib\\{D27CDB6B-AE6D-11CF-96B8-444553540000}\\1.0"), 
		0, 
		NULL, 
		REG_OPTION_NON_VOLATILE, 
		KEY_ALL_ACCESS, 
		NULL, 
		&hVirtualKey__10, 
		&dwDisposition
	);

TCHAR buf[1024] = _T("Shockwave Flash");
RegSetValueEx(hVirtualKey__10, _T(""), 0, REG_SZ, (CONST BYTE*)buf, (lstrlen(buf) + 1) * sizeof(TCHAR));

[ Скачать этот пример ]

Наверх | Вопросы? Задавайте!

Внедрение DLL

[ Скачать этот пример ]

Как загрузить DLL из памяти:

[ Скачать этот пример ]

[ C++ ]
HANDLE hFile__DLL1 = 
	BoxedAppSDK_CreateVirtualFile(
		_T("Z:\\DLL1.dll"), 
		GENERIC_WRITE, 
		FILE_SHARE_READ, 
		NULL, 
		CREATE_NEW, 
		0, 
		NULL
	);

DWORD dwTemp;
WriteFile(hFile__DLL1, pBuffer, dwSize, &dwTemp, NULL);

CloseHandle(hFile__DLL1);

// ...

HMODULE hModule = LoadLibrary(_T("Z:\\DLL1.dll"));

typedef void (WINAPI *P_Function)();
P_Function pFunction = (P_Function)GetProcAddress(hModule, "Function");

pFunction();

FreeLibrary(hModule);

[ Скачать этот пример ]

Наверх | Вопросы? Задавайте!

Внедрение ActiveX / OCX

[ Скачать этот пример ]

Как зарегистрировать ActiveX в виртуальном реестре:

[ Скачать этот пример ]

[ C++ ]
void CreateVirtualFlashOCX()
{
	LPVOID pBuffer;
	DWORD dwSize;
	LoadResourceHelper(MAKEINTRESOURCE(IDR_BIN_FLASH_OCX), _T("BIN"), pBuffer, dwSize);

	HANDLE hVirtualFile1 = 
		BoxedAppSDK_CreateVirtualFile(
			_T("C:\\Flash9e.ocx"), 
			GENERIC_READ, 
			FILE_SHARE_READ, 
			NULL, 
			CREATE_NEW, 
			0, 
			NULL);

	DWORD dwTemp;
	WriteFile(hVirtualFile1, pBuffer, dwSize, &dwTemp, NULL);

	CloseHandle(hVirtualFile1);


	BoxedAppSDK_RegisterCOMLibraryInVirtualRegistry(_T("C:\\Flash9e.ocx"));
}

[ Скачать этот пример ]

Наверх | Вопросы? Задавайте!

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

[ Скачать этот пример ]

Просто создайте виртуальный файл и вызовите любую функцию, создающую процесс:

[ Скачать этот пример ]

[ C++ ]
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);

[ Скачать этот пример ]

Наверх | Вопросы? Задавайте!

Использование виртуальной файловой системы несколькими процессами одновременно

[ Скачать этот пример ]

Несколько процессов могут иметь доступ к общей виртуальной файловой системе. Чтобы подключить сторонний процесс, используйте функцию BoxedAppSDK_AttachToProcess. Она внедряет BoxedApp SDK в указанный процесс, после чего он получает доступ к виртуальной файловой системе. Таким образом можно подключить любое число процессов.

Кроме того, можно указать BoxedApp SDK, следует ли внедряться в каждый новый процесс, который создается программой:

[ Скачать этот пример ]

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

[ Скачать этот пример ]

Наверх | Вопросы? Задавайте!

  Copyright © 2004 – 2009 Softanics. All rights reserved.
BoxedApp is a trademark of Softanics