PInvoke NetUseEnum

问题描述

我想从 C# 执行 NetUseEnum。我的目标是列出本地计算机可用的网络共享。我对要传递的参数的偏好是:

  1. UncServerName = null; (使用本地计算机)
  2. LevelFlags = 0; (USE_INFO_0)

正确的方法签名是什么?

[DllImport("C:\\dev\\netapi32.dll",SetLastError = true,CharSet = CharSet.Unicode)]
public static extern uint NetUseEnum(
    UnmanagedType uncServerName,UInt32 level,ref IntPtr buf,UInt32 preferedMaximumSize,out int entriesRead,out int totalEntries,IntPtr resumeHandle
);

正确的方法调用是什么?

static void Main(string[] args) {
    string UncServerName;
    IntPtr lBuffer = IntPtr.Zero;
    int lRead;
    int lTotal;
    IntPtr lHandle = IntPtr.Zero;           

    NetUseEnum(null,ref lBuffer,0xffffffff,out lRead,out lTotal,lHandle);

    //iterate through lBuffer

    NetApiBufferFree(lBuffer);
}

上面的代码不能正常工作,因为需要修改字符串处理代码。
特别是,WinAPI(更喜欢使用指向 Unicode 字符串的指针,即 LPWStr)和 C#(更喜欢使用 strings/Strings)之间发生不兼容。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)