使用我自己的程序或其他程序,如果进程是使用 CreateProcessWithLogonW 或 CreateProcessAsUserW 创建的,我无法在调用时让 winsock 运行。它在我创建套接字时返回此错误:
WSAEPROVIDERFAILEDINIT 10106
Service provider failed to initialize.
The requested service provider could not be loaded or initialized.
This error is returned if either a service provider's DLL could not be loaded (LoadLibrary failed) or the provider's WSPStartup or NSPStartup function failed
.
但是,WSAStartup
似乎没有错误。只需使用 WSASocket 创建套接字即可返回此信息。
更新:
Errors:
LoadUserProfile: Error Code 2. Can't find file specified
AdjustTokenPrivs: Error Code 5. Access Denied
最佳答案
我遇到了完全相同的问题,这是由于环境 (!) 造成的:显然 WinSock 需要设置有效的 SystemRoot
环境变量。在我的例子中,我通过仅指定一个特定于我的应用程序的环境变量(没有继承调用者的环境)来调用 CreateProcess()
,但它失败了。
通过将 NULL
传递给 lpEnvironment
以继承调用者的环境,或指定有效的 SystemRoot
环境变量,检查您是否创建了进程。
完全没有记录的 AFAIK,但它对我有用。
关于c++ - 为什么 Windows 不允许在模拟另一个用户时启动 WinSock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1554878/