当前位置: 首页 > 编程语言 > C#

如何知道本地方法是安全的还是不安全的?分享

时间:2023-04-10 14:53:06 C#

如何知道native方法是安全的还是不安全的?我实现了这个功能:GetSystemPowerStatusEx和GetSystemPowerStatusEx2根据MSDN上的这篇文章,我应该创建一个根据我将使用的功能命名的类,但我的问题是:我怎么知道我应该把哪个类放在GetSystemPowerStatusEx和GetSystemPowerStatusEx2中?我迷路了...感谢您的帮助。[编辑]我的问题是:这三个类名中哪个对我有好处(NativeMethods/SafeNativeMethods/UnsafeNativeMethods)?这些方法应属于以下类之一:NativeMethods–此类不抑制非托管代码权限的堆栈遍历。(System.Security.SuppressUnmanagedCodeSecurityAttribute不能应用于此类。)此类适用于可在任何地方使用的方法,因为将执行堆栈遍历。SafeNativeMethods–此类不允许堆栈遍历非托管代码权限。(System.Security.SuppressUnmanagedCodeSecurityAttribute适用于此类。)此类适用于任何人都可以安全调用的方法。这些方法的调用者不需要执行完整的安全审查来确保使用安全,因为这些方法对任何调用者都是无害的。UnsafeNativeMethods–此类禁止非托管代码权限的堆栈遍历。(System.Security.SuppressUnmanagedCodeSecurityAttribute适用于此类。)此类适用于具有潜在危险的方法。这些方法的任何调用者都必须执行完整的安全检查以确保使用是安全的,因为不会执行堆栈遍历。这是一个非常愚蠢的警告,最终没有任何效果。但让它开心很简单,只需将一个名为NativeMethods的静态类添加到您的项目中,并将[DllImport]声明放入其中。不需要单独的课程。将它们声明为internal。请注意,您不能在模拟器上调用这些函数,测试它们需要在设备上运行它。要使程序在模拟器中可调试,请确保使用#ifdefDEBUG包装调用它们的代码。只需将它们声明为静态类中的静态方法即可;这是标准方式。编辑:正如评论者指出的那样,它们也可以放在非静态类中。本质上,只要您的Win32方法是具有DLLImport属性的静态外部方法,它们就可以在任何类中使用。将它们放在您将它们用作静态方法的类中,然后用常规方法包装它们,这样您就不会干扰应用程序的其余部分,因为它涉及一些外部因素。我使用这种方法,它永远不会失败。编辑:看看这个:http://pinvoke.net/search.aspx?search=GetSystemPowerStatusEx以上是C#学习教程:HowdoIknowifanativemethodissafe/unsafe?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: