【问题标题】:.NET Framework FxCop rule CA1401 PInvokesShouldNotBeVisible rule - why does this rule exist?.NET Framework FxCop 规则 CA1401 PInvokesShouldNotBeVisible 规则 - 为什么存在此规则?
【发布时间】:2023-05-16 06:55:02
【问题描述】:

此规则表明不应公开 P/Invokes。我的问题是为什么?调用者可以在自己的程序集中轻松地创建自己的声明以进行完全相同的调用。调用者可以只编写一个 C 库来调用 API。通过在内部进行这些声明可以获得什么好处、安全性或其他方面?

【问题讨论】:

    标签: fxcop


    【解决方案1】:

    嗯,在 .NET 安全模型中,您的程序集可能拥有执行 P/Invokes 的权限,但您的调用者没有。 (AllowPartiallyTrustedCallersAttribute 允许以部分信任的方式运行的代码调用完全信任的程序集,以实现这一点。)

    本质上,当您正在编写的库存在时,您想要什么,以提供对某些系统设施的安全访问或有限访问,您不希望一种或另一种沙盒应用程序具有任意访问权限。

    另一方面,这是礼貌和安全。 P/Invokes 实际上是不安全的,因为错误地调用它们会导致各种有趣的崩溃方式,而这些方式在舒适的 .NET 世界中通常不会遇到。围绕它们包装一些错误检查和一般安全代码,以及将输入数据转换为 Win32 API(或其他)格式,将其错误代码转换为适当的 .NET 异常等,等等,很简单向图书馆的未来用户致敬,IMO。

    【讨论】:

    • 谢谢。您对 .NET 安全模型的描述让我明白了。
    • 我会投赞成票,但我是新手,没有所需的声誉。
    • @anvilis:不过,您可以接受他们的回答——这会有所帮助;)