WNetAddConnection2 API 、WNetAddConnection3 API の lpUsername パラメータの指定方法について


Platform SDK (Windows SDK) サポートの小泉です。
WNetAddConnection2 API に「サーバー側にログイン可能なユーザー ID とパスワード」といった有効な資格情報を指定しているのに、不定期に ERROR_LOGON_FAILURE (1326) や ERROR_NO_SUCH_LOGON_SESSION (1312)、ERROR_SESSION_CREDENTIAL_CONFLICT (1219)  エラーが発生するという事象を良くお伺いする事があります。

この際に良く目にするのは、lpUsername パラメータに指定するユーザー名に不足があるケースです。例えば、”testuser” のようにユーザー名だけを指定してはいないでしょうか。
もし、上記のように指定している場合は、”a-domain\testuser”、”server1\testuser”、”169.254.10.10\testuser” のように接続を確立する際のユーザーの所属を明示的に設定して、現象が回避できるかをお試しください。

本API の lpUsername パラメータに ”testuser” のようにユーザー名だけを指定した場合、API は内部で可能な限り接続を成功させるため、実行アカウントの所属ドメインやマシン名等でアカウントの情報を「○○\ユーザー名」のように補完します。この結果、アプリケーションの実行アカウントや、直前の接続状態、ドメイン所属の有無により補完する情報が替わり、サーバー側で有効な資格情報ではないと判断する場合があります。この結果、その際の状況により、上記でお伝えしたエラーの何れかが返却されます。通常、lpUsername パラメータには OS へのログイン等と同様に、ユーザーの所属を明示的に「○○\ユーザー名」のように指定いただく必要があります。上記の問題を回避するためにも、是非ご検討ください。

 <補足情報>
上記でご案内したエラーの概要は以下のとおりです。
—————————————————————————————
1326 エラー(ERROR_LOGON_FAILURE)
API に指定したユーザー、パスワードがサーバー側で有効な資格情報ではないと判断した場合に発生いたします。

—————————————————————————————
1312  エラー(ERROR_NO_SUCH_LOGON_SESSION)
API に指定したユーザー、パスワードを元にした資格情報を元にしたセッションが、サーバー側で見つからない場合に発生いたします。

—————————————————————————————
1219 エラー(ERROR_SESSION_CREDENTIAL_CONFLICT)
接続しようとしている資格情報が、既に接続している資格情報と一致しない場合に発生いたします。
このエラーは、既に目的のサーバー宛の SMB セッションが存在する状態で、当該 SMB セッションで使用しているユーザーと異なるユーザーを用いて接続を試行しようとした場合に発生します。クライアント OS は複数のユーザーで同一のSMB セッションを作成する事は許されておりません。

—————————————————————————————

<参考技術情報>
上記でご案内した WNetAddConnection2 API 、WNetAddConnection3 API の詳細は以下の技術資料をご参照ください。

WNetAddConnection2 function (原文版)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa385413(v=vs.85).aspx

WNetAddConnection2 (日本語版)
https://msdn.microsoft.com/ja-jp/library/cc446983.aspx

WNetAddConnection3 function (原文版)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa385418(v=vs.85).aspx

WNetAddConnection3 (日本語版)
https://msdn.microsoft.com/ja-jp/library/cc446986.aspx


Skip to main content