从NetApi32使用NetServerEnum时访问被拒绝

时间:2016-05-23 10:39:39

标签: c# pinvoke netapi32

我正在尝试使用NetApi32 dll中的NetServerEnum函数,但我得到的只是错误代码5:“访问被拒绝。”。 下面是我对外部dll函数的调用。

NetError nEr;
SERVER_TYPE type = SERVER_TYPE.SV_TYPE_WORKSTATION | SERVER_TYPE.SV_TYPE_SERVER; // SV_TYPE_WORKSTATION = 0x00000001 and SV_TYPE_SERVER = 0x00000002
IntPtr bufPtr;
uint entriesread;
uint totalentries;
UInt32 resume_handle_value = 0;
uint MAX_PREFERRED_LENGTH = 0xFFFFFFFF;

nEr = (NetError)NetServerEnum(null, 100, out bufPtr, MAX_PREFERRED_LENGTH, out entriesread, out totalentries, (uint)type, null, ref resume_handle_value);

if (nEr != NetError.NERR_Success)
{
    NetApiBufferFree(bufPtr);
    throw new InvalidOperationException(nEr);//Throws here with error code 5 -> "Access was denied."
}

该函数声明为,

[DllImport("Netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern int NetServerEnum([MarshalAs(UnmanagedType.LPWStr)]string servername, uint level, out IntPtr bufptr, uint prefmaxlen, out uint entriesread, out uint totalentries, uint servertype, [MarshalAs(UnmanagedType.LPWStr)]string domain, ref uint resume_handle);

我尝试将我的域名添加到函数调用中,并使用不同的信息级别进行调用,但这也无效。

以下是该功能的Microsoft文档的链接:https://msdn.microsoft.com/en-us/library/windows/desktop/aa370623%28v=vs.85%29.aspx

此函数调用是否需要一组特定的权限?我显然在这里遗漏了一些东西,但我无法弄清楚是什么。

1 个答案:

答案 0 :(得分:0)

对于未来寻找任何类似问题答案的人,我已经明白了。

我冒充的是一个Active Directory域管理员帐户,该帐户不属于域名管理员帐户的一部分'组。将管理员帐户添加为' Domain Admins'的成员。解决了这个问题。

所以这是一个供股问题,我猜它与本地计算机的帐户管理系统和安全设置有关,因为我在那里发现了' MY -PC \管理员'包含' MY-DOMAIN \ Domain Admins'