如何在没有管理员权限的情况下初始化Windows套接字库



我正在编写一个通过。net调用OpenOffice.org API的程序。http://wiki.openoffice.org/wiki/Documentation/DevGuide/ProUNO/CLI/Writing_Client_Programs上的文档说:

For OOoX代码如下:

//C# example for OOo 3.x
//Workaround which is needed when using a socket connection
//This will initialize the Windows socket library.
System.Net.Sockets.Socket s = new System.Net.Sockets.Socket(
AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);

在Windows XP和Windows Server 2003上运行正常,但在Windows 7上运行失败:

试图以其属性所禁止的方式访问套接字访问权限

我理解这是因为套接字类型是原始的,程序没有以管理员权限运行。所以我的问题是:我如何初始化没有管理权限的Windows套接字库?

访问RAW套接字需要Windows 2000及更高版本的管理员权限,这在MSDN上有描述:

TCP/IP原始套接字

原始套接字提供了操作底层传输的能力,因此它们可以用于构成安全威胁的恶意目的。因此,在Windows 2000及更高版本上,只有Administrators组的成员才能创建SOCK_RAW类型的套接字。

注意使用SOCK_RAW类型的套接字需要管理员权限。运行使用原始套接字的Winsock应用程序的用户必须是本地计算机上Administrators组的成员,否则原始套接字调用将失败,并显示错误代码WSAEACCES。在Windows Vista及更高版本中,对原始套接字的访问在套接字创建时强制执行。在Windows的早期版本中,对原始套接字的访问是在其他套接字操作期间强制执行的。

没有办法绕过这个限制。另一方面,如果您的目的只是一般地初始化Winsock,那么您不需要创建RAW套接字来完成此操作。创建一个TCP (SocketType.StreamProtocolType.TCP)或UDP (SocketType.DGramProtocolType.UDP)套接字,这是不受限制的,最有可能的是OOo实际上要在内部使用。或者,您可以使用PInvoke直接调用Winsock的WSAStartup()函数。

相关内容

  • 没有找到相关文章

最新更新