2016-05-23 50 views
0

我想從NetApi32 dll使用NetServerEnum函數,但是我得到的是錯誤代碼5:「訪問被拒絕。」。 以下是我對外部dll函數的調用。從NetApi32使用NetServerEnum時訪問被拒絕

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

這是否函數調用需要一組特定的權利?我顯然在這裏失去了一些東西,但我無法弄清楚什麼。

回答

0

對於任何來自未來尋找任何類似問題的答案,我已經找到了答案。

我模擬了一個不屬於域「Domain Admins」組的Active Directory域管理員帳戶。添加管理員帳戶作爲「域管理員」的成員解決了這個問題。

所以這是一個權利問題,我猜它與本地計算機的帳戶管理系統和安全設置有關,因爲我在那裏發現'MY-PC \ Administrators'包含'我的域名\ Domain Admins'