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

Arn*_* F. 13 c# interop

我实现了这个函数:GetSystemPowerStatusExGetSystemPowerStatusEx2

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

我迷路了...

感谢帮助.

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

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

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

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

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

Han*_*ant 9

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

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

  • 使用NativeMethods.直到你找到一个*真正*很好的理由来应用这些属性.当微软聘请你的时候. (7认同)