0

win32ApiでC++を使用していますが、ADSIを使用しているユーザーのパスワードの有効期限を取得したいと考えています。

CoInitialize(NULL);

LPWSTR pszADsPath=L"LDAP://CN=arjun,CN=Users,DC=raja,DC=com";
//HRESULT hr;
IADsUser *pUser;

hr = ADsGetObject(pszADsPath, IID_IADsUser, (void**) &pUser);
if(SUCCEEDED(hr))
{
    DATE expirationDate;
    VariantInit(&var);
    hr = pUser->get_PasswordLastChanged(&expirationDate);
    hr = pUser->get_PasswordExpirationDate(&expirationDate);

    if (SUCCEEDED(hr))
        VariantTimeToSystemTime(expirationDate,&lpExpirationDate);

    pUser->Release();
}

電話get_PasswordLastChangedをかけると成功し、最後に変更されたパスワードの日付が返されますが、有効期限が必要です。

を使用するget_PasswordExpirationDateと、S_OK(成功)が得られますが、エラーコードも表示されます-2147463155

誰かが何が悪いのか説明できますか?

4

2 に答える 2

1

エラーはADS_PROPERTY_NOT_FOUNDに変換されます。このユーザーのパスワードの有効期限が切れていない可能性がありますか?

于 2012-10-29T05:59:33.287 に答える
0

これが古い投稿であることは知っていますが、同じものを探してこの投稿に出くわしました。私にとっては、OPのコード(わずかな変更があります)が機能します。LDAP URLを追加し、ポート636を使用しました。誰かが同じものを検索した場合に備えて:

CCoInitialize CoInitialize;

if( !CoInitialize.IsSuccessful() )
{
    stringstream Text;
    Text << L"CoInitialize returned <" << CoInitialize.GetMessage() << L">" << endl;
    this->WriteLogThreadSafe( Text.str() );

    // Continue anyway because it could be it was already initialized.
}

LPWSTR pszADsPath=L"LDAP://<YOUR LDAP SERVER>:636/<YOUR DN>";
//HRESULT hr;
IADsUser *pUser;

HRESULT hr = ADsGetObject(pszADsPath, IID_IADsUser, (void**) &pUser);
if(SUCCEEDED(hr))
{
    SYSTEMTIME SystemTime = {};
    DATE expirationDate = {};
    VARIANTARG var = {};
    VariantInit(&var);
    hr = pUser->get_PasswordLastChanged(&expirationDate);
    hr = pUser->get_PasswordExpirationDate(&expirationDate);

    if (SUCCEEDED(hr))
        VariantTimeToSystemTime( expirationDate,&SystemTime );

    pUser->Release();
}
于 2022-02-09T13:21:39.460 に答える