共用方式為


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_LEVEL
函式會將 UNIVERSAL_NAME_INFO 結構儲存在緩衝區中。
REMOTE_NAME_INFO_LEVEL
函式會將 REMOTE_NAME_INFO 結構儲存在緩衝區中。
 

UNIVERSAL_NAME_INFO 結構指向通用命名約定 (UNC) 名稱字串。

REMOTE_NAME_INFO 結構指向 UNC 名稱字串和兩個額外的連接字串。 如需詳細資訊,請參閱下列一節。

[out] lpBuffer

緩衝區的指標,接收由 dwInfoLevel 參數所指定的結構。

[in, out] lpBufferSize

變數的指標,指定 lpBuffer 參數所指向之緩衝區的大小,以位元組為單位。

如果函式成功,它會將 lpBufferS ize 所指向的變數設定為緩衝區中儲存的位元組數目。 如果函式因為緩衝區太小而失敗,則此位置會收到所需的緩衝區大小,且函式會傳回ERROR_MORE_DATA。

傳回值

如果函式成功,傳回值會NO_ERROR。

如果函式失敗,傳回值是 系統錯誤碼,例如下列其中一個值。

傳回碼 描述
ERROR_BAD_DEVICE
lpLocalPath 參數所指向的字串無效。
ERROR_CONNECTION_UNAVAIL
遠端裝置沒有目前的連線,但有一個記住的(持續性)連線。
ERROR_EXTENDED_ERROR
發生網路特定錯誤。 使用 WNetGetLastError 函式來取得錯誤的描述。
ERROR_MORE_DATA
lpBuffer 參數所指向的緩衝區太小。 函式會將 lpBufferSize 參數所指向的變數設定為所需的緩衝區大小。 後續呼叫會提供更多專案。
ERROR_NOT_SUPPORTED
dwInfoLevel 參數會設定為 UNIVERSAL_NAME_INFO_LEVEL,但網路提供者不支援 UNC 名稱。 (沒有網路提供者支援這項功能。
ERROR_NO_NET_OR_BAD_PATH
沒有網路提供者會將本機名稱辨識為具有連線。 不過,至少一個連線所屬的提供者無法使用網路。
ERROR_NO_NETWORK
網路無法使用。
ERROR_NOT_CONNECTED
lpLocalPath 參數所指定的裝置不會重新導向。

言論

本機磁碟驅動器型路徑的通用形式會以明確的電腦獨立方式識別網路資源。 接著可以將名稱傳遞至其他電腦上的進程,讓這些進程取得資源的存取權。

WNetGetUniversalName 函式目前支援一種通用名稱形式:通用命名慣例 (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 名稱字串的指標,以及其他兩個有用字串的指標。 例如,進程可以將 REMOTE_NAME_INFO 結構的 lpszConnectionInfo 成員傳遞至 WNetAddConnection2 函式,將本機裝置連線到網路資源。 然後,進程可以將 lpszRemainingPath 所指向的字串附加至本機裝置字串 成員。 產生的字串可以傳遞至需要磁碟驅動器型路徑的函式。

lpLocalPath 參數不需要指定遠端資源上已經存在的路徑或資源。 例如,lpLocalPath 參數可以指定 和資料夾、資料夾階層或目前不存在的檔案。 WNetGetUniversalName 函式在這些情況下會傳回更通用的名稱形式。

lpBuffer 參數所指向的緩衝區大小,並在 lpBufferSize 參數中指定的大小必須遠大於 REMOTE_NAME_INFOUNIVERSAL_NAME_INFO 結構的大小。 lpBuffer 參數所指向的緩衝區必須夠大,才能將成員指向的 UNC 字串儲存在 REMOTE_NAME_INFOUNIVERSAL_NAME_INFO 結構中。 如果緩衝區大小太小,則函式會因為ERROR_MORE_DATA而失敗,而 lpBufferSize 參數所指向的變數表示所需的緩衝區大小。

Windows Server 2003 和 Windows XP:此函式會查詢與登入會話相關聯的 MS-DOS 裝置命名空間,因為 AuthenticationID 會識別 MS-DOS 裝置。 (AuthenticationID 是與登入會話相關聯的本機唯一標識符或 LUID 。這可能會影響呼叫其中一個 WNet 函式的應用程式,以在一個使用者登入下建立網路驅動器號,但在不同使用者登入下查詢現有的網路驅動器號。 例如,藉由呼叫 CreateProcessAsUser 函式,而第二次登入會執行呼叫 getLogicalDrives 函式 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 預處理器常數的定義,將 WNetGetUniversalName 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winnetwk.h
連結庫 Mpr.lib
DLL Mpr.dll

另請參閱

判斷共用 的位置

REMOTE_NAME_INFO

UNIVERSAL_NAME_INFO

WNetAddConnection2

Windows 網路功能 (WNet) 概觀

Windows 網路函式