![]() |
![]() |
![]() |
Обзор | Технология | BoxedApp SDK | BoxedApp Packer | Загрузить | Купить | Поддержка | Форум | Пресс релизы | Блог ![]() |
|
Продукт: BoxedApp Packer | BoxedApp SDK
BoxedApp SDK: О Продукте | Купить! | Скачать | FAQ | Справка | История релизов
Что такое BoxedApp SDK? BoxedApp SDK - это DLL, которая предоставляет набор функций для эмуляции файловой системы и реестра для приложения. Используя эти функции, вы можетет создавать виртуальный файлы, ключи реестра, регистрировать ActiveX / OCX в виртуальном реестре, и даже внедрять .NET Runtime. Поддерживается как 32-х, так и 64-битное окружение. Доступны примеры для C++, Delphi, VB6, C#, VB.Net BoxedApp SDK поставляется в виде:
Когда это полезно
Пример Небольшой пример: программа использует Flash ActiveX для проигрывание флеш-роликов и видео. Конечный пользователь должен иметь установленный в его системе флеш-плеер (Flash ActiveX), чтобы такое приложение корректно работало. Но прав на запись в реестр у программы нету. И, болеет того, даже если предположить, что права есть, то совершенно некорретно заменять уже установленный Flash ActiveX на тот, что поставляется с программой. Как было бы чудесно, если бы можно было временно "зарегистрировать" Flash ActiveX, причем не в системном реестре, а только для одной программы, только для одного процесса. BoxedApp SDK умеет делать это! Другими словами, теперь вы можете внедрить все DLL-ки, все файлы, все ActiveX-ы, которые нужны приложению, в один единственный EXE. BoxedApp SDK не распаковывает внедренные файлы на диск, временные файлы не используются Хотите посмотреть BoxedApp SDK в действии? Загрузить демо-версию прямо сейчас! Она включает множество интересных примеров использования:
Создание виртуального файла Пример того, как создать виртуальный файл: [ 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 |