استدعاء النظام الأساسي اعتبارات الأمان
Assert، Deny، و PermitOnlyالأعضاء SecurityActionيشار إليها بقائمة تعداد إلى ك مكدس تقود معدلات . يتم تجاهل هؤلاء الأعضاء في حالة استخدامها كسمات مصرحة تشغيل استدعاء النظام الأساسي التعريفات والعبارات لغة تعريف واجهة COM "(IDL).
استدعاء النظام الأساسي أمثلة
استدعاء النظام الأساسي النماذج في هذا المقطع توضيح الاستخدام RegistryPermissionالسمة باستخدام مكدس تقود معدلات.
In the following code example, the SecurityAction Assert, Deny, and PermitOnly modifiers are ignored.
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.Assert, Unrestricted = true)]
private static extern bool CallRegistryPermissionAssert();
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.Deny, Unrestricted = true)]
private static extern bool CallRegistryPermissionDeny();
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.PermitOnly, Unrestricted = true)]
private static extern bool CallRegistryPermissionDeny();
ومع ذلك، Demandمعدّل في المثال التالي هو مقبول.
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
private static extern bool CallRegistryPermissionDeny();
SecurityActionمعدلات عمل بشكل صحيح إذا فإنها توضع تشغيل فئة التي تحتوي تشغيل (wraps) استدعاء النظام الأساسي المكالمة.
[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
public ref class PInvokeWrapper
{
public:
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
private static extern bool CallRegistryPermissionDeny();
};
[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
class PInvokeWrapper
{
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
private static extern bool CallRegistryPermissionDeny();
}
SecurityActionمعدلات تصلح للعمل بشكل صحيح في سيناريو متداخلة الموقع أنها توضع تشغيل المتصل من استدعاء النظام الأساسي الاستدعاء:
{
public ref class PInvokeWrapper
public:
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
private static extern bool CallRegistryPermissionDeny();
[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
public static bool CallRegistryPermission()
{
return CallRegistryPermissionInternal();
}
};
class PInvokeScenario
{
[DllImport(“MyClass.dll”, EntryPoint = “CallRegistryPermission”)]
private static extern bool CallRegistryPermissionInternal();
[RegistryPermission(SecurityAction.Assert, Unrestricted = true)]
public static bool CallRegistryPermission()
{
return CallRegistryPermissionInternal();
}
}
أمثلة توافق COM
توافق COM نماذج في هذا القسم بتوضيح استخدام RegistryPermissionتقود سمة مع المكدس المعدلات.
يلي توافق COM تجاهل تعريفات الواجهة في Assert، Deny، و PermitOnlyالمعدلات، بشكل مشابه للنظام الأساسي استدعاء الأمثلة في مقطع السابق.
[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IAssertStubsItf
{
[RegistryPermission(SecurityAction.Assert, Unrestricted = true)]
bool CallRegistryPermission();
[FileIOPermission(SecurityAction.Assert, Unrestricted = true)]
bool CallFileIoPermission();
}
[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IDenyStubsItf
{
[RegistryPermission(SecurityAction.Deny, Unrestricted = true)]
bool CallRegistryPermission();
[FileIOPermission(SecurityAction.Deny, Unrestricted = true)]
bool CallFileIoPermission();
}
[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IAssertStubsItf
{
[RegistryPermission(SecurityAction.PermitOnly, Unrestricted = true)]
bool CallRegistryPermission();
[FileIOPermission(SecurityAction.PermitOnly, Unrestricted = true)]
bool CallFileIoPermission();
}
بالإضافة إلى ذلك، Demandعدم قبول التعديل في وحدات السيناريو إعلان الواجهة إمكانية التشغيل المتداخل COM، كـ هو موضح في المثال التالي.
[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IDemandStubsItf
{
[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
bool CallRegistryPermission();
[FileIOPermission(SecurityAction.Demand, Unrestricted = true)]
bool CallFileIoPermission();
}
راجع أيضًا:
المرجع
المبادئ
قم بإنشاء النماذج الأولية في تعليمات برمجية المدارة
التي تستخدم دالات DLL غير مدار