次の方法で共有


WNetAddConnection2A 関数 (winnetwk.h)

WNetAddConnection2 関数は、ネットワーク リソースへの接続を確立し、ローカル デバイスをネットワーク リソースにリダイレクトできます。

WNetAddConnection2 関数は、WNetAddConnection 関数よりも優先されます。 ネットワーク リソースのプロバイダーがダイアログ ボックスの所有者ウィンドウとして使用できるウィンドウにハンドルを渡すことができる場合は、代わりに WNetAddConnection3 関数を呼び出します。

構文

DWORD WNetAddConnection2A(
  [in] LPNETRESOURCEA lpNetResource,
  [in] LPCSTR         lpPassword,
  [in] LPCSTR         lpUserName,
  [in] DWORD          dwFlags
);

パラメーター

[in] lpNetResource

ネットワーク リソース、ローカル デバイス、ネットワーク リソース プロバイダーに関する情報など、提案された接続の詳細を指定する NETRESOURCE 構造体へのポインター。

NETRESOURCE 構造体の次のメンバーを指定する必要があります。

メンバー 意味
dwType を する
接続先のネットワーク リソースの種類。

lpLocalName メンバーが空でない文字列を指している場合、このメンバーはRESOURCETYPE_DISKまたはRESOURCETYPE_PRINTに等しい場合があります。

lpLocalName NULL場合、または空の文字列を指している場合は、dwType RESOURCETYPE_DISK、RESOURCETYPE_PRINT、またはRESOURCETYPE_ANYと等しい場合があります。

このメンバーは必須ですが、その情報はネットワーク サービス プロバイダーによって無視される場合があります。

lpLocalName を する
リダイレクトするローカル デバイスの名前 ("F:" や "LPT1" など) を指定する、null終了文字列へのポインター。 文字列は、大文字と小文字を区別しない方法で扱われます。

文字列が空の場合、または lpLocalName が NULL場合、関数はローカル デバイスをリダイレクトせずにネットワーク リソースに接続します。

lpRemoteName を する
接続先のネットワーク リソースを指定する null終了文字列へのポインター。 文字列の長さは最大MAX_PATH文字で、ネットワーク プロバイダーの名前付け規則に従う必要があります。
lpProvider を する
接続するネットワーク プロバイダーを指定する null-terminated 文字列へのポインター。

lpProvider が NULL場合、または空の文字列を指している場合、オペレーティング システムは、lpRemoteName メンバーが指す文字列を解析して、適切なプロバイダーの特定を試みます。

このメンバーが NULLされていない場合、オペレーティング システムは、名前付きネットワーク プロバイダーへの接続のみを試行します。

このメンバーは、使用するネットワーク プロバイダーがわかっている場合にのみ設定する必要があります。 それ以外の場合は、ネットワーク名がマップされるプロバイダーをオペレーティング システムで判断します。

 

WNetAddConnection2 関数は、NETRESOURCE 構造体の他のメンバーを無視します。

[in] lpPassword

ネットワーク接続の確立に使用するパスワードを指定する null終端文字列 定数へのポインター。

lpPassword NULL場合、この関数は、lpUserName パラメーターで指定されたユーザーに関連付けられている現在の既定のパスワードを使用します。

lpPassword が空の文字列を指している場合、関数はパスワードを使用しません。

無効なパスワードが原因で接続に失敗し、dwFlags パラメーターにCONNECT_INTERACTIVE値が設定されている場合、この関数はユーザーにパスワードの入力を求めるダイアログ ボックスを表示します。

Windows Me/98/95: このパラメーターは、NULL または空の文字列 する必要があります。

[in] lpUserName

接続を確立するためのユーザー名を指定する -terminated 文字列null 定数へのポインター。

lpUserName が NULL場合、関数は既定のユーザー名を使用します。 (プロセスのユーザー コンテキストは、既定のユーザー名を提供します)。

lpUserName パラメーターは、ユーザーに既定のユーザー名またはアカウント以外のユーザー名またはアカウントが割り当てられているネットワーク リソースに接続する場合に指定します。

ユーザー名の文字列は、セキュリティ コンテキストを表します。 ネットワーク プロバイダーに固有の場合があります。

Windows Me/98/95: このパラメーターは、NULL または空の文字列 する必要があります。

[in] dwFlags

接続オプションのセット。 接続オプションに指定できる値は、Winnetwk.h ヘッダー ファイルで定義されます。 現在、次の値を使用できます。

価値 意味
CONNECT_UPDATE_PROFILE
0x00000001
ネットワーク リソース接続を記憶する必要があります。

このビット フラグが設定されている場合、オペレーティング システムはユーザーのログオン時に自動的に接続の復元を試みます。

