공유 위치 확인
다음 예제에서는 WNetGetUniversalName 함수를 호출하여 리디렉션된 드라이브에서 공유 위치를 확인하는 방법을 보여 줍니다.
먼저 코드 샘플은 WNetGetUniversalName 함수를 호출하고 UNIVERSAL_NAME_INFO 정보 수준을 지정하여 리소스에 대한 UNC(범용 명명 규칙) 이름 문자열에 대한 포인터를 검색합니다. 그런 다음 샘플은 WNetGetUniversalName 을 두 번째로 호출하여 두 개의 추가 네트워크 연결 정보 문자열을 검색하는 REMOTE_NAME_INFO 정보 수준을 지정합니다. 호출에 성공하면 샘플에서 공유 위치를 인쇄합니다.
다음 코드 샘플을 테스트하려면 다음 단계를 수행합니다.
코드 샘플의 이름을 GetUni.cpp로 지정합니다.
GetUni라는 콘솔 애플리케이션에 샘플을 추가합니다.
라이브러리 Shell32.lib, Mpr.lib 및 NetApi32.lib 라이브러리를 라이브러리의 컴파일러 목록에 연결합니다.
명령 프롬프트에서 GetUni 디렉터리로 변경합니다.
GetUni.cpp를 컴파일합니다.
다음과 같이 파일 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;
}