Обзор системы: [native_app] <---> [доверенная сборка начальной загрузки] <---> [ненадежные сборки управляемых приложений]
Я хочу, чтобы из программы начальной загрузки была возможность p / invoke сделать обернутые вызовы нативных классов в наше нативное приложение, но только p / вызывает здесь.
Я хочу, чтобы ненадежные управляемые приложения блокировались, если они пытаются что-то предпринять.
Создал пользовательский AppDomain и настроил его по мере необходимости.
Загрузите наш загрузчик и ненадежное тестовое приложение, которое ссылается на него, работающее в пользовательском домене приложений.
// Домен, настроенный в следующем коде C ++ / CLI
HRESULT SecureAppDomain_Configure()
{
AppDomainSetup ^ads = gcnew AppDomainSetup();
ads->DisallowCodeDownload = true;
ads->ApplicationBase = "path_to_my_app";
ads->PrivateBinPath = nullptr;
System::String ^bootstrap_path = path_to_my_bootstrap;
PermissionSet ^ps = gcnew PermissionSet(PermissionState::None);
ps->AddPermission(gcnew SecurityPermission(SecurityPermissionFlag::Execution));
Blob b;
array<System::Byte>^public_key;
bool ok = b.Create(public_key, "b1aab1aab1aa");
if (!ok)
return S_FALSE;
System::Security::Permissions::StrongNamePublicKeyBlob ^_public_key = gcnew System::Security::Permissions::StrongNamePublicKeyBlob(public_key);
System::Version ^version = gcnew System::Version("1.0.0.0");
String ^trusted_assembly_path = bootstrap_path;
StrongName ^trusted = gcnew StrongName(_public_key, trusted_assembly_path, version);
// Set up the Evidence
Evidence ^evidence = gcnew Evidence();
evidence->AddHostEvidence(gcnew Zone(SecurityZone::Internet));
m_domain = AppDomain::CreateDomain("my_sandbox", evidence, ads, ps, trusted);
// Assign resolver.
AppDomain::CurrentDomain->AssemblyResolve += gcnew ResolveEventHandler(Resolve_EventHandler);
return S_OK;
}
Ожидаемые результаты. Ненадежное приложение должно быть заблокировано (исключение возбуждено), когда оно пытается выполнить p / invoke.
Текущие результаты: как наши загрузочные, так и ненадежные сборки приложений, которые ссылаются на него, могут p / invoke.