我正在开发一个C#项目,它为一些功能提供了一些非托管C ++代码。我发现了fxCop,它抱怨我从非托管库中包含函数的方式。
它建议使用下面解释的NativeMethods类之一:
http://msdn.microsoft.com/en-us/library/ms182161%28v=vs.80%29.aspx
我读过它,但我不能说我理解它到底是做什么以及使用它有什么好处。如果有人能够解释“这个类不会抑制非托管代码允许的堆栈遍历”的含义,我会非常高兴。和“此类禁止堆栈遍历非托管代码权限。”
编辑:我真正想知道它是如何影响我的代码的。我已经阅读了它在MSDN上所说的内容,显然这对某些人来说已经足够了解,但对我来说理解得太高了。这就是为什么我要求一些细节。
答案 0 :(得分:1)
本文的Visual Studio 2012版本包含更多解释,
http://msdn.microsoft.com/en-us/library/ms182161(v=vs.110).aspx
要修复违反此规则的问题,请将方法移至相应的位置 NativeMethods类。对于大多数应用程序,将P / Invokes移动到新的 名为NativeMethods的类就足够了。
但是,如果您正在开发用于其他库的库 应用程序,您应该考虑定义其他两个类 称为SafeNativeMethods和UnsafeNativeMethods。这些课程 类似于NativeMethods类;但是,它们的标记是使用a 名为SuppressUnmanagedCodeSecurityAttribute的特殊属性。什么时候 应用此属性后,运行时不会执行完整堆栈 步行以确保所有调用者都具有UnmanagedCode权限。 运行时通常在启动时检查此权限。因为 检查没有执行,它可以大大提高性能 调用这些非托管方法,它还启用了具有的代码 调用这些方法的权限有限。
但是,您应该非常谨慎地使用此属性。它可以有 如果实施不当,会产生严重的安全隐患。
有关如何实现这些方法的信息,请参阅 NativeMethods示例,SafeNativeMethods示例和 UnsafeNativeMethods示例。