繁体   English   中英

为什么Windows在模仿其他用户时不允许启动WinSock

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM