用我自己的计划或其他我不能得到的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.拒绝访问
我遇到过完全相同的问题,这是由于环境(!):很明显的WinSock需要一个有效的SystemRoot
环境变量设置。 在我来说,我打电话CreateProcess()
通过指定唯一一个环境变量,具体到我的应用程序(不继承调用者的环境),它是失败。
请检查您创建过程或者传递NULL
来lpEnvironment
继承调用者的环境,或指定一个有效的SystemRoot
环境变量。
完全AFAIK无证,但它为我工作。
也许你的用户与执行不允许使用TCP / IP协议栈的过程?
尝试启动,是不是您自己的帐户管理员用户的应用程序。
可能是你缺乏必要的权限来运行过程作为另一个用户。 尝试通过以OpenProcessToken调用获取句柄访问令牌,并通过调用AdjustTokenPrivileges添加SE_IMPERSONATE_NAME,然后调用CreateProcessAsUserW。 我还没有这虽然尝试过自己。
在Python代码片段做Win32调用类似的东西
在其上运行进程监视器,看看它是否是没有找到一个文件或注册表项。 也许模拟用户的配置文件未加载和Winsock(或服务提供商也试图加载)正在寻找的东西在那里。
总是开始的WinSock附近的主要顶部,让它运行。 开始的winsock需要的是建筑的事故,而不是圣日耳曼任何问题域了。
文章来源: Why does Windows not allow WinSock to be started while impersonating another user