You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core通过WMI检测新进程时TIME_CREATED值异常问题

问题原因与解决方法

核心原因

Win32_ProcessStartTrace的TIME_CREATED属性并非遵循FILETIME的1601年基准,而是采用CIM_DATETIME的整数格式:该数值代表从公元1年1月1日0点UTC开始的100纳秒间隔数,而非微软文档中描述的FILETIME规则(文档可能混淆了不同WMI类的属性定义)。你使用的DateTime.FromFileTimeUtc()方法基于FILETIME的1601年基准,直接转换自然会得到异常日期。

解决步骤

  1. 固定基准差值:公元1年到1601年的100纳秒间隔数固定为116444736000000000,这是CIM_DATETIME与FILETIME的基准差。
  2. 修正转换逻辑:将获取到的TIME_CREATED数值减去该差值,再传入DateTime.FromFileTimeUtc()转换,即可得到正确的UTC时间。

示例代码:

// 从ManagementObject中获取的TimeCreated数值
long timeCreatedValue = 133598139347539533;
// 减去CIM与FILETIME的基准差
long fileTimeValue = timeCreatedValue - 116444736000000000;
// 转换为正确的UTC时间
DateTime eventTime = DateTime.FromFileTimeUtc(fileTimeValue);

额外说明

如果直接读取TimeCreated的字符串格式(而非数值),可以直接用DateTime.Parse()解析,WMI会返回标准ISO格式的时间字符串,无需手动计算差值。

内容的提问来源于stack exchange,提问作者patsy2k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:58:18