オペレーティング システムは、ローカル デバイスをリダイレクトする成功した接続のみを記憶します。 失敗した接続またはデバイスレス接続は記憶されません。 (lpLocalName メンバーが NULL 、または空の文字列を指している場合、デバイスレス接続が発生します)。

このビット フラグがクリアされている場合、オペレーティング システムは、ユーザーがログオンしたときに接続の復元を試みません。

CONNECT_UPDATE_RECENT
0x00000002
ネットワーク リソース接続は、最近の接続リストに含めないようにする必要があります。

このフラグが設定され、接続が正常に追加された場合、ネットワーク リソース接続は、リダイレクトされたローカル デバイスが関連付けられている場合にのみ、最近の接続リストに配置されます。

CONNECT_TEMPORARY
0x00000004
ネットワーク リソース接続は記憶しないでください。

このフラグが設定されている場合、ユーザーが再度ログオンしたときに、オペレーティング システムは接続の復元を試みません。

CONNECT_INTERACTIVE
0x00000008
このフラグが設定されている場合、オペレーティング システムは認証のためにユーザーと対話する可能性があります。
CONNECT_PROMPT
0x00000010
このフラグは、ユーザーに代替手段を提供する機会を提供せずに、ユーザー名またはパスワードに既定の設定を使用しないようにシステムに指示します。 CONNECT_INTERACTIVEも設定されていない限り、このフラグは無視されます。
CONNECT_REDIRECT
0x00000080
このフラグは、接続時にローカル デバイスのリダイレクトを強制します。

NETRESOURCElpLocalName メンバーがリダイレクトするローカル デバイスを指定した場合、オペレーティング システムは引き続き指定されたデバイスのリダイレクトを試行するため、このフラグは無効です。 オペレーティング システムがローカル デバイスを自動的に選択する場合、dwType メンバーはRESOURCETYPE_ANYと等しくなければなりません。

このフラグが設定されていない場合、ローカル デバイスは、ネットワークでローカル デバイスをリダイレクトする必要がある場合にのみ、リダイレクト用に自動的に選択されます。

Windows Server 2003 および Windows XP: システムがネットワーク ドライブ文字を自動的に割り当てると、文字は Z: で始まり、Y: で始まり、C: で終わると割り当てられます。 これにより、ログオンごとのドライブ文字 (ネットワーク ドライブ文字など) とグローバル ドライブ文字 (ディスク ドライブなど) の競合が軽減されます。 以前のバージョンの Windows では、C: で始まり、Z: で終わるドライブ文字が割り当てされていることに注意してください。

CONNECT_CURRENT_MEDIA
0x00000200
このフラグが設定されている場合、オペレーティング システムは新しいメディアを使用して接続の確立を試みません (たとえば、新しいダイヤルアップ接続を開始します)。
CONNECT_COMMANDLINE
0x00000800
このフラグが設定されている場合、オペレーティング システムは、グラフィカル ユーザー インターフェイス (GUI) ではなくコマンド ラインを使用してユーザーに認証を求めます。 CONNECT_INTERACTIVEも設定されていない限り、このフラグは無視されます。

Windows XP: この値は、Windows XP 以降でサポートされています。

CONNECT_CMD_SAVECRED
0x00001000
このフラグが設定されていて、オペレーティング システムが資格情報の入力を求める場合は、資格情報マネージャーによって資格情報を保存する必要があります。 呼び出し元のログオン セッションで資格情報マネージャーが無効になっている場合、またはネットワーク プロバイダーが資格情報の保存をサポートしていない場合、このフラグは無視されます。 CONNECT_INTERACTIVEも設定されていない限り、このフラグは無視されます。 CONNECT_COMMANDLINE フラグを設定しない限り、このフラグも無視されます。

Windows XP: この値は、Windows XP 以降でサポートされています。

CONNECT_CRED_RESET
0x00002000
このフラグが設定されていて、オペレーティング システムが資格情報の入力を求める場合、資格情報は資格情報マネージャーによってリセットされます。 呼び出し元のログオン セッションで資格情報マネージャーが無効になっている場合、またはネットワーク プロバイダーが資格情報の保存をサポートしていない場合、このフラグは無視されます。 CONNECT_COMMANDLINE フラグを設定しない限り、このフラグも無視されます。

Windows Vista: この値は、Windows Vista 以降でサポートされています。

戻り値

関数が成功した場合、戻り値はNO_ERROR。

関数が失敗した場合、戻り値には、次のいずれかのエラー コードまたはシステム エラー コードのいずれかを指定できます。

