此规则表明P / Invokes不应公开。我的问题是为什么?调用者可以在自己的程序集中轻松创建自己的声明,以进行完全相同的调用。调用者可以编写一个C库来调用API。通过将这些声明置于内部获得了什么好处,安全性或其他方面?
答案 0 :(得分:11)
嗯,在.NET安全模型中,你的程序集可能有权进行P / Invokes,但是你的调用者不能拥有。 (AllowPartiallyTrustedCallersAttribute允许以部分信任的方式运行的代码调用完全受信任的程序集,以便启用此功能。)
基本上,当您编写的库存在时,您希望对某些系统工具提供安全访问或有限访问,而您不希望某种类型的沙盒应用程序具有任意访问权限。
另一方面,这是礼貌和安全。 P / Invokes事实上是不安全的,因为严重地调用它们会导致各种有趣的崩溃方式,而这些方法通常不会在舒适的.NET世界中遇到。围绕它们包含一些错误检查和一般安全代码,以及将输入数据分解为Win32 API(或其他任何)格式,将其错误代码转换为适当的.NET异常等等,这些都很简单礼貌地提供给图书馆的未来用户,IMO。