如何将从cfgmgr32.dll获取的8字节数组转换为delphi中的datetime

时间:2016-01-06 09:48:52

标签: c++ delphi

我有一个从cfgmgr32.dll获得的8字节值,它表示设备驱动程序值的安装日期,来自其函数CM_Get_DevNode_PropertyW。

我一直试图将它转换为日期时间,但没有成功,此刻我迷失了。 (190,100,92,19,132,46,209,1)是我得到的值,这个值代表一个日期时间值,我需要一个提示从哪里开始转换它。 任何使用c ++或Delphi pascal的示例或提示都是受欢迎的,Delphi是首选。

1 个答案:

答案 0 :(得分:4)

您需要了解更多信息。这8个字节代表什么?我认为这些字节代表一个FILETIME值,这对于Win32 DLL返回的数据来说似乎是合理的。

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

const
  Input: array [0..7] of Byte = (190, 100, 92, 19, 132, 46, 209, 1);

var
  FileTime: TFileTime;
  SystemTime: TSystemTime;

begin
  FileTime := TFileTime(Input);
  Win32Check(FileTimeToSystemTime(FileTime, SystemTime));
  Writeln(SystemTime.wYear);
  Writeln(SystemTime.wMonth);
  Writeln(SystemTime.wDayOfWeek);
  Writeln(SystemTime.wDay);
  Writeln(SystemTime.wHour);
  Writeln(SystemTime.wMinute);
  Writeln(SystemTime.wSecond);
  Writeln(SystemTime.wMilliseconds);
  Readln;
end.

<强>输出

2015
12
5
4
11
8
16
583

设备驱动程序安装在2015年12月的 th 上?

如果您在问题中包含更多有关这8个字节的详细信息,那么将来参考可能会更有帮助。

根据您致电CM_Get_DevNode_PropertyW的评论中的信息。在这种情况下,您应该检查返回的属性类型。我希望它是DEVPROP_TYPE_FILETIME。该文档告诉您以下内容:

  

在Windows Vista和更高版本的Windows中,   DEVPROP_TYPE_FILETIME属性类型表示基础数据类型   标识符,指示数据类型是FILETIME类型   值。

     

...

     

我们建议所有时间值都以Coordinated表示   世界时(UTC)单位。