C++ 验证本地计算机的Active Directory域信任关系
我必须查明本地计算机是否仍然加入到域中,或者其他计算机是否使用了该计算机帐户,或者计算机帐户是否已重置 换句话说,我需要验证本地机器和域之间的信任关系 NLTest/SC_VERIFY:{Domain}做得很好 是否有任何API函数可用于检测本地计算机是否已失去与域的信任关系?我不喜欢从程序中调用外部可执行文件 到目前为止,我尝试的是:C++ 验证本地计算机的Active Directory域信任关系,c++,.net,winapi,active-directory,C++,.net,Winapi,Active Directory,我必须查明本地计算机是否仍然加入到域中,或者其他计算机是否使用了该计算机帐户,或者计算机帐户是否已重置 换句话说,我需要验证本地机器和域之间的信任关系 NLTest/SC_VERIFY:{Domain}做得很好 是否有任何API函数可用于检测本地计算机是否已失去与域的信任关系?我不喜欢从程序中调用外部可执行文件 到目前为止,我尝试的是: NetGetJoinInformation():它没有意识到这一点 DsBind*():它没有意识到这一点。还试图在本地系统帐户下调用它 有什么想法吗?您可
- NetGetJoinInformation():它没有意识到这一点
- DsBind*():它没有意识到这一点。还试图在本地系统帐户下调用它
在进行身份验证之前,您不能在域站点(AD)上检查工作站帐户状态,只能检查本地状态。好的。经过大量挖掘,我终于找到了一个解决方案: 因此,神奇的事情隐藏在NETLOGON\u INFO\u 2::netlog2\u pdc\u connection\u status中。
如果此值为86(错误\u无效\u密码)或5(错误\u访问被拒绝),则计算机帐户已更改(或重置)。
如果计算机帐户已被删除,则值为1787(错误\u否\u信任\u山姆\u帐户) 希望这能帮助别人
不幸的是,MSDN文档并不精确。指定“NETLOGON\u CONTROL\u TC\u VERIFY”时,数据参数(LPBYTE)必须指向(LPWSTR*) NetLogon_Control2用于BDC到PDC的通信;不适用于我在Win 7中的测试 微软网页-- 备注
此功能可用于请求BDC确保其SAM数据库副本是最新的。它还可用于确定BDC当前是否有一个安全通道打开到PDC谢谢您的回答。这会起作用,但我们没有任何可用于此->策略的知名帐户
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;