Aracılığıyla paylaş


Paylaşımın Konumunu Belirleme

Aşağıdaki örnek, yeniden yönlendirilen bir sürücüdeki paylaşımın konumunu belirlemek için WNetGetUniversalName işlevinin nasıl çağrıldığını gösterir.

Kod örneği ilk olarak WNetGetUniversalName işlevini çağırır ve kaynağın Evrensel Adlandırma Kuralı (UNC) ad dizesinin işaretçisini almak için UNIVERSAL_NAME_INFO bilgi düzeyini belirtir. Ardından örnek, iki ek ağ bağlantısı bilgi dizesi almak için REMOTE_NAME_INFO bilgi düzeyini belirterek WNetGetUniversalName ikinci kez çağırır. Çağrılar başarılı olursa, örnek kod paylaşımın konumunu çıkış verir.

Aşağıdaki kod örneğini test etmek için aşağıdaki adımları gerçekleştirin:

  1. Kod örneğini GetUni.cpp adlandırın.

  2. Örneği GetUni adlı bir konsol uygulamasına ekleyin.

  3. Shell32.lib, Mpr.lib ve NetApi32.lib kitaplıklarını derleyici kitaplık listesine bağlayın.

  4. Komut isteminden GetUni dizinine geçin.

  5. Derle GetUni.cpp.

  6. Dosya GetUni.exe'ı bir sürücü harfi ve iki nokta ile, bu şekilde çalıştırın:

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