다음을 통해 공유


공유 위치 확인

다음 예제에서는 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;
}