如何知道原生方法是安全/不安全的?

我实现了这个函数: GetSystemPowerStatusEx和GetSystemPowerStatusEx2

根据MSDN上的这篇文章,我应该创建一个根据我将使用的函数命名的类,但我的问题是:我怎么知道我应该把哪个类放入GetSystemPowerStatusEx和GetSystemPowerStatusEx2?

我迷路了…

感谢帮助。

[编辑]我的问题是:这三个类名中哪一个对我来说是好的(NativeMethods / SafeNativeMethods / UnsafeNativeMethods)?

这些方法应该属于以下类之一:

NativeMethods – 此类不会抑制非托管代码权限的堆栈遍历。 (System.Security.SuppressUnmanagedCodeSecurityAttribute不能应用于此类。)此类适用于可在任何地方使用的方法,因为将执行堆栈遍历。

SafeNativeMethods – 此类禁止堆栈遍历非托管代码权限。 (System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类。)此类适用于任何人都可以安全调用的方法。 这些方法的调用者不需要执行完整的安全性审查,以确保使用是安全的,因为这些方法对任何调用者都是无害的。

UnsafeNativeMethods – 此类禁止堆栈遍历以获取非托管代码权限。 (System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类。)此类适用于潜在危险的方法。 这些方法的任何调用者都必须执行完整的安全性检查,以确保使用是安全的,因为不会执行堆栈遍历。

这是一个非常愚蠢的警告,最终没有效果。 但保持它的快乐很简单,只需在名为NativeMethods的项目中添加一个静态类,并将[DllImport]声明放入其中。 不需要单独的课程。 将它们声明为内部

请注意,您无法在模拟器上调用这些函数,测试它们需要在设备上运行它。 要使程序在模拟器中可调试,请确保使用#ifdef DEBUG包装调用它们的代码。

只需将它们声明为静态类中的静态方法; 这是标准方法。

编辑:与评论者指出的一样,它们也可以放在非静态类中。 本质上,只要你的Win32方法是带有DLLImport属性的静态extern,它们就可以在任何类中使用。

将它们放在类中,您将它们作为静态方法使用它们,然后使用常规方法将它们包裹起来,这样您就不会打扰应用程序的其余部分,因为它涉及到某些外部因素。

我使用这种方法,它永远不会失败。

编辑:

看一下这个:

http://pinvoke.net/search.aspx?search=GetSystemPowerStatusEx