Determinazione della posizione di una condivisione
Nell'esempio seguente viene illustrato come chiamare la funzione WNetGetUniversalName per determinare la posizione di una condivisione in un'unità reindirizzata.
In primo luogo, l'esempio di codice chiama la funzione WNetGetUniversalName , specificando il livello di informazioni UNIVERSAL_NAME_INFO per recuperare un puntatore a una stringa di nome UNC (Universal Naming Convention) per la risorsa. L'esempio chiama quindi WNetGetUniversalName una seconda volta, specificando il livello di informazioni REMOTE_NAME_INFO per recuperare due stringhe di informazioni di connessione di rete aggiuntive. Se le chiamate hanno esito positivo, l'esempio stampa la posizione della condivisione.
Per testare l'esempio di codice seguente, seguire questa procedura:
Denominare il codice di esempio GetUni.cpp.
Aggiungere l'esempio a un'applicazione console denominata GetUni.
Collegare le librerie Shell32.lib, Mpr.lib e NetApi32.lib all'elenco di librerie del compilatore.
Dal prompt dei comandi passare alla directory GetUni.
Compilare GetUni.cpp.
Eseguire il file GetUni.exe seguito da una lettera di unità e due punti, come illustrato di seguito:
GetUni H:\
#define STRICT
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#pragma comment(lib, "mpr.lib")
#define BUFFSIZE = 1000
void main( int argc, char *argv[] )
{
DWORD cbBuff = 1000; // Size of Buffer
TCHAR szBuff[1000]; // Buffer to receive information
REMOTE_NAME_INFO * prni = (REMOTE_NAME_INFO *) &szBuff;
UNIVERSAL_NAME_INFO * puni = (UNIVERSAL_NAME_INFO *) &szBuff;
DWORD res;
if((argc < 2) | (lstrcmp(argv[1], "/?") == 0))
{
printf("Syntax: GetUni DrivePathAndFilename\n"
"Example: GetUni U:\\WINNT\\SYSTEM32\\WSOCK32.DLL\n");
return;
}
// Call WNetGetUniversalName with the UNIVERSAL_NAME_INFO_LEVEL option
//
printf("Call WNetGetUniversalName using UNIVERSAL_NAME_INFO_LEVEL.\n");
if((res = WNetGetUniversalName((LPTSTR)argv[1],
UNIVERSAL_NAME_INFO_LEVEL, // The structure is written to this block of memory.
(LPVOID) &szBuff,
&cbBuff)) != NO_ERROR)
//
// If the call fails, print the error; otherwise, print the location of the share,
// using the pointer to UNIVERSAL_NAME_INFO_LEVEL.
//
printf("Error: %ld\n\n", res);
else
_tprintf(TEXT("Universal Name: \t%s\n\n"), puni->lpUniversalName);
//
// Call WNetGetUniversalName with the REMOTE_NAME_INFO_LEVEL option
//
printf("Call WNetGetUniversalName using REMOTE_NAME_INFO_LEVEL.\n");
if((res = WNetGetUniversalName((LPTSTR)argv[1],
REMOTE_NAME_INFO_LEVEL,
(LPVOID) &szBuff, //Structure is written to this block of memory
&cbBuff)) != NO_ERROR)
//
// If the call fails, print the error; otherwise, print
// the location of the share, using
// the pointer to REMOTE_NAME_INFO_LEVEL.
//
printf("Error: %ld\n", res);
else
_tprintf(TEXT("Universal Name: \t%s\nConnection Name:\t%s\nRemaining Path: \t%s\n"),
prni->lpUniversalName,
prni->lpConnectionName,
prni->lpRemainingPath);
return;
}