Architecture Net


         

После возврата из него запрет


void OurCode(lUserCode *code)
{
UlPermission *uiPerm = new UlPermission(
PermissionState::Unrestricted); // Неограниченный
FilelOPermission *fileIOPerm = new FilelOPermission(
PermissionState::Unrestricted); // Неограниченный PermissionSet
*ps =
new PermissionSet(PermissionState::None);
ps->AddPermission(uiPerm) ;
ps->AddPermission(filelOPerm);
ps->Deny();
Console::WriteLine("Permissions denied."); // "Разрешения запрещены."
return;
}

Потом вызывается "сторонний" код. После возврата из него запрет разрешения отменяется и снова вызывается "сторонний" код.

int v = code->PotentialRogueCode();
CodeAccessPermission::RevertDeny();
Console::WriteLine("Permissions allowed.") ;
// "Разрешения позволены."
v = code->PotentialRogueCode() ;

При первом вызове PotentialRogueCode выполнение кода завершается аварийно, а при. втором — успешно. Каждый фрейм в стеке может иметь только один набор разрешений для отказа. Вызывая Deny (Запретить) для набора разрешений, вы перекрываете все остальные вызовы Deny (Запретить) для этого набора в стековом фрейме.

CompEbook.ru Железо, дизайн, обучение и другие


Содержание  Назад  Вперед