2015-11-10 50 views
0

msdn说P/Invoke方法可以安全地暴露给任何应用程序,并且没有任何副作用,应该放在名为SafeNativeMethods的类中。安全和不安全的win32方法

and P/Invoke方法不能安全地调用,并且可能导致副作用的方法应放在名为UnsafeNativeMethods的类中。

我认为这是受windows api的影响。但是我怎么知道一个方法是否被认为是安全或不安全的?

有没有这样的工具或在线参考知道?哪里写的规则,使Windows API方法安全或usnafe?

+1

它完全是任意的,在.NET Framework中的用法只反映了特定的程序员启动了源代码文件。有时候最好将参数声明为指针,而不是经常使用,所以需要* unsafe *关键字。其余的只是没关系。类名也无关紧要,微软程序员必须遵循所有.NET团队成员必须遵循的编码准则,并提醒他们使用代码分析工具使其错误。同样,请遵循* your *团队使用的准则。 –

+0

谢谢,阅读你的评论和答案就像阅读千篇一书的学习总结。 – Meska

回答

1

我认为这受到windows api的影响。

不完全是。它指的是您通过DllImport提供访问的任何本机代码。

但我怎么能找出一种方法是否被认为是安全的或不安全的?

你知道你的功能在做什么。否则,你不会使它可用。然后考虑一下,只有访问管理和安全的本地代码的恶意用户,如果还允许访问您正在查看的功能,那么这个恶意用户是否会弄糟程序(或更糟糕的情况)。

几乎没有任何函数会将指针实际暴露为指针,这些指针是不安全的,但反过来不是这样,不涉及指针的函数也可能不安全。


请注意,如果你不处理任何不信任的代码,你可以把一切都放在一个NativeMethods类,而不是担心安全或不安全。