<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>BoxedApp &#187; BoxedApp SDK Release</title>
	<atom:link href="http://www.boxedapp.ru/blog/category/boxedapp-sdk-release/feed/" rel="self" type="application/rss+xml" />
	<link>http://boxedapp.ru/blog</link>
	<description>BoxedApp: примеры использования, советы, приемы</description>
	<pubDate>Tue, 16 Jun 2009 15:47:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>BoxedApp SDK 2.1, BoxedApp Packer 2.2</title>
		<link>http://boxedapp.ru/blog/2009/06/16/boxedapp-sdk-21-boxedapp-packer-22/</link>
		<comments>http://boxedapp.ru/blog/2009/06/16/boxedapp-sdk-21-boxedapp-packer-22/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 15:47:20 +0000</pubDate>
		<dc:creator>Artem A. Razin</dc:creator>
		
		<category><![CDATA[BoxedApp Packer]]></category>

		<category><![CDATA[BoxedApp Packer Release]]></category>

		<category><![CDATA[BoxedApp SDK]]></category>

		<category><![CDATA[BoxedApp SDK Release]]></category>

		<category><![CDATA[C++]]></category>

		<category><![CDATA[Delphi]]></category>

		<category><![CDATA[examples]]></category>

		<category><![CDATA[примеры]]></category>

		<guid isPermaLink="false">http://boxedapp.ru/blog/?p=13</guid>
		<description><![CDATA[Выпущены новый версии продуктов линейки BoxedApp: BoxedApp SDK 2.1, BoxedApp Packer 2.2.
[ Загрузить демо версии ]


Кратко о том, что сделано:

Редактор виртуального реестра в BoxedApp Packer
API для перехвата функций
Мелкие доработки


Редактор виртуального реестра в BoxedApp Packer
Прежде вся работа с виртуальным реестром проводилась в пользовательских плагинах. Если требовалось создать даже один виртуальный ключ реестра - надо было писать [...]]]></description>
			<content:encoded><![CDATA[<p>Выпущены новый версии продуктов линейки BoxedApp: BoxedApp SDK 2.1, BoxedApp Packer 2.2.<br />
<a href = "/download.html" target = "_blank"><b>[ Загрузить демо версии ]</b></a><br />
<a name = "post_begin"></a><br />
<span id="more-13"></span><br />
Кратко о том, что сделано:</p>
<ul>
<li><a href = "#virtual_registry_editor">Редактор виртуального реестра в BoxedApp Packer</a></li>
<li><a href = "#hooks">API для перехвата функций</a></li>
<li><a href = "#minor_changes">Мелкие доработки</a></li>
</ul>
<p><a name = "virtual_registry_editor"></a><br />
<h2>Редактор виртуального реестра в BoxedApp Packer</h2>
<p>Прежде вся работа с виртуальным реестром проводилась в пользовательских плагинах. Если требовалось создать даже один виртуальный ключ реестра - надо было писать плагин, который использует функции <a href = "http://boxedapp.com/boxedapppacker/help/index/plugin_api.html" target = "_blank">BoxedApp SDK</a>.</p>
<p>Теперь BoxedApp Packer содержит полноценный редактор виртуального реестра. Буквально за пару кликов можно создать требуемые виртуальные ключи и задать значения параметров.</p>
<p><small><a href = "#post_begin">[ назад к списку изменений ]</a></small><br />
<a name = "hooks"></a><br />
<h2>API для перехвата функций</h2>
<p>Для создания виртуальной файловой системы / реестра BoxedApp SDK (приложения, созданные BoxedApp Packer, кстати, используют именно его) использует технику перехвата системных функций. Несколько оригинальных идей позволили сделать систему перехвата совместимой с любым окружением, и теперь та часть SDK, которая отвечает за перехват, стала доступна для разработчиков - пользователей SDK.</p>
<p>Теперь BoxedApp SDK может рассматриваться как полноценная альтернатива <a href = "http://research.microsoft.com/en-us/projects/detours/" target = "_blank">Detours</a> от Microsoft.</p>
<p>Напомним, что BoxedApp SDK поддерживает как 32-битное, так и 64-битное окружение, а также может быть статически прилинкован к приложениям, использующим VC++ / Delphi любых версий. И, конечно же, SDK может быть использован в любой программной среде, которая поддерживает использование DLL.</p>
<p>Пара примеров на C++ и Delphi, блокирующих возможность создания и открытия файла с названием &#8220;1.txt&#8221;:</p>
<pre name="code" class="cpp" cols="60" rows="10">
typedef HANDLE (WINAPI *P_CreateFileW)(
	LPCWSTR lpFileName,
	DWORD dwDesiredAccess,
	DWORD dwShareMode,
	LPSECURITY_ATTRIBUTES lpSecurityAttributes,
	DWORD dwCreationDisposition,
	DWORD dwFlagsAndAttributes,
	HANDLE hTemplateFile);
P_CreateFileW g_pCreateFileW;

HANDLE WINAPI My_CreateFileW(
	LPCWSTR lpFileName,
	DWORD dwDesiredAccess,
	DWORD dwShareMode,
	LPSECURITY_ATTRIBUTES lpSecurityAttributes,
	DWORD dwCreationDisposition,
	DWORD dwFlagsAndAttributes,
	HANDLE hTemplateFile)
{
	if (0 == lstrcmpiW(lpFileName, L"1.txt"))
	{
		SetLastError(ERROR_FILE_EXISTS);
		return INVALID_HANDLE_VALUE;
	}
	else
		return g_pCreateFileW(
				lpFileName,
				dwDesiredAccess,
				dwShareMode,
				lpSecurityAttributes,
				dwCreationDisposition,
				dwFlagsAndAttributes,
				hTemplateFile);
}
...
BoxedAppSDK_Init();

PVOID pCreateFileW = GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "CreateFileW");

HANDLE hHook__CreateFileW = BoxedAppSDK_HookFunction(pCreateFileW, &#038;My_CreateFileW, TRUE);

g_pCreateFileW = (P_CreateFileW)BoxedAppSDK_GetOriginalFunction(hHook__CreateFileW);

FILE* f = fopen("1.txt", "r");

// f is NULL
...

BoxedAppSDK_UnhookFunction(hHook__CreateFileW);
</pre>
<p>Аналогичный пример на Delphi:</p>
<pre name="code" class="delphi" cols="60" rows="10">
type
TCreateFileW = 
   function(lpFileName: PWideChar;
            dwDesiredAccess, dwShareMode: Integer;
            lpSecurityAttributes: PSecurityAttributes;
            dwCreationDisposition, dwFlagsAndAttributes: DWORD;
            hTemplateFile: THandle): THandle; stdcall;

var
   OriginalCreateFileW: TCreateFileW;

function My_CreateFileW(
         lpFileName: PWideChar;
         dwDesiredAccess, dwShareMode: Integer;
         lpSecurityAttributes: PSecurityAttributes;
         dwCreationDisposition, dwFlagsAndAttributes: DWORD;
         hTemplateFile: THandle): THandle; stdcall;
begin
   if 0 = lstrcmpiW(lpFileName, '1.txt') then
   begin
      Result := INVALID_HANDLE_VALUE;
      SetLastError(ERROR_ALREADY_EXISTS);
   end
   else
      Result := 
        OriginalCreateFileW(
           lpFileName, 
           dwDesiredAccess,
           dwShareMode, 
           lpSecurityAttributes, 
           dwCreationDisposition, 
           dwFlagsAndAttributes, 
           hTemplateFile);
end;

var
   pCreateFileW: Pointer;
   hHook__CreateFileW: THandle;

begin
  Application.Initialize;

  BoxedAppSDK_Init;

  pCreateFileW := GetProcAddress(GetModuleHandle('kernel32.dll'), 'CreateFileW');
  hHook__CreateFileW := BoxedAppSDK_HookFunction(pCreateFileW, @My_CreateFileW, TRUE);
  OriginalCreateFileW := BoxedAppSDK_GetOriginalFunction(hHook__CreateFileW);

  // This line produces an exception because we prevent creating / opening '1.txt'
  TFileStream.Create('1.txt', fmCreate or fmOpenRead);

  BoxedAppSDK_UnhookFunction(hHook__CreateFileW);
end.
</pre>
<p><small><a href = "#post_begin">[ назад к списку изменений ]</a></small><br />
<a name = "minor_changes"></a><br />
<h2>Мелкие доработки</h2>
<ul>
<li>Добавлена поддержка флага FILE_FLAG_DELETE_ON_CLOSE для виртуальных файлов</li>
<li>Исправлены небольшие проблемы с запуском виртуальных исполняемых файлов, созданных с помощью Delphi</li>
<li>Сделана более гибкая система хранения виртуальных файлов в памяти</li>
</ul>
<p><small><a href = "#post_begin">[ назад к списку изменений ]</a></small></p>
<p><a href = "/download.html" target = "_blank"><b>[ Загрузить демо версии ]</b></a></p>
]]></content:encoded>
			<wfw:commentRss>http://boxedapp.ru/blog/2009/06/16/boxedapp-sdk-21-boxedapp-packer-22/feed/</wfw:commentRss>
		</item>
		<item>
		<title>BoxedApp SDK 2.0.1, BoxedApp Packer 2.1.1</title>
		<link>http://boxedapp.ru/blog/2009/01/31/boxedapp-sdk-201-boxedapp-packer-211/</link>
		<comments>http://boxedapp.ru/blog/2009/01/31/boxedapp-sdk-201-boxedapp-packer-211/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 11:51:15 +0000</pubDate>
		<dc:creator>Artem A. Razin</dc:creator>
		
		<category><![CDATA[BoxedApp Packer]]></category>

		<category><![CDATA[BoxedApp Packer Release]]></category>

		<category><![CDATA[BoxedApp SDK]]></category>

		<category><![CDATA[BoxedApp SDK Release]]></category>

		<guid isPermaLink="false">http://boxedapp.ru/blog/?p=11</guid>
		<description><![CDATA[В последнее время мы активно тестировали BoxedApp под новой версией Windows, Windows 7. Обнаружено несколько моментов, которые были исправлены:
[FIXED] ShellExecute не запускал виртуальные файлы корректно под Windows 7
[FIXED] Регистрация ActiveX в виртуальном реестре иногда работала некорректно под Windows 7
А также еще одно небольшое исправление:
[FIXED] Запуск множества дочерних процессов, к которым аттачится BoxedApp, приводил к утечкам [...]]]></description>
			<content:encoded><![CDATA[<p>В последнее время мы активно тестировали BoxedApp под новой версией Windows, Windows 7. Обнаружено несколько моментов, которые были исправлены:</p>
<p>[FIXED] ShellExecute не запускал виртуальные файлы корректно под Windows 7<br />
[FIXED] Регистрация ActiveX в виртуальном реестре иногда работала некорректно под Windows 7</p>
<p>А также еще одно небольшое исправление:</p>
<p>[FIXED] Запуск множества дочерних процессов, к которым аттачится BoxedApp, приводил к утечкам памяти и дескрипторов.</p>
<p>Новая фича BoxedApp Packer&#8217;а:</p>
<p>[NEW] <a href = "/boxedapppacker/help/index/overview/virtual_path.html" target = "_blank">В виртуальном пути можно указывать переменные окружения.</a></p>
<p><a href = "/download.html" target = "_blank"><b>[ Загрузить демо версии ]</b></a></p>
]]></content:encoded>
			<wfw:commentRss>http://boxedapp.ru/blog/2009/01/31/boxedapp-sdk-201-boxedapp-packer-211/feed/</wfw:commentRss>
		</item>
		<item>
		<title>BoxedApp Packer 2.1 и BoxedApp SDK 2.0: новые возможности</title>
		<link>http://boxedapp.ru/blog/2009/01/26/boxedapppacker_2_1_boxedappsdk_2_0/</link>
		<comments>http://boxedapp.ru/blog/2009/01/26/boxedapppacker_2_1_boxedappsdk_2_0/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 19:27:02 +0000</pubDate>
		<dc:creator>Artem A. Razin</dc:creator>
		
		<category><![CDATA[BoxedApp Packer]]></category>

		<category><![CDATA[BoxedApp Packer Release]]></category>

		<category><![CDATA[BoxedApp SDK]]></category>

		<category><![CDATA[BoxedApp SDK Release]]></category>

		<category><![CDATA[C++]]></category>

		<category><![CDATA[examples]]></category>

		<category><![CDATA[примеры]]></category>

		<guid isPermaLink="false">http://boxedapp.ru/blog/?p=10</guid>
		<description><![CDATA[Наконец мы выпустили новые релизы с двумя очень интересными фичами:

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



Запуск процесса на основе виртуального файла
Если кратко, то, создав виртуальный файл с содержимым exe, можно запускать процесс на основе этого файла:

BoxedAppSDK_Init();

HMODULE hModule = GetModuleHandle(NULL);
HRSRC hResInfo = FindResource(hModule, _T("BIN1"), _T("BIN"));
HGLOBAL hResData = LoadResource(hModule, hResInfo);
LPVOID lpData = [...]]]></description>
			<content:encoded><![CDATA[<p>Наконец мы выпустили новые релизы с двумя очень интересными фичами:</p>
<ul>
<li><a href = "#virtual_process">запуск процесса на основе виртуального файла</a></li>
<li><a href = "#shared_env">общая виртуальная файловая система для нескольких процессов</a></li>
</ul>
<p><span id="more-10"></span></p>
<p><a name = "virtual_process"></a></p>
<h3>Запуск процесса на основе виртуального файла</h3>
<p>Если кратко, то, создав виртуальный файл с содержимым exe, можно запускать процесс на основе этого файла:</p>
<pre name="code" class="cpp" cols="60" rows="10">
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, &#038;temp, NULL);

CloseHandle(hFile);

ShellExecute(NULL, NULL, _T("app1.exe"), NULL, NULL, SW_SHOW);
</pre>
</p>
<p><a name = "shared_env"></a></p>
<h3>Общая виртуальная файловая система для нескольких процессов</h3>
<p>Прежде BoxedApp SDK был ограничен единственным процессом, однако мы получили множество запросов, суть которых сводилась к необходимости давать доступ стороннему приложению к созданным в основном процессе виртуальным файлам.</p>
<p>Мы доработали BoxedApp, добавив функцию <a href = "http://boxedapp.com/boxedappsdk/help/index/functions/boxedappsdk_attachtoprocess.html" target = "_blank">BoxedAppSDK_AttachToProcess</a>, которая внедряет BoxedApp в процесс. После внедрения процесс начинает видеть все виртуальные файлы, что созданы или создаются в основном процессе. Он может модифицировать их и т.д. Иными словами, оба процесса полностью разделяют общую виртуальную файловую систему. Можно вызвать BoxedAppSDK_AttachToProcess сразу для нескольких процессов, и все они будут иметь одну и ту же виртуальную файловую систему.</p>
<p>Кроме того, добавлена опция DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, которая указывает, следует ли внедрять BoxedApp в каждый дочерний процесс (<b>по умолчанию, эта опция выключена</b>), который создается в программе:</p>
<pre name="code" class="cpp" cols="60" rows="10">
// да, внедрять в дочерние процессы
BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, TRUE);
...
// нет, не внедрять в дочерние процессы
BoxedAppSDK_EnableOption(DEF_BOXEDAPPSDK_OPTION__EMBED_BOXEDAPP_IN_CHILD_PROCESSES, FALSE);
</pre>
</p>
<p><a href = "/download.html" target = "_blank"><b>[ Загрузить демонстрационные версии ]</b></a></p>
]]></content:encoded>
			<wfw:commentRss>http://boxedapp.ru/blog/2009/01/26/boxedapppacker_2_1_boxedappsdk_2_0/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

