WNetGetUniversalNameA 関数 (winnetwk.h)
WNetGetUniversalName 関数は、ネットワーク リソースのドライブ ベースのパスを受け取り、より汎用的な形式の名前を含む情報構造を返します。
構文
DWORD WNetGetUniversalNameA(
[in] LPCSTR lpLocalPath,
[in] DWORD dwInfoLevel,
[out] LPVOID lpBuffer,
[in, out] LPDWORD lpBufferSize
);
パラメーター
[in] lpLocalPath
ネットワーク リソースのドライブ ベースのパスである、null で終わる定数文字列へのポインター。
たとえば、ドライブ H がネットワーク ドライブ共有にマップされていて、対象のネットワーク リソースがその共有のディレクトリ \Win32\Examples にSample.docという名前のファイルである場合、ドライブベースのパスは H:\Win32\Examples\Sample.doc。
[in] dwInfoLevel
lpBuffer パラメーターが指すバッファーに関数が格納する構造体の型。 このパラメーターには、Winnetwk.h ヘッダー ファイルで定義されている次のいずれかの値を指定できます。
価値 | 意味 |
---|---|
|
この関数は、バッファーに UNIVERSAL_NAME_INFO 構造体を格納します。 |
|
この関数は、バッファーに REMOTE_NAME_INFO 構造体を格納します。 |
UNIVERSAL_NAME_INFO 構造体は、汎用名前付け規則 (UNC) の名前付け文字列を指します。
REMOTE_NAME_INFO 構造体は、UNC 名文字列と 2 つの追加の接続文字列を指します。 詳細については、次の「解説」セクションを参照してください。
[out] lpBuffer
dwInfoLevel パラメーターで指定された構造体を受け取るバッファーへのポインター。
[in, out] lpBufferSize
lpBuffer パラメーターが指すバッファーのサイズをバイト単位で指定する変数へのポインター。
関数が成功した場合、lpBufferSize が指す変数
戻り値
関数が成功した場合、戻り値はNO_ERROR。
関数が失敗した場合、戻り値は システム エラー コード(次のいずれかの値など) です。
リターン コード | 形容 |
---|---|
|
lpLocalPath パラメーターが指す文字列が無効です。 |
|
リモート デバイスへの現在の接続はありませんが、記憶されている (永続的な) 接続があります。 |
|
ネットワーク固有のエラーが発生しました。 WNetGetLastError 関数を使用して、エラーの説明を取得します。 |
|
lpBuffer パラメーターが指すバッファーが小さすぎます。 この関数は、lpBufferSize パラメーターが指す変数を必要なバッファー サイズに設定します。 後続の呼び出しでは、さらに多くのエントリを使用できます。 |
|
dwInfoLevel パラメーターは UNIVERSAL_NAME_INFO_LEVEL に設定されていますが、ネットワーク プロバイダーは UNC 名をサポートしていません。 (どのネットワーク プロバイダーもこの機能をサポートしません)。 |
|
どのネットワーク プロバイダーも、ローカル名が接続を持つものとして認識しません。 ただし、接続が属している可能性のあるプロバイダーが少なくとも 1 つでは、ネットワークを使用できません。 |
|
ネットワークは使用できません。 |
|
lpLocalPath パラメーターで指定されたデバイスはリダイレクトされません。 |
備考
ローカル ドライブベースのパスの汎用形式は、明確でコンピューターに依存しない方法でネットワーク リソースを識別します。 その後、その名前を他のコンピューター上のプロセスに渡して、それらのプロセスがリソースへのアクセスを取得できるようにします。
WNetGetUniversalName 関数は、現在、1 つの汎用名形式をサポートしています。汎用名前付け規則 (UNC) 名は、次のようになります。
\\servername\sharename\path\file
lpLocalPath パラメーターの前の説明の例を使用して、共有ネットワーク ドライブが COOLSERVER という名前のサーバー上にあり、共有名が HOTSHARE の場合、ドライブベースの名前が H:\Win32\Examples\Sample.doc ネットワーク リソースの UNC 名は次のようになります。
\\coolserver\hotshare\win32\examples\sample.doc
UNIVERSAL_NAME_INFO 構造体には、UNC 名文字列へのポインターが含まれています。 REMOTE_NAME_INFO 構造体には、UNC 名文字列へのポインターと、他の 2 つの便利な文字列へのポインターも含まれています。 たとえば、プロセスは、REMOTE_NAME_INFO 構造体の lpszConnectionInfo メンバーを WNetAddConnection2 関数に渡して、ローカル デバイスをネットワーク リソースに接続できます。 その後、プロセスは、lpszRemainingPath メンバーが指す文字列をローカル デバイス文字列に追加できます。 結果の文字列は、ドライブベースのパスを必要とする関数に渡すことができます。
lpLocalPath パラメーターは、リモート リソースに既に存在するパスまたはリソースを指定する必要はありません。 たとえば、lpLocalPath パラメーターでは、フォルダー、フォルダーの階層、または現在存在しないファイルを指定できます。 WNetGetUniversalName 関数は、このような場合に、より汎用的な形式の名前を返します。
lpBuffer パラメーターによって指され、lpBufferSize パラメーターで指定されるバッファーのサイズは、REMOTE_NAME_INFO または UNIVERSAL_NAME_INFO 構造体のサイズよりもはるかに大きくする必要があります。 lpBuffer パラメーターが指すバッファーは、メンバーが指す UNC 文字列を REMOTE_NAME_INFO または UNIVERSAL_NAME_INFO 構造体に格納するのに十分な大きさである必要があります。 バッファー サイズが小さすぎると、関数はERROR_MORE_DATAで失敗し、lpBufferSize パラメーターが指す変数は、必要なバッファー サイズを示します。
Windows Server 2003 および Windows XP: この関数は、MS-DOS デバイスが AuthenticationID によって識別されるため、ログオン セッションに関連付けられている MS-DOS デバイス名前空間に対してクエリを実行します。 (AuthenticationID は、ログオン セッションに関連付けられた ローカル一意識別子 (LUID)です)。これは、いずれかの WNet 関数を呼び出して 1 人のユーザー ログオンでネットワーク ドライブ文字を作成するが、別のユーザー ログオンで既存のネットワーク ドライブ文字を照会するアプリケーションに影響を与える可能性があります。 このような状況の例としては、たとえば、CreateProcessAsUser 関数を呼び出すことによって、ログオン セッション内にユーザーの 2 番目のログオンが作成され、2 番目のログオンで、GetLogicalDrives 関数を呼び出すアプリケーションが実行される場合があります。
GetLogicalDrives は、最初のログオン時に WNet 関数によって作成されたネットワーク ドライブ文字を返しません。 前の例では、最初のログオン セッションがまだ存在し、ターミナル サービス セッションを含む任意のログオン セッションにこの例を適用できることに注意してください。 詳細については、「MS-DOS デバイス名の定義
例
次のコード サンプルは、WNetGetUniversalName 関数を使用して、ネットワーク リソースのドライブ ベースのパスに関連付けられている汎用 UNC 名文字列を取得する方法を示しています。
#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "mpr.lib")
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <Winnetwk.h>
int wmain(int argc, wchar_t * argv[])
{
DWORD dwRetVal;
WCHAR Buffer[1024];
DWORD dwBufferLength = 1024;
UNIVERSAL_NAME_INFO * unameinfo;
REMOTE_NAME_INFO *remotenameinfo;
wprintf(L"Calling WNetGetUniversalName with Local Path = %s\n", argv[1]);
unameinfo = (UNIVERSAL_NAME_INFO *) &Buffer;
dwRetVal = WNetGetUniversalName(argv[1], UNIVERSAL_NAME_INFO_LEVEL, (LPVOID) unameinfo, &dwBufferLength );
//
// If the call succeeds, print the user information.
//
if (dwRetVal == NO_ERROR) {
wprintf(L"WNetGetUniversalName returned success for InfoLevel=UNIVERSAL_NAME_INFO_LEVEL\n");
wprintf(L"\tUniversal name = %s\n", unameinfo->lpUniversalName);
}
else {
wprintf(L"WNetGetUser failed for InfoLevel=UNIVERSAL_NAME_INFO_LEVEL with error: %u\n", dwRetVal);
}
remotenameinfo = (REMOTE_NAME_INFO *) &Buffer;
dwRetVal = WNetGetUniversalName(argv[1], REMOTE_NAME_INFO_LEVEL,
(LPVOID) remotenameinfo, &dwBufferLength );
//
// If the call succeeds, print the user information.
//
if (dwRetVal == NO_ERROR) {
wprintf(L"WNetGetUniversalName returned success for InfoLevel=REMOTE_NAME_INFO_LEVEL\n");
wprintf(L"\tUniversal name = %s\n", remotenameinfo->lpUniversalName);
wprintf(L"\tConnection name = %s\n", remotenameinfo->lpConnectionName);
wprintf(L"\tRemaining path = %s\n", remotenameinfo->lpRemainingPath);
}
else {
wprintf(L"WNetGetUser failed for InfoLevel=REMOTE_NAME_INFO_LEVEL with error: %u\n", dwRetVal);
}
}
手記
winnetwk.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして WNetGetUniversalName を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winnetwk.h |
ライブラリ | Mpr.lib |
DLL | Mpr.dll |
関連項目
共有 の場所を決定する
WNetAddConnection2 の