| 
             
              ソスソスVisual C++ Q & Aソスfソスソスソスソス
             
           | 
        
ソスEC/C++
        ソスEDelphi
        ソスEVisual BasicソスソスソスSソスソス
        ソス@(VB2-VB6ソスソス.NETソスソスソスp)
        ソスEVisual Basic(VB2-VB6)
        ソスEVisual Basic .NET
        ソスEVisual C++
ソスソスソスツゑソスソスソスソスソスbソスノなゑソスソストゑソスソスソスワゑソスソスB
        WinXPProSP2+VS.net2008(SDK)ソスナ表ソスソスフ擾ソスソスソスソスソスsソスソスソスcソス[ソスソスソスソスJソスソスソスソスソストゑソス
        ソスワゑソスソスB
        
        ADSIソスソスソスソスいソス調ソスラて、ADソスフソスソス[ソスgDNソスソスソスソスGetソスソスソス¥ソスbソスhソスナ「maxPwdAgeソスvソスソス謫セ
        ソスソスソスAソスソスソス[ソスUソスフ最終ソスpソスXソスソスソス[ソスhソスマ更ソスソスソスソス(ソスupwdLastSetソスvソスニ思ソスソスソスソス)ソスソス謫セソスソスソスA
        ソスソスソスソスソスフ値ソスソスソスソスvソスZソスナゑソスソスソスソスソスロゑソスソスソスソスワでわかソスソスワゑソスソスソスソスB
        
        Getソスソスソス¥ソスbソスhソスナ、ソスソスL2ソスツの値ソスヘ取得ソスナゑソスソスソスフでゑソスソスソスソスAソス謫セソスソスソスソスソスlソスソスvtソスソスmソスFソスソス
        ソスソスソス9(VT_DISPATCH)ソスニなゑソスソストゑソスソスソスワゑソスソスソスソスB
        
        IDispatchソスノ関ゑソスソスト擾ソスソスソスソスソスソスラてみゑソスソスフでゑソスソスソスソスAソスソスソスソスソスソスソスソスソスEソスEソスE(ソスソス)
        
        ソスソスソスフ取得ソスソスソスソスソスlソスソスソスソスpソスXソスソスソス[ソスhソスフ有ソスソスソスソスソスソスソスソス謫セソスソスソスソスノはどの様ソスノゑソスソスソスホよい
        ソスフでゑソスソス蛯、ソスソスソスH
        ソスワゑソスソスAソスソスソスソスニ簡単ソスノ取得ソスソスソスソスソスソス@ソスソスソスソスソスソスフでゑソスソス蛯、ソスソスソスH
        
        ソスソスソスソスソスソスソスフ包ソスソスソスソスソスソスソスソスソス痰「ソスワゑソスソスソスソスソスAソスソスソスソスソスソスソスソスソス閧「ソスソスソスソスソスソスソスワゑソスソスB
        
        exeソスソスソスsソスソスソス[ソスUソスフパソスXソスソスソス[ソスhソスフ有ソスソスソスソスソスソスソスソス謫セソスソスソス謔、ソスニゑソスソスト擾ソスソスソスソスソスソスソスソスフソソス[ソスX
        ソスソスネ会ソスソスノ記ソスレゑソスソストゑソスソスソスソスワゑソスソスB
        
        BSTRl_bstrUserPath=NULL;
        VARIANTl_verDomainName;
        VARIANTl_verMaxPassAge;
        VARIANTl_verLastPassChange;
        IADsADSystemInfo*l_ADSISysInfo;
        IADs*l_pIADs;
        WCHAR*l_pwUserPath=NULL;
        WCHAR*l_pwDomain=NULL;
        
        //RootDSEソスソスソスソスADソスフパソスXソスソスソス[ソスhソスソスソスソスソスソス謫セ
        if(FAILED(ADsGetObject(L"LDAP://RootDSE",IID_IADs,(void**)&l_pIADs)))
        {
        returnFALSE;
        }
        if(FAILED(l_pIADs->Get(L"defaultNamingContext",&l_verDomainName)))
        {
        l_pIADs->Release();
        returnFALSE;
        }
        
        l_pwDomain=newWCHAR[lstrlen(L"LDAP://")+lstrlen(l_verDomainName.bstrVal)+1];
        if(l_pwDomain==NULL)
        {
        VariantClear(&l_verDomainName);
        l_pIADs->Release();
        returnFALSE;
        }
        
        lstrcpy(l_pwDomain,L"LDAP://");
        lstrcat(l_pwDomain,l_verDomainName.bstrVal);
        l_pwDomain[lstrlen(L"LDAP://")+lstrlen(l_verDomainName.bstrVal)]=L'¥0';
        
        
        l_pIADs->Release();
        if(FAILED(ADsGetObject(l_pwDomain,IID_IADs,(void**)&l_pIADs)))
        {
        if(l_pwDomain!=NULL)
        {
        delete[]l_pwDomain;
        l_pwDomain=NULL;
        }
        returnFALSE;
        }
        
        if(l_pwDomain!=NULL)
        {
        delete[]l_pwDomain;
        l_pwDomain=NULL;
        }
        
        if(FAILED(l_pIADs->Get(L"maxPwdAge",&l_verMaxPassAge)))
        {
        l_pIADs->Release();
        returnFALSE;
        }
        
        l_pIADs->Release();
        
        //ソスソスソスOソスIソスソスソスソスソス[ソスUソスソス
        if(FAILED(CoCreateInstance(CLSID_ADSystemInfo,NULL,CLSCTX_INPROC_SERVER,IID_IADsADSystemInfo,(void**)&l_ADSISysInfo)))
        {
        returnFALSE;
        }
        
        if(FAILED(l_ADSISysInfo->get_UserName(&l_bstrUserPath)))
        {
        l_ADSISysInfo->Release();
        returnFALSE;
        }
        
        l_pwUserPath=newWCHAR[lstrlen(L"LDAP://")+lstrlen(l_bstrUserPath)+1];
        if(l_pwUserPath==NULL)
        {
        l_ADSISysInfo->Release();
        returnFALSE;
        }
        
        lstrcpy(l_pwUserPath,L"LDAP://");
        lstrcat(l_pwUserPath,l_bstrUserPath);
        l_pwUserPath[lstrlen(L"LDAP://")+lstrlen(l_bstrUserPath)]=L'¥0';
        
        if(FAILED(ADsGetObject(l_pwUserPath,IID_IADs,(void**)&l_pIADs)))
        {
        if(l_pwUserPath!=NULL)
        {
        delete[]l_pwUserPath;
        l_pwUserPath=NULL;
        }
        l_ADSISysInfo->Release();
        returnFALSE;
        }
        
        //ソスpソスXソスソスソス[ソスhソスフ最終ソスマ更ソスソスソスソスソスソス謫セ
        if(FAILED(l_pIADs->Get(L"pwdLastSet",&l_verLastPassChange)))
        {
        if(l_pwUserPath!=NULL)
        {
        delete[]l_pwUserPath;
        l_pwUserPath=NULL;
        }
        l_ADSISysInfo->Release();
        returnFALSE;
        }
        
        //ソスeソスソスソスソスソスソスソスソス
        VariantClear(&l_verMaxPassAge);
        VariantClear(&l_verLastPassChange);
        l_pIADs->Release();
        if(l_pwUserPath!=NULL)
        {
        delete[]l_pwUserPath;
        l_pwUserPath=NULL;
        }
        l_ADSISysInfo->Release();
        SysFreeString(l_bstrUserPath);
        returnTRUE;
ソス゚具ソスソスソスソスOソスソスソスソスソスソスソスワゑソスソスソスソスソスソスH
        
        http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200906/09060015.txt
        
        ソスナ、ソスLソスpソスネ擾ソスがゑソスソスソスニ思ソスソスソスソスナゑソスソスソスソスEソスEソスE
        
        ソスネ擾ソスBソスQソスlソスワゑソス
ソスIソスVソスソスソスEソスソスソスソス
        
        ソスソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソス!!
        ソスソスマ参ソスlソスノなゑソスAソスソスソスソスソス謫セソスソスソス驍アソスニゑソスソスナゑソスソスワゑソスソスソスソスB
        (get_PasswordExpirationDateソスソスLDAP://ソスナはなゑソスWijnNT://ソスナとゑソスソストゑソスソスネゑソスソスソス
        ソスソスソスソスソスネゑソスソスソスナゑソスソスヒ。GetUserNameExソスナソスソス[ソスUソスソスソスソス謫セソスソスソス骼厄ソスノゑソスソスワゑソスソスソスソスOソスO)
        
        ソス{ソスソスソスノゑソスソス閧ェソスニゑソスソスソスソスソスソスソスソスワゑソスソスソスソスIソスI
        
        ソスQソスlソスノゑソスソスソスlソスヘゑソスソスネゑソスソスニ思ソスソスソスワゑソスソスソスソスAソス成ソスソスソスソスソス¥ソス[ソスXソス抜撰ソスソスソスソストゑソスソスソスソスワゑソスソスB
        
        IADsUser*lpIADsUser;
        WCHAR*l_pwUserPath=NULL;
        DATEl_PasswordExpirationDate;
        SYSTEMTIMEl_stPasswordExpirationDate;
        
        WCHARUserName[1024];
        DWORDlenUserName;
        
        
        //ソスudomain¥userソスvソスナソスソス[ソスUソスソスソスソス謫セ
        GetUserNameEx(NameSamCompatible,UserName,&lenUserName);
        
        //ソスu¥ソスvソスソスソスu/ソスvソスノ置ソスソス(ソスudomain/userソスvソスノゑソスソスソス)
        for(;lenUserName>0;lenUserName--)
        {
        if(UserName[lenUserName]==L'¥¥')
        
        UserName[lenUserName]=L'/';
        }
        }
        
        
        //ADSIソスナ擾ソスソスソス謫セソスソスソス驍スソス゚の包ソスソスソスソスソスソス成()
        l_pwUserPath=newWCHAR[lstrlen(L"WinNT://")+lstrlen(UserName)+1];
        if(l_pwUserPath==NULL)
        {
        returnFALSE;
        }
        lstrcpy(l_pwUserPath,L"WinNT://");
        lstrcat(l_pwUserPath,UserName);
        l_pwUserPath[lstrlen(L"WinNT://")+lstrlen(UserName)]=L'¥0';
        
        //ソスソスソス[ソスUソスソスソスソス謫セ
        if(FAILED(ADsGetObject(l_pwUserPath,IID_IADsUser,(void**)&lpIADsUser)))
        {
        //ソスeソスソスソスソスソスソスソスソス
        if(l_pwUserPath!=NULL)
        {
        delete[]l_pwUserPath;
        l_pwUserPath=NULL;
        }
        returnFALSE;
        }
        
        //ソスpソスXソスソスソス[ソスhソスLソスソスソスソスソスソスソス謫セ
        if(FAILED(lpIADsUser->get_PasswordExpirationDate(&l_PasswordExpirationDate)))
        {
        MessageBox(NULL,L"ソスpソスXソスソスソス[ソスhソスLソスソスソスソスソスソスソス謫セソスソスソスs",L"Debug",MB_OK);
        //ソスeソスソスソスソスソスソスソスソス
        if(l_pwUserPath!=NULL)
        {
        delete[]l_pwUserPath;
        l_pwUserPath=NULL;
        }
        returnFALSE;
        }
        
        //(ソスKソスvソスソスソスソスソスソスソス)VARIANTTimeソスソスSystemTimeソスノ変奇ソス
        //VariantTimeToSystemTime((DOUBLE)l_PasswordExpirationDate,&l_stPasswordExpirationDate);
        
        
        
        //ソスeソスソスソスソスソスソスソスソス
        lpIADsUser->Release();
        if(l_pwUserPath!=NULL)
        {
        delete[]l_pwUserPath;
        l_pwUserPath=NULL;
        }
        returnTRUE;