c++ - 如何查询类似于 "net use"的内存 UNC 连接?

标签 c++ windows delphi winapi vbscript

我了解如何从注册表 (HKEY_CURRENT_USER\Network) 检索映射驱动器的 UNC 路径,但我还需要检索未映射的网络资源的远程连接。

例如,打开“运行”对话框并键入 <\server0123\share$>。如果我键入“net use”,我会看到此映射,但我无法确定此信息存储在文件系统或注册表中的位置。

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

有谁知道我可以从中查询这个的位置,或者我可以调用一个 API 来获取这个?非常欢迎涉及 vbscript、C 和 Delphi 的建议!

最佳答案

Mick,尝试使用 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.

关于c++ - 如何查询类似于 "net use"的内存 UNC 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3366880/

相关文章:

Delphi - 从外部文件执行函数和过程

c++ - 如何在声明后为 unique_ptr 赋值?

python - 检测接近的物体

c++ - 在慢速编译环境中编码的最佳方法是什么?

windows - 在 jenkins 重新部署 war 之前自动启动停止远程 tomcat(部署插件)

delphi - 嵌入式 firebird 2.5 >> DBX 错误 : Driver could not be properly initialised

c++ - 数字不断求和但不停止求和

c# - 如何在 C# 中停止进程,知道它的文件名?

Java KeyBindings 组合不起作用

mysql - Delphi 中的 SQL SELECT INTO FROM 中的语法错误