مشاركة عبر


استدعاء النظام الأساسي اعتبارات الأمان

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();
}

راجع أيضًا:

المرجع

SecurityAction

المبادئ

أذونات أمان

قم بإنشاء النماذج الأولية في تعليمات برمجية المدارة

التي تستخدم دالات DLL غير مدار

موارد أخرى

interoperating مع تعليمات برمجية مدارة

إمكانية التشغيل المتداخل