Как предотвратить ошибку SxS при запуске приложения из виртуального пути? - PullRequest
0 голосов
/ 23 марта 2010

В настоящее время я работаю над простым уровнем виртуализации приложений, виртуализируя все операции с файлами / реестром на уровне NtDll.dll.

Но когда я запускаю приложение из виртуального пути, и если виртуальный путь не существует на реальном узле, приложение не запускается.

Вот пример
Если базовый путь виртуальной файловой системы - H: \ VirtualFS, а H: \ VirtualFS \ c \ folder \ file.exe соответствует c: \ folder \ file.exe. Если я запускаю этот exe-файл из уровня виртуализации и если в хост-системе есть папка c: \ folder, то я могу правильно запустить file.exe. Если в операционной системе хоста отсутствует папка c: \ folder, запуск приложения завершится неудачно из-за ошибки SxS, и вот ошибка

     Generate Activation Context failed for c:\folder\file.exe. Reference error message: The operation completed successfully.

Я даже пытался переопределить функцию RTCreateProcessParameters, чтобы отобразить виртуальный путь в реальный путь, но все еще сохраняется та же ошибка.

Любая помощь / руководство будет действительно полезным. Спасибо.

1 Ответ

0 голосов
/ 24 ноября 2010

Hooking ntdll.dll, конечно, не поддерживается, но причина появления ошибок заключается в том, что путь не читается из контекста процесса. Вместо этого контексты активации генерируются из манифестов путем делегирования внешней службе, которая, вероятно, не затронет ваш уровень виртуализации. Могу ли я предложить вам взглянуть на фильтры файловой системы?

...