如何使用C ++的Win32 API的pwdLastSet值,并maxpwdage价值得到pwdexpirydate?如何使用、价值、pwdLastSet、API

2023-09-08 13:23:50 作者:宿醉.

我得到的maxpwdage价值和的pwdLastSet值使用ADSI。

i get the maxpwdage value and pwdlastset value using ADSI..

现在我要检查的密码过期日期...

Now i want to check the password expiry date...

HR = pDomain-> get_MaxPasswordAge(安培; RET);

maxpwdage给人432000 ...

maxpwdage gives 432000...

HR = pUser-> get_PasswordLastChanged(安培; EXPIRATIONDATE);

的pwdLastSet给41176.470196759263 ...

pwdlastset gives 41176.470196759263...

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

how to achieve the password expiry date using this value?

推荐答案

MaxPasswordAge

表示的最大时间间隔,以秒,之后,该密码必须由使用者来改变。

PasswordLastChanged

在上一次的密码已被更改。

您需要MaxPasswordAge添加到PasswordLastChanged。

You need to add MaxPasswordAge to PasswordLastChanged.

VARIANT日

类型:DATE

一个日期和时间值。日期被重新psented双链precision号码,其中午夜,1900年1月1日是2.0,1月2日$ P $,1900是3.0,依此类推。

A date and time value. Dates are represented as double-precision numbers, where midnight, January 1, 1900 is 2.0, January 2, 1900 is 3.0, and so on.

日期可以转换为和使用VariantTimeToDosDateTime一个MS-DOS重presentation。

The date can be converted to and from an MS-DOS representation using VariantTimeToDosDateTime.

因此​​,这意味着1.0重新present一天。

So this means that 1.0 represent one day.

从WTypes.h:

typedef double DATE;

所以:

DATE expirationDate;
VARIANT vtExpDate;

expirationDate += (double)(ret / 86400);

vtExpDate.vt = VT_DATE ;
vtExpDate.date = date ;

86400 = 24 * 60 * 60 =秒/天

86400 = 24 * 60 * 60 = seconds/day

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

Then use VariantTimeToDosDateTime to get human readable date.

 
精彩推荐