7

プロセスが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。アクセスが拒否されました

4

6 に答える 6

8

私はまったく同じ問題に遭遇しました、そしてそれは環境(!)によるものでした:どうやらWinSockは有効なSystemRoot環境変数が設定されることを期待しています。私の場合CreateProcess()、(呼び出し元の環境を継承せずに)アプリに固有の環境変数を1つだけ指定して呼び出していましたが、失敗していました。

NULLに渡してlpEnvironment呼び出し元の環境を継承するか、有効なSystemRoot環境変数を指定して、プロセスを作成したことを確認してください。

完全に文書化されていないAFAIKですが、私にとってはうまくいきました。

于 2011-01-20T07:36:10.360 に答える
3

おそらく、プロセスを実行したユーザーがTCP / IPスタックの使用を許可されていませんか?

自分のアカウントではない管理者ユーザーでアプリケーションを起動してみてください。

于 2009-10-12T14:23:46.583 に答える
3

あなたは運営特権として行動する必要があります

于 2009-10-19T15:20:51.947 に答える
1

別のユーザーとしてプロセスを実行するために必要な権限が不足している可能性があります。OpenProcessTokenの呼び出しによってアクセストークンへのハンドルを取得し、AdjustTokenPrivilegesの呼び出しによってSE_IMPERSONATE_NAMEを追加してから、CreateProcessAsUserWを呼び出してみてください。私はこれを自分で試したことはありません。
Win32呼び出しで同様のことを行うPythonのコードスニペット

于 2009-10-14T10:36:37.993 に答える
0

その上でProcessMonitorを実行し、ファイルまたはレジストリキーの検索に失敗していないかどうかを確認します。おそらく、偽装されたユーザーのプロファイルがロードされておらず、Winsock(またはロードしようとしているサービスプロバイダー)がそこで何かを探しています。

于 2009-10-12T15:14:45.577 に答える
0

常にメインの上部近くでWinSockを起動し、実行したままにします。winsockを起動する必要があるのはアーキテクチャの偶然であり、もはや問題のあるドメインではありません。

于 2009-10-19T15:27:43.993 に答える