Delphi XE2:检索LastLogon Int64到TDateTime的转换

时间:2013-07-17 14:34:18

标签: delphi active-directory delphi-xe2 int64 tdatetime

我想在我的工作中从AD获取LastLogin信息。 我有大约1200个帐户。当我运行查询并包含LastLogin信息时,对于约40-45%的帐户,我得到了正确的日期返回。对于其他人,我得到一个默认值。可能是01-01-1601或01-01-1970,具体取决于我使用的转换类型。当我使用非常慢的:Net User / Domain时,我可以提取最后的登录信息,但不是10秒,我需要10分钟。显然,我想要更快的东西。

以下是我使用的代码:

var
  LI: OleVariant;
  int64Value: Int64;
  LocalTime: TFileTime;
  SystemTime: TSystemTime;
  FileTime : TFileTime;
begin
  try
    LI := rs.Fields[FieldNumber].Value;
    int64Value := LI.HighPart;
    int64Value := int64Value shl 32;
    int64Value := int64Value or LI.LowPart;
    FileTime := TFileTime(int64Value);
    Result := EncodeDate(1601,1,1);
    if FileTimeToLocalFileTime(FileTime, LocalTime) then
      if FileTimeToSystemTime(LocalTime, SystemTime) then
        Result := SystemTimeToDateTime(SystemTime);
  except
    Result := 0;
  end;
end;

上述工作,但只有大约40-45%的案例。 AD不返回该值或转换中存在错误。我不知道它是哪一个。由于它的某些部分有效,我倾向于说AD不会将我所需的价值归还给我。当我直接在AD中检查时,我看到了正确的值。用查询检索它们并不总是给我这些信息。 对我来说问题是,我从互联网上获取了这段代码,老实说,我理解了一点但不是一切。我迷失了我看不到的数字。此外,我无法调试所有内容。我不允许在我的工作中安装Delphi。我只能在未连接到网络的计算机上进行开发,并将我的可执行文件复制到网络中以尝试/测试所有内容。

0 个答案:

没有答案