使用c ++的密码到期日期?

时间:2012-10-25 11:24:21

标签: c++ windows winapi active-directory

我想使用c ++ win32 API ...

显示密码到期对话框

我是使用System.directoryservice命名空间...

完成的

但现在我需要Win32 API ..

那里有任何函数可以获取密码到期日期吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

您可以使用以下函数获取密码到期日期:

HRESULT GetPasswordExpirationDate(LPTSTR lpszPathName, LPSYSTEMTIME lpExpirationDate)
{
    HRESULT hr;
    IADsUser *pUser;
    hr = ADsGetObject(lpszPathName, IID_IADsUser, (void**) &pUser);
    if(SUCCEEDED(hr))
    {
        DATE expirationDate;
        hr = pUser->get_PasswordExpirationDate(&expirationDate);
        if (SUCCEEDED(hr))
            VariantTimeToSystemTime(expirationDate, lpExpirationDate);

        pUser->Release();
    }

    return hr;
}

其中lpszPathNameLDAPWinNT路径,lpExpirationDate是指向SYSTEMTIME结构的指针。

请注意,您必须包含Windows.hIads.hAdshlp.h,并与ADSIid.LibActiveDS.Lib相关联才能使其发挥作用。

使用示例:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

SYSTEMTIME expirationDate;
HRESULT hr = GetPasswordExpirationDate(_T("WinNT://ComputerName/UserName,user"),
    &expirationDate);

if (SUCCEEDED(hr))
{
    //TODO: do whatever you want with the expirationDate here
}

CoUninitialize();

您可能希望使用以下API调用之一来检索当前用户和计算机/域名:GetUserNameGetComputerName GetUserNameExNetWkstaUserGetInfo

如果您需要检索多个域用户的密码到期日期,最好使用ADsBuildEnumerator而不是ADsGetObject(请参阅MSDN上的示例)。