Why does Windows not allow WinSock to be started w

2019-07-22 09:32发布

用我自己的计划或其他我不能得到的Winsock到该进程是否与CreateProcessWithLogonW或CreateProcessAsUserW创建时调用运行。 当我创建的插座,它返回此错误:

 WSAEPROVIDERFAILEDINIT 10106 

服务提供商无法初始化。

 The requested service provider could not be loaded or initialized. 

如果任何一个服务提供商的DLL不能加载返回此错误(调用LoadLibrary失败)或提供者的WSPStartup或NSPStartup函数失败

然而, WSAStartup似乎去W / O错误。 只是创造与WSASocket返回此套接字。

更新:

错误:

LoadUserProfile:错误代码2.找不到文件规定

AdjustTokenPrivs:错误代码5.拒绝访问

Answer 1:

我遇到过完全相同的问题,这是由于环境(!):很明显的WinSock需要一个有效的SystemRoot环境变量设置。 在我来说,我打电话CreateProcess()通过指定唯一一个环境变量,具体到我的应用程序(不继承调用者的环境),它是失败。

请检查您创建过程或者传递NULLlpEnvironment继承调用者的环境,或指定一个有效的SystemRoot环境变量。

完全AFAIK无证,但它为我工作。



Answer 2:

也许你的用户与执行不允许使用TCP / IP协议栈的过程?

尝试启动,是不是您自己的帐户管理员用户的应用程序。



Answer 3:

你必须有作为工作私法



Answer 4:

可能是你缺乏必要的权限来运行过程作为另一个用户。 尝试通过以OpenProcessToken调用获取句柄访问令牌,并通过调用AdjustTokenPrivileges添加SE_IMPERSONATE_NAME,然后调用CreateProcessAsUserW。 我还没有这虽然尝试过自己。
在Python代码片段做Win32调用类似的东西



Answer 5:

在其上运行进程监视器,看看它是否是没有找到一个文件或注册表项。 也许模拟用户的配置文件未加载和Winsock(或服务提供商也试图加载)正在寻找的东西在那里。



Answer 6:

总是开始的WinSock附近的主要顶部,让它运行。 开始的winsock需要的是建筑的事故,而不是圣日耳曼任何问题域了。



文章来源: Why does Windows not allow WinSock to be started while impersonating another user