Ermitteln des Speicherorts einer Freigabe
Im folgenden Beispiel wird veranschaulicht, wie Sie die WNetGetUniversalName-Funktion aufrufen, um den Speicherort einer Freigabe auf einem umgeleiteten Laufwerk zu bestimmen.
Zunächst ruft das Codebeispiel die WNetGetUniversalName-Funktion auf, die die UNIVERSAL_NAME_INFO Informationsebene angibt, um einen Zeiger auf eine UNC-Namenszeichenfolge (Universal Naming Convention) für die Ressource abzurufen. Anschließend ruft das Beispiel WNetGetUniversalName ein zweites Mal auf, und gibt die REMOTE_NAME_INFO Informationsebene an, um zwei zusätzliche Netzwerkverbindungsinformationszeichenfolgen abzurufen. Wenn die Aufrufe erfolgreich sind, gibt das Beispiel den Speicherort der Freigabe aus.
Führen Sie zum Testen des folgenden Codebeispiels die folgenden Schritte aus:
Nennen Sie das Codebeispiel GetUni.cpp.
Fügen Sie das Beispiel einer Konsolenanwendung namens GetUni hinzu.
Verknüpfen Sie die Bibliotheken Shell32.lib, Mpr.lib und NetApi32.lib mit der Compilerliste der Bibliotheken.
Wechseln Sie an der Eingabeaufforderung zum Verzeichnis GetUni.
Kompilieren Sie GetUni.cpp.
Führen Sie die Datei GetUni.exe gefolgt von einem Laufwerkbuchstaben und Doppelpunkt wie folgt aus:
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;
}