次の方法で共有


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に等しい場合があります。

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

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

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

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

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

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

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

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

 

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

[in] lpPassword

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

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

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

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

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

[in] lpUserName

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

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

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
接続の試行は、ネットワーク リソース プロバイダーの 1 つからのダイアログ ボックスまたは呼び出されたリソースによって、ユーザーによって取り消されました。
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 では、WNet 関数は、ログオン セッションに関連付けられている MS-DOS デバイス名前空間でネットワーク ドライブ文字を作成および削除します。MS-DOS デバイスは AuthenticationID (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: pUsernamelpPassword で指定された明示的なユーザー資格情報を使用して WNetAddConnection2 関数を呼び出して、特定のサーバー上のネットワーク リソースとの接続を確立し、これらのパラメーターのいずれかを 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 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winnetwk.h
Library Mpr.lib
[DLL] Mpr.dll

関連項目

NETRESOURCE

WNetAddConnection3

WNetCancelConnection2

WNetGetConnection

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

Windows ネットワーク関数