Condividi tramite


Funzione WNetGetUniversalNameA (winnetwk.h)

La funzione WNetGetUniversalName accetta un percorso basato su unità per una risorsa di rete e restituisce una struttura di informazioni che contiene una forma più universale del nome.

Sintassi

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

Parametri

[in] lpLocalPath

Puntatore a una stringa con terminazione null costante che rappresenta un percorso basato su unità per una risorsa di rete.

Ad esempio, se l'unità H è stata mappata a una condivisione di unità di rete e la risorsa di rete è un file denominato Sample.doc nella directory \Win32\Examples in tale condivisione, il percorso basato su unità è H:\Win32\Examples\Sample.doc.

[in] dwInfoLevel

Tipo di struttura archiviata dalla funzione nel buffer a cui punta il parametro lpBuffer . Questo parametro può essere uno dei valori seguenti definiti nel file di intestazione Winnetwk.h .

Valore Significato
UNIVERSAL_NAME_INFO_LEVEL
La funzione archivia una struttura UNIVERSAL_NAME_INFO nel buffer.
REMOTE_NAME_INFO_LEVEL
La funzione archivia una struttura REMOTE_NAME_INFO nel buffer.
 

La struttura UNIVERSAL_NAME_INFO punta a una stringa di nome UNC (Universal Naming Convention).

La struttura REMOTE_NAME_INFO punta a una stringa di nome UNC e due stringhe di informazioni di connessione aggiuntive. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[out] lpBuffer

Puntatore a un buffer che riceve la struttura specificata dal parametro dwInfoLevel .

[in, out] lpBufferSize

Puntatore a una variabile che specifica le dimensioni, in byte, del buffer a cui punta il parametro lpBuffer .

Se la funzione ha esito positivo, imposta la variabile puntata da lpBufferSize sul numero di byte archiviati nel buffer. Se la funzione ha esito negativo perché il buffer è troppo piccolo, questa posizione riceve le dimensioni del buffer necessarie e la funzione restituisce ERROR_MORE_DATA.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è NO_ERROR.

Se la funzione ha esito negativo, il valore restituito è un codice di errore di sistema, ad esempio uno dei valori seguenti.

Codice restituito Descrizione
ERROR_BAD_DEVICE
La stringa a cui punta il parametro lpLocalPath non è valida.
ERROR_CONNECTION_UNAVAIL
Non esiste alcuna connessione corrente al dispositivo remoto, ma è presente una connessione ricordata (persistente).
ERROR_EXTENDED_ERROR
Si è verificato un errore specifico della rete. Usare la funzione WNetGetLastError per ottenere una descrizione dell'errore.
ERROR_MORE_DATA
Il buffer a cui punta il parametro lpBuffer è troppo piccolo. La funzione imposta la variabile puntata al parametro lpBufferSize sulla dimensione del buffer necessaria. Altre voci sono disponibili con chiamate successive.
ERROR_NOT_SUPPORTED
Il parametro dwInfoLevel è impostato su UNIVERSAL_NAME_INFO_LEVEL, ma il provider di rete non supporta i nomi UNC. Nessuno dei provider di rete supporta questa funzione.
ERROR_NO_NET_OR_BAD_PATH
Nessuno dei provider di rete riconosce il nome locale come connessione. Tuttavia, la rete non è disponibile per almeno un provider a cui la connessione può appartenere.
ERROR_NO_NETWORK
La rete non è disponibile.
ERROR_NOT_CONNECTED
Il dispositivo specificato dal parametro lpLocalPath non viene reindirizzato.

Commenti

Una forma universale di un percorso basato su unità locale identifica una risorsa di rete in modo non ambiguo e indipendente dal computer. Il nome può quindi essere passato ai processi in altri computer, consentendo a tali processi di ottenere l'accesso alla risorsa.

La funzione WNetGetUniversalName supporta attualmente un modulo di nome universale: nomi UNC (Universal Naming Convention), che hanno un aspetto simile al seguente:

\\servername\sharename\path\file 

Usando l'esempio della descrizione precedente del parametro lpLocalPath , se l'unità di rete condivisa si trova in un server denominato COOLSERVER e il nome della condivisione è HOTSHARE, il nome UNC per la risorsa di rete il cui nome basato su unità è H:\Win32\Examples\Sample.doc sarà il seguente:

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

La struttura UNIVERSAL_NAME_INFO contiene un puntatore a una stringa di nome UNC. La struttura REMOTE_NAME_INFO contiene anche un puntatore a una stringa di nome UNC, nonché puntatori a due altre stringhe utili. Ad esempio, un processo può passare il membro lpszConnectionInfo della struttura REMOTE_NAME_INFO alla funzione WNetAddConnection2 per connettere un dispositivo locale alla risorsa di rete. Il processo può quindi aggiungere la stringa puntata dal membro lpszRemainingPath alla stringa del dispositivo locale. La stringa risultante può essere passata a funzioni che richiedono un percorso basato su unità.

Il parametro lpLocalPath non deve specificare un percorso o una risorsa già presente in una risorsa remota. Ad esempio, il parametro lpLocalPath potrebbe specificare e cartella, una gerarchia di cartelle o un file che non esiste attualmente. La funzione WNetGetUniversalName restituisce una forma più universale del nome in questi casi.

Le dimensioni del buffer a cui fa riferimento il parametro lpBuffer e specificate nel parametro lpBufferSize devono essere molto maggiori delle dimensioni delle strutture REMOTE_NAME_INFO o UNIVERSAL_NAME_INFO. Il buffer a cui punta il parametro lpBuffer deve essere sufficiente per archiviare le stringhe UNC puntate dai membri nelle strutture REMOTE_NAME_INFO o UNIVERSAL_NAME_INFO . Se la dimensione del buffer è troppo piccola, la funzione non riesce con ERROR_MORE_DATA e la variabile puntata dal parametro lpBufferSize indica la dimensione del buffer necessaria.

Windows Server 2003 e Windows XP: Questa funzione esegue una query sugli spazi dei nomi dei dispositivi MS-DOS associati a una sessione di accesso perché i dispositivi MS-DOS sono identificati da AuthenticationID. Un AuthenticationID è l'identificatore univoco locale o LUID associato a una sessione di accesso. Ciò può influire sulle applicazioni che chiamano una delle funzioni di rete per creare una lettera di unità di rete con un accesso utente, ma eseguire una query sulle lettere di unità di rete esistenti con un accesso utente diverso. Un esempio di questa situazione potrebbe essere quando il secondo accesso di un utente viene creato all'interno di una sessione di accesso, ad esempio chiamando la funzione CreateProcessAsUser e il secondo accesso esegue un'applicazione che chiama la funzione GetLogicalDrives . GetLogicalDrives non restituisce lettere di unità di rete create da una funzione WNet sotto il primo accesso. Si noti che nell'esempio precedente la prima sessione di accesso esiste ancora e l'esempio può essere applicato a qualsiasi sessione di accesso, inclusa una sessione di Servizi terminal. Per altre informazioni, vedere Definizione di un nome del dispositivo MS-DOS.

Esempio

Nell'esempio di codice seguente viene illustrato come usare la funzione WNetGetUniversalName per recuperare le stringhe di nome UNC universali associate al percorso basato su unità per una risorsa di rete.

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


Nota

L'intestazione winnetwk.h definisce WNetGetUniversalName come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winnetwk.h
Libreria Mpr.lib
DLL Mpr.dll

Vedi anche

Determinazione della posizione di una condivisione

REMOTE_NAME_INFO

UNIVERSAL_NAME_INFO

WNetAddConnection2

Panoramica di Rete Windows (WNet)

Funzioni di rete Windows