Share via


WNetGetUniversalNameA-Funktion (winnetwk.h)

Die WNetGetUniversalName-Funktion verwendet einen laufwerkbasierten Pfad für eine Netzwerkressource und gibt eine Informationsstruktur zurück, die eine universellere Form des Namens enthält.

Syntax

DWORD WNetGetUniversalNameA(
  [in]      LPCSTR  lpLocalPath,
  [in]      DWORD   dwInfoLevel,
  [out]     LPVOID  lpBuffer,
  [in, out] LPDWORD lpBufferSize
);

Parameter

[in] lpLocalPath

Ein Zeiger auf eine konstante NULL-Zeichenfolge, die ein laufwerksbasierter Pfad für eine Netzwerkressource ist.

Wenn Laufwerk H beispielsweise einer Netzwerklaufwerkfreigabe zugeordnet wurde und die netzwerkbasierte Ressource eine Datei mit dem Namen Sample.doc im Verzeichnis \Win32\Examples auf dieser Freigabe ist, wird der laufwerksbasierte Pfad H:\Win32\Examples\Sample.doc.

[in] dwInfoLevel

Der Strukturtyp, den die Funktion im Puffer speichert, auf den der lpBuffer-Parameter verweist. Dieser Parameter kann einer der folgenden Werte sein, die in der Winnetwk.h-Headerdatei definiert sind.

Wert Bedeutung
UNIVERSAL_NAME_INFO_LEVEL
Die Funktion speichert eine UNIVERSAL_NAME_INFO-Struktur im Puffer.
REMOTE_NAME_INFO_LEVEL
Die Funktion speichert eine REMOTE_NAME_INFO-Struktur im Puffer.
 

Die UNIVERSAL_NAME_INFO-Struktur verweist auf eine UNC-Namenszeichenfolge (Universal Naming Convention).

Die REMOTE_NAME_INFO-Struktur verweist auf eine UNC-Namenszeichenfolge und zwei zusätzliche Verbindungsinformationszeichenfolgen. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[out] lpBuffer

Ein Zeiger auf einen Puffer, der die durch den dwInfoLevel-Parameter angegebene Struktur empfängt.

[in, out] lpBufferSize

Ein Zeiger auf eine Variable, der die Größe des Puffers in Bytes angibt, auf den der lpBuffer-Parameter verweist.

Wenn die Funktion erfolgreich ist, legt sie die Variable, auf die von lpBufferSize verwiesen wird, auf die Anzahl der im Puffer gespeicherten Bytes fest. Wenn die Funktion fehlschlägt, weil der Puffer zu klein ist, empfängt dieser Speicherort die erforderliche Puffergröße, und die Funktion gibt ERROR_MORE_DATA zurück.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR.

Wenn die Funktion fehlschlägt, ist der Rückgabewert ein Systemfehlercode, z. B. einer der folgenden Werte.

Rückgabecode Beschreibung
ERROR_BAD_DEVICE
Die Zeichenfolge, auf die der lpLocalPath-Parameter verweist, ist ungültig.
ERROR_CONNECTION_UNAVAIL
Es besteht keine aktuelle Verbindung mit dem Remotegerät, es besteht jedoch eine gespeicherte (dauerhafte) Verbindung.
ERROR_EXTENDED_ERROR
Es ist ein netzwerkspezifischer Fehler aufgetreten. Verwenden Sie die WNetGetLastError-Funktion , um eine Beschreibung des Fehlers abzurufen.
ERROR_MORE_DATA
Der Puffer, auf den der lpBuffer-Parameter verweist, ist zu klein. Die Funktion legt die Variable, auf die der parameter lpBufferSize verweist, auf die erforderliche Puffergröße fest. Weitere Einträge sind bei nachfolgenden Aufrufen verfügbar.
ERROR_NOT_SUPPORTED
Der dwInfoLevel-Parameter ist auf UNIVERSAL_NAME_INFO_LEVEL festgelegt, aber der Netzwerkanbieter unterstützt keine UNC-Namen. (Keiner der Netzwerkanbieter unterstützt diese Funktion.)
ERROR_NO_NET_OR_BAD_PATH
Keiner der Netzwerkanbieter erkennt, dass der lokale Name eine Verbindung aufweist. Das Netzwerk ist jedoch nicht für mindestens einen Anbieter verfügbar, zu dem die Verbindung möglicherweise gehört.
ERROR_NO_NETWORK
Das Netzwerk ist nicht verfügbar.
ERROR_NOT_CONNECTED
Das durch den lpLocalPath-Parameter angegebene Gerät wird nicht umgeleitet.

Hinweise

Eine universelle Form eines lokalen laufwerkbasierten Pfads identifiziert eine Netzwerkressource auf eindeutige, computerunabhängige Weise. Der Name kann dann an Prozesse auf anderen Computern übergeben werden, sodass diese Prozesse Zugriff auf die Ressource erhalten können.

