3

我想使用 c++ win32 API 显示密码到期对话框...

我使用 System.directoryservice 命名空间完成了它......

但现在我需要 Win32 API ..

那里有获取密码到期日期的功能吗?

提前致谢

4

1 回答 1

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;
}

wherelpszPathNameLDAPWinNT路径,lpExpirationDate是指向SYSTEMTIME结构的指针。

请注意,您必须包含Windows.h,Iads.h和并与andAdshlp.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 调用之一来检索当前用户和计算机/域名:GetUserName、、、GetComputerName GetUserNameExNetWkstaUserGetInfo

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

于 2012-10-25T22:53:04.843 回答