リターン コード 形容
ERROR_ACCESS_DENIED
呼び出し元は、ネットワーク リソースにアクセスできません。
ERROR_ALREADY_ASSIGNED
lpLocalName メンバーによって指定されたローカル デバイスは、既にネットワーク リソースに接続されています。
ERROR_BAD_DEV_TYPE
ローカル デバイスの種類とネットワーク リソースの種類が一致しません。
ERROR_BAD_DEVICE
指定されたデバイス名が無効です。 このエラーは、lpNetResource パラメーターが指す NETRESOURCE 構造体の lpLocalName メンバーが、リダイレクトできないデバイスを指定した場合に返されます。
ERROR_BAD_NET_NAME
ネットワーク名が見つかりません。 この値は、lpNetResource パラメーターが指す NETRESOURCE 構造体の lpRemoteName メンバーが、リソース名が空であるか無効であるか、または名前付きリソースが見つからないため、どのネットワーク リソース プロバイダーにも許容できないリソースを指定した場合に返されます。
ERROR_BAD_PROFILE
ユーザー プロファイルの形式が正しくありません。
ERROR_BAD_PROVIDER
指定されたネットワーク プロバイダー名が無効です。 このエラーは、lpNetResource パラメーターが指す NETRESOURCE 構造体の lpProvider メンバーが、ネットワーク プロバイダーと一致しない値を指定した場合に返されます。
ERROR_BAD_USERNAME
指定されたユーザー名が無効です。
ERROR_BUSY
ルーターまたはプロバイダーがビジー状態で、初期化中である可能性があります。 呼び出し元は再試行する必要があります。
ERROR_CANCELLED
接続の試行は、いずれかのネットワーク リソース プロバイダーのダイアログ ボックスまたは呼び出されたリソースによって、ユーザーによって取り消されました。
ERROR_CANNOT_OPEN_PROFILE
システムは、永続的な接続を処理するためにユーザー プロファイルを開くことができません。
ERROR_DEVICE_ALREADY_REMEMBERED
ローカル デバイス名には、別のネットワーク リソースへの記憶された接続があります。 このエラーは、lpNetResource パラメーターが指 NETRESOURCE 構造体のメンバー lpLocalName で指定されたデバイスのエントリが、lpNetResource パラメーターで指定された接続のユーザー プロファイルに既に存在する値を指定した場合に返されます。
ERROR_EXTENDED_ERROR
ネットワーク固有のエラーが発生しました。 WNetGetLastError 関数を呼び出して、エラーの説明を取得します。
ERROR_INVALID_ADDRESS
無効なアドレスにアクセスしようとしました。 このエラーは、dwFlags パラメーターがCONNECT_REDIRECTの値を指定しているが、lpNetResource パラメーターによって指 された NETRESOURCE 構造体の lpLocalName メンバーが指定されていない場合に返されます。
ERROR_INVALID_PARAMETER
パラメーターが正しくありません。 このエラーは、lpNetResource パラメーターが指す NETRESOURCE 構造体の dwType メンバーが、RESOURCETYPE_DISK、RESOURCETYPE_PRINT、またはRESOURCETYPE_ANY以外の値を指定した場合に返されます。 このエラーは、dwFlags パラメーターで正しくない値または不明な値が指定されている場合にも返されます。
ERROR_INVALID_PASSWORD
指定したパスワードが無効で、CONNECT_INTERACTIVE フラグが設定されていません。
ERROR_LOGON_FAILURE
不明なユーザー名または不適切なパスワードが原因でログオンが失敗しました。
ERROR_NO_NET_OR_BAD_PATH
指定されたネットワーク パスを受け入れたネットワーク プロバイダーがありません。 このエラーは、lpNetResource パラメーターが指す NETRESOURCE 構造体の lpRemoteName メンバーを認識していないネットワーク プロバイダーがいない場合に返されます。
ERROR_NO_NETWORK
ネットワークは使用できません。
その他の
FormatMessage を使用して、返されたエラーのメッセージ文字列を取得します。

備考

