Funzione WNetGetUniversalNameA (winnetwk.h)
La funzione WNetGetUniversalName
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 di interesse è 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 archiviato dalla funzione nel buffer a cui punta il parametro lpBuffer
Valore | Significato |
---|---|
|
La funzione archivia una struttura UNIVERSAL_NAME_INFO nel buffer. |
|
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 altre informazioni, vedere la sezione Osservazioni seguente.
[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 a cui punta 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 |
---|---|
|
La stringa a cui punta il parametro |
|
Non esiste una connessione corrente al dispositivo remoto, ma è presente una connessione memorizzata (persistente). |
|
Si è verificato un errore specifico della rete. Usare la funzione WNetGetLastError |
|
Il buffer a cui punta il parametro lpBuffer |
|
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. |
|
Nessuno dei provider di rete riconosce il nome locale come avere una connessione. Tuttavia, la rete non è disponibile per almeno un provider a cui può appartenere la connessione. |
|
La rete non è disponibile. |
|
Il dispositivo specificato dal parametro lpLocalPath non viene reindirizzato. |
Osservazioni
Una forma universale di un percorso locale basato su unità 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
\\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
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 attualmente non esistente. La funzione WNetGetUniversalName
Le dimensioni del buffer a cui punta il parametro lpBuffer
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. AuthenticationID è l'identificatore univoco locale o LUID associato a una sessione di accesso. Ciò può influire sulle applicazioni che chiamano una delle funzioni WNet per creare una lettera di unità di rete con un accesso utente, ma eseguire una query per le lettere di unità di rete esistenti con un accesso utente diverso. Un esempio di questa situazione può essere quando viene creato il secondo accesso di un utente 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 di dispositivo MS-DOS.
Esempi
L'esempio di codice seguente illustra come usare la funzione WNetGetUniversalName
#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 del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 2000 Professional [solo app desktop] |
server minimo supportato | Windows 2000 Server [solo app desktop] |
piattaforma di destinazione | Finestre |
intestazione |
winnetwk.h |
libreria |
Mpr.lib |
dll | Mpr.dll |
Vedere anche
Determinare la posizione di un di condivisione
Panoramica rete Windows