Partager via


Détermination de l’emplacement d’un partage

L’exemple suivant montre comment appeler la fonction WNetGetUniversalName pour déterminer l’emplacement d’un partage sur un lecteur redirigé.

Tout d’abord, l’exemple de code appelle la fonction WNetGetUniversalName , en spécifiant le niveau d’informations UNIVERSAL_NAME_INFO pour récupérer un pointeur vers une chaîne de nom unC (Universal Naming Convention) pour la ressource. Ensuite, l’exemple appelle WNetGetUniversalName une deuxième fois, en spécifiant le niveau d’informations REMOTE_NAME_INFO pour récupérer deux chaînes d’informations de connexion réseau supplémentaires. Si les appels réussissent, l’exemple imprime l’emplacement du partage.

Pour tester l’exemple de code suivant, effectuez les étapes suivantes :

  1. Nommez l’exemple de code GetUni.cpp.

  2. Ajoutez l’exemple à une application console appelée GetUni.

  3. Liez les bibliothèques Shell32.lib, Mpr.lib et NetApi32.lib à la liste des bibliothèques du compilateur.

  4. À partir de l’invite de commandes, accédez au répertoire GetUni.

  5. Compilez GetUni.cpp.

  6. Exécutez le fichier GetUni.exe suivi d’une lettre de lecteur et de deux-points, comme suit :

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