Windows Server 2003 および Windows XP では、MS-DOS デバイスは AuthenticationID (MS-DOS a
ログオン セッションに関連付けられたローカル一意識別子(LUID)。 これは、いずれかの WNet 関数を呼び出して 1 人のユーザー ログオンでネットワーク ドライブ文字を作成するが、別のユーザー ログオンで既存のネットワーク ドライブ文字を照会するアプリケーションに影響を与える可能性があります。 このような状況の例としては、たとえば、CreateProcessAsUser 関数を呼び出すことによって、ログオン セッション内にユーザーの 2 番目のログオンが作成され、2 番目のログオンで、GetLogicalDrives 関数を呼び出すアプリケーションが実行される場合があります。 GetLogicalDrives 関数の呼び出しは、最初のログオン時に WNet 関数呼び出しによって作成されたネットワーク ドライブ文字を返しません。 前の例では、最初のログオン セッションがまだ存在し、ターミナル サービス セッションを含む任意のログオン セッションにこの例を適用できることに注意してください。 詳細については、「MS-DOS デバイス名の定義 」を参照してください。

Windows Server 2003 および Windows XP では、LocalSystem として実行されるサービスが WNetAddConnection2 関数を呼び出すと、マップされたドライブはすべてのユーザー ログオン セッションに表示されます。

Microsoft ネットワーク プロバイダーの場合、lpNetResource パラメーターが指す NETRESOURCE 構造体の lpRemoteName メンバーには、ドット 10 進表記の IPv4 アドレスを含めることができます。 共有の例を次に示します。

\192.168.1.1\share

Windows Vista 以降の Microsoft ネットワーク プロバイダーの場合、lpNetResource パラメーターが指す NETRESOURCE 構造体の lpRemoteName メンバーには、IPv6 アドレスを含めることができます。 ただし、IPv6 アドレスが正しく解析されるように、IPv6 リテラル形式を使用する必要があります。 IPv6 リテラル アドレスの形式は次のとおりです。

ipv6-address と ':' 文字が '-' 文字に置き換えられ、その後に ".ipv6-literal.net" 文字列が続きます。

たとえば、次の IPv6 アドレスの場合です。

2001:4898:9:3:c069:aa97:fe76:2449

共有の例を次に示します。

\2001-4898-9-3-c069-aa97-fe76-2449.ipv6-literal.net\share

他のネットワーク プロバイダーは、IPv4 または IPv6 アドレスを含む lpNetResource パラメーターが指す NETRESOURCE 構造体の lpRemoteName メンバーをサポートする場合がありますが、これは特定のネットワーク プロバイダーに対して行われます。

Windows 7 および Windows Server 2008 R2: WNetAddConnection2 関数が、pUsername で指定された明示的なユーザー資格情報で呼び出された場合 lpPassword、特定のサーバー上のネットワーク リソースとの接続を確立し、これらのパラメーターのいずれかを使用して、同じサーバーへの NULL (既定のユーザー名または既定のパスワードを使用する) 呼び出します。 失敗した呼び出し。 返されるエラーは、ERROR_BAD_USERNAME または ERROR_INVALID_PASSWORDになります。

次のコード サンプルは、WNetAddConnection2 関数を使用してネットワーク リソースに接続する方法を示しています。

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "mpr.lib")

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <Winnetwk.h>

// Need to link with Netapi32.lib and Mpr.lib

int wmain(int argc, wchar_t * argv[])
{

    DWORD dwRetVal;

    NETRESOURCE nr;
    DWORD dwFlags;

    if (argc != 5) {
        wprintf(L"Usage: %s <localname> <remotename> <username> <password>\n",
                argv[0]);
        wprintf(L"       %s X: \\\\contoso\\public testuser testpasswd\n",
                argv[0]);
        exit(1);
    }

    wprintf(L"Calling WNetAddConnection2 with\n");
    wprintf(L"  lpLocalName = %s\n", argv[1]);
    wprintf(L"  lpRemoteName = %s\n", argv[2]);
    wprintf(L"  lpUsername = %s\n", argv[3]);
    wprintf(L"  lpPassword = %s\n", argv[4]);

// Zero out the NETRESOURCE struct
    memset(&nr, 0, sizeof (NETRESOURCE));

// Assign our values to the NETRESOURCE structure.

    nr.dwType = RESOURCETYPE_ANY;
    nr.lpLocalName = argv[1];
    nr.lpRemoteName = argv[2];
    nr.lpProvider = NULL;

// Assign a value to the connection options
    dwFlags = CONNECT_UPDATE_PROFILE;
//
// Call the WNetAddConnection2 function to assign
//   a drive letter to the share.
//
    dwRetVal = WNetAddConnection2(&nr, argv[4], argv[3], dwFlags);
//
// If the call succeeds, inform the user; otherwise,
//  print the error.
//
    if (dwRetVal == NO_ERROR)
        wprintf(L"Connection added to %s\n", nr.lpRemoteName);
    else
        wprintf(L"WNetAddConnection2 failed with error: %u\n", dwRetVal);

    exit(1); 
}


WNetAddConnection2 関数を使用してネットワーク リソースに接続する方法を示すその他のコード サンプルについては、「ネットワーク接続 の追加と共有へのドライブの割り当て を参照してください。

手記

winnetwk.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして WNetAddConnection2 を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winnetwk.h
ライブラリ Mpr.lib
DLL Mpr.dll

関連項目

NETRESOURCE の

WNetAddConnection3 の

WNetCancelConnection2 の

WNetGetConnection の

Windows ネットワーク (WNet) の概要

Windows ネットワーク機能の