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

lpszPathNameLDAPまたはWinNTのパスで、構造lpExpirationDateへのポインタSYSTEMTIMEです。

を含める必要があることに注意してください。動作させるにはWindows.hIads.hおよびとAdshlp.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 に答える