下面是 C# 调用 Win32 MessageBox 函数的示例:
using System;
using System.Runtime.InteropServices;
class MainApp
{
[DllImport("user32.dll", EntryPoint="MessageBox"

]
public static extern int MessageBox(int hWnd, String strMessage, String strCaption, uint uiType);
public static void Main()
{
MessageBox( 0, "您好,这是 PInvoke!", ".NET", 0 );
}
}
安全性
如何使代码与安全系统协调工作?
通常,这不成问题——大多数应用程序能安全地运行,不会受恶意攻击的干扰。通过简单地使用标准类库来访问资源(如文件)或执行受保护的操作(例如反转类型的私有成员),安全性由这些库来实施。应用程序开发者需要完成的一项简单工作是包括权限请求(一种公开的安全性),将代码可能接收的权限限制在它所需要的权限范围内。这也确保了如果代码被允许运行,它在运行时将具有所需的所有权限。
仅当开发人员需要编写提供新型资源的新基类库时,他们才需要直接处理安全系统。在这种情况下,并非所有的代码都有潜在的安全性问题,代码访问安全机制将其限制在替代了安全系统的那部分代码上。
为什么在网络共享驱动器中运行代码时会发生安全异常?
默认安全策略仅给来自本地 Intranet 区域的代码授予有限的权限。这个区域是由 Internet Explorer 安全设置定义的,它们应该配置为与企业内部的本地网络相匹配。由于由 UNC 或映射驱动器(例如使用 NET USE 命令)命名的文件都需要在本地网络上发送,因此它们也在本地 Intranet 区域中。
默认值是为不安全的 Intranet 这种最坏情况而设置的。如果您的 Intranet 比较安全,您可以修改安全策略(用 CASPol 工具),给本地 Intranet 或其一部分(例如特定的计算机共享名)授予更多的权限。
如何编写代码,使它在安全系统停止该代码时运行?
当代码试图执行未经授权的操作时,将发生安全异常。权限是基于代码(尤其是其位置)来授予的。例如,从 Internet 中运行的代码所得到的权限比在本地计算机上运行的代码所得到的权限要少,这是因为经验证明,它的可靠性要低一些。因此,要运行由于安全异常而失败的代码,您必须增加授予它的权限。一个简单的方法是将代码移到更受信任的位置(例如本地文件系统)。但这种方法并不是在任何情况下都有效(Web 应用程序是一个很好的例子,企业网络上的 Intranet 应用程序是另一个例子)。因此,不要改变代码位置,而是通过更改安全策略给该位置授予更多的权限。请使用代码访问安全策略工具 (caspol.exe) 或图形化管理工具(在 Beta 2 和更高版本中可以得到)来执行此操作。如果您是代码的开发人员或发行者,您也可以对它进行数字签名,然后修改安全策略,给带有该数字签名的代码授予更多权限。但是,在执行上述任何操作时,请记住此代码被授予较少的权限,是因为它不是来自受信任的来源——在将代码移至本地计算机或更改安全策略以前,您应该确保这些代码不会执行恶意或损坏性的操作。
如何管理个人或企业计算机的安全性?
目前,CASPol 命令行工具是管理安全性的唯一方法。安全策略由两个级别组成:按计算机和按用户。我们计划在 .NET 框架第一版中提供全面的管理工具以及企业策略管理支持。
基于证据的安全性是如何与 Windows 2000 安全性配合工作的?
基于证据的安全性(基于授权码)能与 Windows 2000 安全性(基于登录身份标识)配合工作。例如,要访问一个文件,托管代码必须具有代码访问安全文件权限,也必须在具有 NTFS 文件访问权限的登录身份标识下运行。.NET 框架中包括的托管库也为基于角色的安全性提供了类。这些都使应用程序能够与 Windows 登录身份标识及用户组配合工作