Die WNetGetUniversalName-Funktion unterstützt derzeit eine universelle Namensform: UNC-Namen (Universal Naming Convention), die wie folgt aussehen:

\\servername\sharename\path\file 

Wenn sich das freigegebene Netzwerklaufwerk auf einem Server namens COOLSERVER befindet und der Freigabename HOTSHARE ist, lautet der UNC-Name für die Netzwerkressource, deren laufwerksbasierter Name H:\Win32\Examples\Sample.doc ist, anhand des Beispiels aus der vorherigen Beschreibung des parameters lpLocalPath :

\\coolserver\hotshare\win32\examples\sample.doc 

Die UNIVERSAL_NAME_INFO-Struktur enthält einen Zeiger auf eine UNC-Namenszeichenfolge. Die REMOTE_NAME_INFO-Struktur enthält auch einen Zeiger auf eine UNC-Namenszeichenfolge sowie Zeiger auf zwei weitere nützliche Zeichenfolgen. Beispielsweise kann ein Prozess den lpszConnectionInfo-Member der REMOTE_NAME_INFO-Struktur an die WNetAddConnection2-Funktion übergeben, um ein lokales Gerät mit der Netzwerkressource zu verbinden. Dann kann der Prozess die Zeichenfolge anfügen, auf die der lpszRemainingPath-Member verweist, an die lokale Gerätezeichenfolge. Die resultierende Zeichenfolge kann an Funktionen übergeben werden, die einen laufwerksbasierten Pfad erfordern.

Der lpLocalPath-Parameter muss keinen Pfad oder eine Ressource angeben, die bereits auf einer Remoteressource vorhanden ist. Der Parameter lpLocalPath könnte beispielsweise einen Ordner, eine Hierarchie von Ordnern oder eine Datei angeben, die derzeit nicht vorhanden ist. Die WNetGetUniversalName-Funktion gibt in diesen Fällen eine universellere Form des Namens zurück.

Die Größe des Puffers, auf den der lpBuffer-Parameter verweist und im parameter lpBufferSize angegeben ist, muss viel größer sein als die Größe der REMOTE_NAME_INFO - oder UNIVERSAL_NAME_INFO-Strukturen . Der Puffer, auf den der lpBuffer-Parameter verweist, muss groß genug sein, um die UNC-Zeichenfolgen zu speichern, auf die die Member in den REMOTE_NAME_INFO - oder UNIVERSAL_NAME_INFO-Strukturen verweisen. Wenn die Puffergröße zu klein ist, schlägt die Funktion mit ERROR_MORE_DATA fehl, und die Variable, auf die vom parameter lpBufferSize verwiesen wird, gibt die erforderliche Puffergröße an.

Windows Server 2003 und Windows XP: Diese Funktion fragt die MS-DOS-Gerätenamespaces ab, die einer Anmeldesitzung zugeordnet sind, da MS-DOS-Geräte durch AuthenticationID identifiziert werden. (Eine AuthenticationID ist der lokal eindeutige Bezeichner oder LUID, der einer Anmeldesitzung zugeordnet ist.) Dies kann sich auf Anwendungen auswirken, die eine der WNet-Funktionen aufrufen, um einen Netzwerklaufwerkbuchstaben unter einer Benutzeranmeldung zu erstellen, aber nach vorhandenen Netzlaufwerkbuchstaben unter einer anderen Benutzeranmeldung abfragen. Ein Beispiel für diese Situation kann sein, wenn die zweite Anmeldung eines Benutzers innerhalb einer Anmeldesitzung erstellt wird, z. B. durch Aufrufen der CreateProcessAsUser-Funktion , und die zweite Anmeldung eine Anwendung ausführt, die die GetLogicalDrives-Funktion aufruft . GetLogicalDrives gibt keine Netzwerklaufwerkbuchstaben zurück, die von einer WNet-Funktion unter der ersten Anmeldung erstellt wurden. Beachten Sie, dass im vorherigen Beispiel die erste Anmeldesitzung weiterhin vorhanden ist und das Beispiel auf jede Anmeldesitzung, einschließlich einer Terminaldienstesitzung, angewendet werden kann. Weitere Informationen finden Sie unter Definieren eines MS-DOS-Gerätenamens.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie die WNetGetUniversalName-Funktion verwenden, um die universellen UNC-Namenzeichenfolgen abzurufen, die dem laufwerksbasierten Pfad für eine Netzwerkressource zugeordnet sind.

#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);
    }
}


Hinweis

Der winnetwk.h-Header definiert WNetGetUniversalName als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winnetwk.h
Bibliothek Mpr.lib
DLL Mpr.dll

Weitere Informationen

Ermitteln des Speicherorts einer Freigabe

REMOTE_NAME_INFO

UNIVERSAL_NAME_INFO

WNetAddConnection2

Übersicht über Windows-Netzwerke (WNet)

Windows-Netzwerkfunktionen