【问题标题】:Why does Windows not allow WinSock to be started while impersonating another user为什么 Windows 在模拟其他用户时不允许启动 WinSock
【发布时间】:2010-12-06 00:11:26
【问题描述】:

如果使用 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。访问 拒绝

【问题讨论】:

    标签: c++ windows winsock impersonation wsastartup


    【解决方案1】:

    我遇到了完全相同的问题,这是由于环境(!):显然 WinSock 需要设置一个有效的 SystemRoot 环境变量。在我的情况下,我通过仅指定一个特定于我的应用程序的环境变量(不继承调用者的环境)来调用CreateProcess(),但它失败了。

    通过将NULL 传递给lpEnvironment 以继承调用者的环境或指定一个有效的SystemRoot 环境变量来检查您是否创建了进程。

    完全没有记录的 AFAIK,但它对我有用。

    【讨论】:

      【解决方案2】:

      也许您执行该进程的用户不允许使用 TCP/IP 堆栈?

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

      【讨论】:

      • 我的帐户是一个受限帐户,它正在创建使用winsock作为管理员的进程。两者都可以使用 TCP/IP 堆栈。我什至尝试从一个管理员到另一个管理员,但都失败了。
      【解决方案3】:

      你必须拥有作为经营权的行为

      【讨论】:

      • 你好塔奎尼。请问具体怎么获取操作权限?
      【解决方案4】:

      您可能缺乏以其他用户身份运行该进程所需的权限。尝试通过调用 OpenProcessToken 获取访问令牌的句柄,并通过调用 AdjustTokenPrivileges 添加 SE_IMPERSONATE_NAME,然后调用 CreateProcessAsUserW。我自己还没有尝试过。
      Code snippet in Python to do something similar with win32 calls

      【讨论】:

      • 即使我以管理员身份运行进程 AdjustTokenPrivs 也会返回 ERROR_ACCESS_DENIED。
      • 你好@0xdky。开始时,当调用socket() 时,我也会得到WSAEPROVIDERFAILEDINIT 10106。在我按照你说的做之后,我在调用WSAStartup() 时得到WSASYSCALLFAILURE 10107,它在开始时不会返回错误。你有什么主意吗?谢谢。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        始终在 main 顶部附近启动 WinSock 并使其运行。启动winsock的需要是架构的意外,不再是任何问题领域的日耳曼。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-07
          • 2015-05-08
          • 1970-01-01
          • 2016-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多