ネットワーク リソースに関する情報の取得
次のコード サンプルに示すように、リソースを所有するネットワーク プロバイダーを識別するために、アプリケーションは WNetGetResourceInformation 関数を呼び出すことができます。
次の例は、サーバー名をパラメーターとして受け取り、そのサーバーに関する情報を返す関数 (CheckServer) です。 最初に、関数は ZeroMemory 関数を呼び出して、メモリ ブロックの内容を 0 に初期化します。 次に、サンプルは WNetGetResourceInformation 関数を呼び出し、 NETRESOURCE 構造体のみを保持するのに十分な大きさのバッファーを指定します。 このルーチンには、このサイズのバッファーが 、NETRESOURCE 構造体ポイントのメンバーの可変長文字列を保持するのに不十分な場合に処理するエラー処理が含まれます。 このエラーが発生した場合、サンプルは十分なメモリを割り当て、 WNetGetResourceInformation をもう一度呼び出します。 最後に、このサンプルでは、割り当てられたメモリが解放されます。
このサンプルでは、 pszServer パラメーターが、ローカル コンピューター上のネットワーク プロバイダーの 1 つが認識するサーバー名を指していることを前提としています。
#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;
}