我需要一种方法来validationWindows上的本机c + +的用户名/密码对。 input是用户名和密码,用户可以是DOMAIN \ user格式。
基本上我需要写一个函数:如果用户/密码是有效的本地帐户,则返回true。 (第1部分)如果用户/密码在给定的域上有效,那么也返回true。 (第2部分)否则返回false。
使用KB180548我解决了(第1部分)(但我也必须检查用户名是否是有效的用户,因为空白密码的用户失败 – 丑陋的解决方法,但它的工作原理)
但是对于“。”之外的任何域,以上KB示例代码对于任何用户/传递对都起作用(错误地)。
我已经尝试使用ldap_bind_s,但它成功的不正确的用户/传球对(可怕的来宾帐户?)。 另外,对于“。” 域,它有效的用户/密码与LDAP_SERVER_DOWN失败(可能是因为本地主机不是域控制器?)
也许这些概念中的一些对我来说还不清楚。 我希望至less我的问题解释清楚。 我没有卡住任何方法,因为它可以在C ++本机代码中实现。
这个问题C#:如何validation域凭据? 似乎已经明白了(除了没有接受的答案)。 唉,它是在C#中。
编辑:来吧,堆栈溢出,你以前从来没有让我失望…
如果你的意思是“。” 域名,域名不是“可信任的”,域名运行失败的代码,那就是设计。
几年前,当我们使用支持票的时候,Microsoft最好的回答是使用WNetUseConnection()。
一个古老的代码和平,我不能够测试,所以给出的是:
//--------------------------------------------------------- // quick ADSI sample - binding to a user //--------------------------------------------------------- //--------------------------------------------------------- // should use unicode - saves a lot of conversion work //--------------------------------------------------------- #define _UNICODE //--------------------------------------------------------- // libraries needed to use ADSI //--------------------------------------------------------- #pragma comment( lib, "Activeds.lib" ) #pragma comment( lib, "Adsiid.lib" ) //--------------------------------------------------------- // ADSI header //--------------------------------------------------------- #include <activeds.h> int wmain( int argc, wchar_t *argv[] ) { //----------------------------------------------------- // HRESULT hr is the return code value from all ADSI // calls - using the SUCCEEDED MACRO to check for // success //----------------------------------------------------- HRESULT hr; //----------------------------------------------------- // pointer to our IADsUser object //----------------------------------------------------- IADsUser *pUser = NULL; //----------------------------------------------------- // path to the user we are going to try to update // make sure you replace this with something // specific to your environment // Form : WinNT://<domain name>/<object name>,<object class> //----------------------------------------------------- LPWSTR pszADsPath = L"WinNT://yourdomain/object name,user"; // // See available forms : // http://msdn.microsoft.com/en-us/library/aa746534(v=VS.85).aspx //----------------------------------------------------- // intialize the COM subsystem before doing any work //----------------------------------------------------- CoInitialize(NULL); //----------------------------------------------------- // try to get the user // http://msdn.microsoft.com/en-us/library/aa772184(v=VS.85).aspx //----------------------------------------------------- hr = ADsGetObject(pszADsPath, IID_IADsUser,(void**)&pUser); // Here Test hr //http://msdn.microsoft.com/en-us/library/aa772195(v=VS.85).aspx //----------------------------------------------------- // kill the COM subsystem we were using //----------------------------------------------------- CoUninitialize(); return 0; }