使用FileTimeToSystemTime()时程序崩溃的原因是什么?

时间:2013-11-17 18:58:42

标签: c winapi mingw32

我想将FileTime更改为SystemTime,但程序总是崩溃,为什么?

提前致谢。

FILETIME *Kernel_Time;
HANDLE Process = OpenProcess ( PROCESS_ALL_ACCESS, FALSE, 0);
GetProcessTimes (Process, NULL, NULL, Kernel_Time, NULL);
SYSTEMTIME  *Sys_Time;
FileTimeToSystemTime (Kernel_Time, Sys_Time);

2 个答案:

答案 0 :(得分:3)

您不为结果分配内存。在堆栈上分配它可能更容易,并在函数调用中使用地址,如下所示:

FILETIME Kernel_Time;
HANDLE Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 0);
GetProcessTimes(Process, NULL, NULL, &Kernel_Time, NULL);
SYSTEMTIME Sys_Time;
FileTimeToSystemTime(&Kernel_Time, &Sys_Time);

答案 1 :(得分:1)

您对OpenProcess的来电失败:

  

如果指定的进程是系统进程(0x00000000),则该函数失败,最后一个错误代码为ERROR_INVALID_PARAMETER。

您应该考虑检查返回值。您的应用程序崩溃,因为您将随机指针(Sys_Time)传递给FileTimeToSystemTimeKernel_Time传递给GetProcessTimes

对于每次调用,您需要分配内存。在这种情况下,自动变量就足够了:

FILETIME Kernel_Time = { 0 };
...
GetProcessTimes( Process, NULL, NULL, &Kernel_Time, NULL );