Как я могу запросить запомненные UNC-соединения, похожие на «net use»? - PullRequest
0 голосов
/ 30 июля 2010

Я понимаю, как извлечь UNC-путь для сопоставленного диска из реестра (HKEY_CURRENT_USER \ Network), но у меня также есть необходимость извлекать удаленные подключения к сетевым ресурсам, которые не были сопоставлены.

Например, откройте диалоговое окно «Выполнить» и введите <\ server0123 \ share $>.Если я наберу «net use», я увижу это сопоставление, но я не смог определить, где в файловой системе или реестре хранится эта информация.

alt text http://www.freeimagehosting.net/uploads/5bf1a0e3c5.jpg

Кто-нибудь знает, есть ли местоположение, из которого я могу запросить это, или API, к которому я могу обратиться, чтобы получить это?Предложения, касающиеся vbscript, C и Delphi, приветствуются!

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

WNetOpenEnum (RESOURCE_REMEMBERED, ...)

(Если вам нужна поддержка Win9x, вам, вероятно, придется вернуться к NetUseEnum )

2 голосов
/ 30 июля 2010

Мик, попробуйте использовать Win32_NetworkConnection WMI Класс

проверьте этот образец

program GetWMI_Win32_NetworkConnection;

{$APPTYPE CONSOLE}

uses
  SysUtils
  ,ActiveX
  ,ComObj
  ,Variants;


Procedure  GetWin32_NetworkConnection;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;

begin
  objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
  colItems      := objWMIService.ExecQuery('SELECT * FROM Win32_NetworkConnection','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  begin
    Writeln('Caption        '+colItem.Caption);
    Writeln('Name           '+colItem.Name);
    Writeln('ConnectionState'+colItem.ConnectionState);
    Writeln('ConnectionType '+colItem.ConnectionType);
    Writeln('Description    '+colItem.Description);
    Writeln('DisplayType    '+colItem.DisplayType);
    Writeln('LocalName      '+colItem.LocalName);
    Writeln('ProviderName   '+colItem.ProviderName);
    Writeln('RemoteName     '+colItem.RemoteName);
    Writeln('RemotePath     '+colItem.RemotePath);
    Writeln('ResourceType   '+colItem.ResourceType);
    Writeln('Status         '+colItem.Status);
    Writeln('UserName       '+colItem.UserName);
    Writeln;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetWin32_NetworkConnection;
      Readln;
    finally
    CoUninitialize;
    end;
 except
    on E:Exception do
    Begin
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;
end.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...