4

可能重复:
类 NativeMethods 是否在 .NET 中专门处理?

我正在开发一个 C# 项目,该项目为某些功能调用了一些非托管 C++ 代码。我发现了 fxCop,它抱怨我包含非托管库中的函数的方式。

它建议使用此处解释的 NativeMethods 类之一:

http://msdn.microsoft.com/en-us/library/ms182161%28v=vs.80%29.aspx

我读过它,但我不能说我理解它的确切作用以及使用它的好处。如果有人可以向我解释“此类不会抑制堆栈遍历以获得非托管代码权限”的含义,我会非常高兴。和“此类抑制非托管代码权限的堆栈遍历。”

编辑:我真正想知道的是它如何影响我的代码。我已经阅读了 MSDN 上的内容,显然这对某些人来说已经足够了,但对我来说太高了,我无法理解。这就是为什么我要求进行一些详细说明。

4

1 回答 1

1

本文的 Visual Studio 2012 版本包含更多解释,

http://msdn.microsoft.com/en-us/library/ms182161(v=vs.110).aspx

要修复违反此规则的行为,请将方法移至相应的 NativeMethods 类。对于大多数应用程序,将 P/Invokes 移至名为 NativeMethods 的新类就足够了。

但是,如果您正在开发用于其他应用程序的库,您应该考虑定义另外两个称为 SafeNativeMethods 和 UnsafeNativeMethods 的类。这些类类似于 NativeMethods 类;但是,它们使用称为 SuppressUnmanagedCodeSecurityAttribute 的特殊属性进行标记。应用此属性时,运行时不会执行完整的堆栈遍历以确保所有调用者都具有 UnmanagedCode 权限。运行时通常在启动时检查此权限。由于不执行检查,因此可以大大提高对这些非托管方法的调用性能,还可以使权限有限的代码能够调用这些方法。

但是,您应该非常小心地使用此属性。如果实施不正确,可能会产生严重的安全隐患。

有关如何实现这些方法的信息,请参阅 NativeMethods 示例、SafeNativeMethods 示例和 UnsafeNativeMethods 示例。

于 2012-10-05T09:07:39.450 回答