Freigeben über


Abrufen von Informationen zu einer Netzwerkressource

Um den Netzwerkanbieter zu identifizieren, der eine Ressource besitzt, kann eine Anwendung die WNetGetResourceInformation-Funktion aufrufen, wie im folgenden Codebeispiel veranschaulicht.

Das folgende Beispiel ist eine Funktion (CheckServer), die einen Servernamen als Parameter annimmt und Informationen zu diesem Server zurückgibt. Zuerst ruft die Funktion die ZeroMemory-Funktion auf, um den Inhalt eines Speicherblocks auf Null zu initialisieren. Anschließend ruft das Beispiel die WNetGetResourceInformation-Funktion auf und gibt einen Puffer an, der groß genug ist, um nur eine NETRESOURCE-Struktur zu enthalten. Die Routine umfasst die Fehlerverarbeitung, um den Fall zu behandeln, wenn ein Puffer dieser Größe nicht ausreicht, um die Zeichenfolgen mit variabler Länge aufzunehmen, für die Elemente des NETRESOURCE-Strukturpunkts verwendet werden. Wenn dieser Fehler auftritt, weist das Beispiel genügend Arbeitsspeicher zu und ruft WNetGetResourceInformation erneut auf. Schließlich gibt das Beispiel den zugewiesenen Arbeitsspeicher frei.

Beachten Sie, dass im Beispiel davon ausgegangen wird, dass der pszServer-Parameter auf einen Servernamen verweist, den einer der Netzwerkanbieter auf dem lokalen Computer erkennt.

#include <Windows.h>
#include <Winnetwk.h >

// Need to link with Mpr.lib
#pragma comment(lib, "Mpr.lib")
//
// Verify a server on the network. 
//
DWORD
CheckServer( LPTSTR pszServer )
{  
    DWORD dwBufferSize = sizeof(NETRESOURCE);
    LPBYTE lpBuffer;                  // buffer
    NETRESOURCE nr;
    LPTSTR pszSystem = NULL;          // variable-length strings

    //
    // Set the block of memory to zero; then initialize
    // the NETRESOURCE structure. 
    //
    ZeroMemory(&nr, sizeof(nr));

    nr.dwScope       = RESOURCE_GLOBALNET;
    nr.dwType        = RESOURCETYPE_ANY;
    nr.lpRemoteName  = pszServer;

    //
    // First call the WNetGetResourceInformation function with 
    // memory allocated to hold only a NETRESOURCE structure. This 
    // method can succeed if all the NETRESOURCE pointers are NULL.
    // If the call fails because the buffer is too small, allocate
    // a larger buffer.
    //
    lpBuffer = (LPBYTE) malloc( dwBufferSize );
    if (lpBuffer == NULL) 
        return FALSE;

    while ( WNetGetResourceInformation(&nr, lpBuffer, &dwBufferSize, 
                &pszSystem) == ERROR_MORE_DATA)
    {
        lpBuffer = (LPBYTE) realloc(lpBuffer, dwBufferSize);
    }

    // Process the contents of the NETRESOURCE structure and the
    // variable-length strings in lpBuffer and set dwValue. When
    // finished, free the memory.

    free(lpBuffer);

    return TRUE;
}