あるコンピュータの共有リソースを列挙する

前回のネットワークリソース列挙のソースをちょっと修正してあるコンピュータのリソースを表示するサンプルが以下のコードです。このサンプルではコンピュータ名 "Borland"のリソースを表示します。

■ あるコンピュータの共有リソースを列挙する例
  procedure TForm1.Button1Click(Sender: TObject);
  type
    {NETRESOURCE構造体}
    PNetResourceArray = ^TNetResourceArray;
    TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1] of TNetResource;
  var
    hEnum         : THandle;  {列挙ハンドル}
    cEntries      : integer;  {要求エントリ数}
    BufSize       : integer;  {バッファサイズ(NETRESOURCEのサイズ)}
    ix            : integer;  {添え字}
    NetResources  : PNetResourceArray;  {バッファ用}
    lpnr : TNETRESOURCE;
  begin
    lpnr.dwScope       :=    RESOURCE_GLOBALNET;
    lpnr.dwType        :=    RESOURCETYPE_DISK;
    lpnr.dwDisplayType :=    RESOURCEDISPLAYTYPE_GENERIC;
    lpnr.dwUsage       :=    RESOURCEUSAGE_CONNECTABLE;
    lpnr.lpLocalName   :=    '';
    lpnr.lpRemoteName  :=    '\\Borland';
    lpnr.lpComment     :=    '';
    lpnr.lpProvider    :=    '';
    {ネットワークリソースの列挙を開始する}
    if  WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,@lpnr,hEnum) <> NO_ERROR  then begin
      {失敗}
      WNetCloseEnum(hEnum);
      exit;
    end;
    {バッファの確保}
    BufSize := 50 * SizeOf(TNetResource); {十分なサイズを与えろ!}
    GetMem(NetResources, BufSize);
    cEntries := -1;
    {リソース情報の取得 : ここがメイン}
    if  WNetEnumResource( hEnum,cEntries,NetResources,BufSize) <> NO_ERROR then begin
      {失敗}
      WNetCloseEnum(hEnum);
      FreeMem(NetResources, BufSize);
      exit;
    end;
    for ix  :=  0 to  cEntries - 1  do  begin
      {ローカル名}
      ListBox1.Items.Add(NetResources^[ix].lpLocalName);
      {リモート名}
      ListBox1.Items.Add(NetResources^[ix].lpRemoteName);
      {コメント}
      ListBox1.Items.Add(NetResources^[ix].lpComment);
    end;
    {列挙ハンドルの閉鎖}
    WNetCloseEnum(hEnum);
    {バッファの開放}
    FreeMem(NetResources, BufSize);
  end;