【问题标题】:how to get pwdexpirydate using pwdlastset value and maxpwdage value in C++ win32 API?如何在 C++ win32 API 中使用 pwdlastset 值和 maxpwdage 值获取 pwdexpirydate?
【发布时间】:2012-10-30 09:09:22
【问题描述】:

我使用 ADSI 获取 maxpwdage 值和 pwdlastset 值..

现在我想检查密码的有效期...

hr = pDomain->get_MaxPasswordAge(&ret);

maxpwdage 给出 432000...

hr = pUser->get_PasswordLastChanged(&expirationDate);

pwdlastset 给出 41176.470196759263...

如何使用这个值来实现密码的有效期?

【问题讨论】:

    标签: c++ windows winapi active-directory adsi


    【解决方案1】:

    MaxPasswordAge

    • 表示用户必须更改密码的最大时间间隔(以秒为单位)。

    PasswordLastChanged

    • 上次更改密码的时间。

    您需要将 MaxPasswordAge 添加到 PasswordLastChanged。

    变体日期

    类型:日期

    • 日期和时间值。日期表示为双精度数字,其中 1900 年 1 月 1 日午夜是 2.0,1900 年 1 月 2 日是 3.0,依此类推。

    • 可以使用 VariantTimeToDosDateTime 在 MS-DOS 表示形式之间转换日期。

    所以这意味着 1.0 代表一天。

    来自 WTypes.h:

    typedef double DATE;
    

    所以:

    DATE expirationDate;
    VARIANT vtExpDate;
    
    expirationDate += (double)(ret / 86400);
    
    vtExpDate.vt = VT_DATE ;
    vtExpDate.date = date ;
    

    86400 = 24 * 60 * 60 = 秒/天

    然后使用VariantTimeToDosDateTime 获取人类可读的日期。

    【讨论】:

    • @ rkosegi: 在expirationDate.date .date...你怎么能拥有日期属性,使用.->:: 后我无法获得任何属性...
    • @SanjuMonu :抱歉,我希望您使用的是 VARIANT 而不是 DATE。请查看更新后的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多