[英]Why does Windows not allow WinSock to be started while impersonating another user
使用我自己的程序或其他程序,如果使用CreateProcessWithLogonW或CreateProcessAsUserW创建进程,则无法在调用时运行winsock。 我在创建套接字时返回此错误:
WSAEPROVIDERFAILEDINIT 10106
服务提供商无法初始化。
The requested service provider could not be loaded or initialized.
如果无法加载服务提供程序的DLL(LoadLibrary失败)或提供程序的WSPStartup或NSPStartup函数失败,则会返回此错误
。
但是, WSAStartup
似乎没有错误。 只需使用WSASocket创建套接字即可返回此信息。
更新:
错误:
LoadUserProfile:错误代码2.找不到指定的文件
AdjustTokenPrivs:错误代码5.访问被拒绝
我遇到了完全相同的问题,这是由于环境(!):显然WinSock期望设置一个有效的SystemRoot
环境变量。 在我的情况下,我通过仅指定一个特定于我的应用程序的环境变量来调用CreateProcess()
(没有继承调用者的环境),并且它失败了。
通过将NULL
传递给lpEnvironment
以继承调用者的环境或指定有效的SystemRoot
环境变量来检查是否已创建过程。
完全无证的AFAIK,但它对我有用。
也许您执行该过程的用户不允许使用TCP / IP堆栈?
尝试使用不是您自己的帐户的管理员用户启动该应用程序。
您必须拥有法案作为运营权限
可能是您缺少以另一个用户身份运行该过程所需的权限。 尝试通过调用OpenProcessToken获取访问令牌的句柄,并通过调用AdjustTokenPrivileges添加SE_IMPERSONATE_NAME,然后调用CreateProcessAsUserW。 我自己也没试过。
Python中的代码片段用于执行与win32调用类似的操作
在其上运行Process Monitor,看它是否找不到文件或注册表项。 也许没有加载模拟用户的配置文件,Winsock(或它正在尝试加载的服务提供商)正在寻找那里的东西。
始终在主要顶部附近启动WinSock并使其保持运行。 启动winsock的需要是架构的意外,而不再是任何问题域的germain。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.