【发布时间】:2010-09-26 03:36:55
【问题描述】:
我刚看到这个问题:
Understanding .NET’s “SecurityAction” parameter for permissions
我有一个问题。使用以下代码:
private void button1_Click(object sender, EventArgs e)
{
Layer1();
MessageBox.Show("OK");
}
private void Layer1()
{
try
{
Layer2();
}
catch (SecurityException)
{
MessageBox.Show("Caught");
}
Layer2b();
}
private void Layer2()
{
new System.Security.Permissions.FileIOPermission(PermissionState.Unrestricted).Deny();
GC.Collect();
Layer3();
}
private void Layer2b()
{
Layer3();
}
[FileIOPermission(SecurityAction.LinkDemand, Write=@"C:\temp")]
private void Layer3()
{
using (FileStream stream = new FileStream(@"C:\temp\test.txt", FileMode.Create))
{
}
}
为什么代码在调用Layer2 时会产生安全异常?如何处理权限对象,我想垃圾收集器会销毁该对象,因为我没有对它的活动引用,但是代码说 Caught,然后 好的,很明显,权限拒绝对通过 Layer2 的调用有效。
什么给了?我错过了什么?当谈到 .NET 中的安全/权限系统时,我承认自己是一个完全的初学者,所以如果这个问题真的很基础,请原谅我。
这样的安全许可/拒绝是否会标记堆栈或其他东西?否则,为什么对 Layer2b 无效?这是同一个线程,很明显,虽然它没有被垃圾收集杀死,但它会在某个时候被删除/销毁/清理。
【问题讨论】:
-
附带说明,您的代码中的安全异常不会由于 Layer3 方法上的 LinkDemand 而发生。它是由于 FileStream 类中的需求而发生的。 LinkDemands 不受 Deny(或 Assert 或 PermitOnly)的影响。
-
对....好吧...猜猜这是我去寻找一个很好的信息来源的线索。谢谢!
标签: .net security file-permissions