使用 NetApi32 中的 NetServerEnum 时访问被拒绝
Access denied while using NetServerEnum from NetApi32
我正在尝试使用 NetApi32 dll 中的 NetServerEnum 函数,但我得到的只是错误代码 5:"Access was denied."。
下面是我对外部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 文档的 link:https://msdn.microsoft.com/en-us/library/windows/desktop/aa370623%28v=vs.85%29.aspx
此函数调用是否需要一组特定的权限?我显然在这里遗漏了一些东西,但我不知道是什么。
对于未来寻找任何类似问题答案的任何人,我已经找到答案了。
我正在模拟不属于域 'Domain Admins' 组的 Active Directory 域管理员帐户。将管理员帐户添加为 'Domain Admins' 的成员解决了这个问题。
所以这是一个权利问题,我猜它与本地计算机的帐户管理系统和安全设置有关,因为我在那里发现 'MY-PC\Administrators' 包含 'MY-DOMAIN\Domain Admins'
我正在尝试使用 NetApi32 dll 中的 NetServerEnum 函数,但我得到的只是错误代码 5:"Access was denied."。 下面是我对外部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 文档的 link:https://msdn.microsoft.com/en-us/library/windows/desktop/aa370623%28v=vs.85%29.aspx
此函数调用是否需要一组特定的权限?我显然在这里遗漏了一些东西,但我不知道是什么。
对于未来寻找任何类似问题答案的任何人,我已经找到答案了。
我正在模拟不属于域 'Domain Admins' 组的 Active Directory 域管理员帐户。将管理员帐户添加为 'Domain Admins' 的成员解决了这个问题。
所以这是一个权利问题,我猜它与本地计算机的帐户管理系统和安全设置有关,因为我在那里发现 'MY-PC\Administrators' 包含 'MY-DOMAIN\Domain Admins'