Поделиться через


Определение расположения общей папки

В следующем примере показано, как вызвать функцию WNetGetUniversalName , чтобы определить расположение общей папки на перенаправленном диске.

Сначала в примере кода вызывается функция WNetGetUniversalName , указывающая уровень сведений UNIVERSAL_NAME_INFO для получения указателя на строку имени UNC для ресурса. Затем пример вызывает WNetGetUniversalName во второй раз, указывая уровень сведений REMOTE_NAME_INFO для получения двух дополнительных строк сведений о сетевом подключении. Если вызовы выполняются успешно, образец выводит расположение общей папки.

Чтобы протестировать следующий пример кода, выполните следующие действия.

  1. Назовите пример кода GetUni.cpp.

  2. Добавьте пример в консольное приложение с именем GetUni.

  3. Свяжите библиотеки Shell32.lib, Mpr.lib и NetApi32.lib со списком библиотек компилятора.

  4. В командной строке перейдите в каталог GetUni.

  5. Скомпилируйте GetUni.cpp.

  6. Запустите файл GetUni.exe за которым следует буква диска и двоеточие, как показано ниже:

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