擷取網路資源的相關資訊
若要識別擁有資源的網路提供者,應用程式可以呼叫 WNetGetResourceInformation 函式 ,如下列程式碼範例所示。
下列範例是 CheckServer (函式) ,其會採用伺服器名稱做為參數,並傳回該伺服器的相關資訊。 首先,函式會呼叫 ZeroMemory 函式,將記憶體區塊的內容初始化為零。 然後,此範例會呼叫 WNetGetResourceInformation 函式 ,指定足以保存 NETRESOURCE 結構的緩衝區。 常式包含錯誤處理,以處理這個大小的緩衝區不足以保存 NETRESOURCE 結構點成員的可變長度字串時的情況。 如果發生此錯誤,此範例會配置足夠的記憶體,並再次呼叫 WNetGetResourceInformation 。 最後,此範例會釋放配置的記憶體。
請注意,此範例假設 pszServer 參數指向本機電腦上其中一個網路提供者可辨識的伺服器名稱。
#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;
}