2012-10-01 63 views
2

我必須瞭解本地計算機是否仍加入域,或者如果另一臺計算機使用了該計算機帳戶,或者計算機帳戶已被重置。驗證本地計算機的Active Directory域信任關係

換句話說,我需要驗證在本地計算機和域

NLTEST/SC_VERIFY之間的信任關係:{域}工作得很好。

是否有我可以用它來檢測本地計算機是否已經失去了一個域的信任關係的任何API函數?我不喜歡從我的程序中調用外部可執行文件。

我試過至今:

  • NetGetJoinInformation():它沒有意識到這一點。
  • DsBind *():它沒有意識到它。也試圖在本地系統帳戶下調用它。

任何想法?

回答

2

好的。大量的挖掘後,我終於找到了解決辦法:I_NetLogonControl2

NETLOGON_INFO_2* buffer=NULL; 
LPBYTE domainName = (LPBYTE) L"eng"; 

int ret = I_NetLogonControl2(NULL, NETLOGON_CONTROL_TC_VERIFY, 2, (LPBYTE) &domainName, (LPBYTE*)&buffer); 
wprintf(L"I_NetLogonControl2() returned %i\n", ret); 
if (ret==0) 
{ 
    wprintf(L"PdcConenctionStatus: %i\n", buffer->netlog2_pdc_connection_status); 
    if (buffer->netlog2_pdc_connection_status==0) 
     wprintf(L"Trust relationship verified.\n"); 
    else 
     wprintf(L"Trust relationship FAILED.\n"); 

    wprintf(L"TcConenctionStatus: %i\n", buffer->netlog2_tc_connection_status); 
    wprintf(L"Flags: %i\n", buffer->netlog2_flags); 
} 

return 0; 

那麼神奇的東西隱藏在NETLOGON_INFO_2 :: netlog2_pdc_connection_status。
如果此值爲86(ERROR_INVALID_PASSWORD)或5(ERROR_ACCESS_DENIED),則計算機帳戶已更改(或重置)。
如果計算機帳戶已被刪除,則值爲1787(ERROR_NO_TRUST_SAM_ACCOUNT)

希望這可以幫助其他人!

不幸的是,MSDN文檔並不精確。當您指定「NETLOGON_CONTROL_TC_VERIFY」時,數據參數(LPBYTE)必須指向(LPWSTR *)!

0

你可以嘗試LogonUser函數來執行網絡登錄(LOGON32_LOGON_NETWORK)。

如果工作站具有帶域破碎的信任,就無法驗證您的憑據。

你需要它可以執行,當然網絡登錄,而不是本地的一些域憑據。

你的另一種選擇是使用已授予網絡服務登錄本地帳戶並嘗試訪問其他域工作站resource.You可以收到訪問被拒絕錯誤或信任關係失敗取決於其資源的服務器上。

最後,您仍然可以在系統事件日誌中搜索事件ID信號信任失敗。

,但我們沒有,我們可以使用這個

不能檢查域網站(公元)工作站帳戶狀態的任何衆所周知的帳戶,直到你以某種方式進行身份驗證,只是地方狀態。

+0

謝謝你的回答。這會有效,但我們沒有任何我們可以使用的知名帳戶 - >政策 – AcidJunkie

+0

@AcidJunkie查看我的更新回答 – rkosegi

0

NetLogon_Control2用於BDC到PDC通信;對於我的測試在Win不起作用7

微軟頁面 -

備註

此功能可用於請求一個BDC確保其在SAM數據庫的副本帶來向上至今。它也可用於確定BDC當前是否具有對PDC開放的安全通道。

相關問題