Perché il programma è crollato quando si utilizza Filetimetosystemtime ()?
Domanda
Voglio cambiare FileTime per Systemtime, ma il programma è sempre collassato, perché?
Grazie in anticipo.
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);
. Soluzione
Non allocare la memoria per il risultato.Probabilmente è più facile allocarlo sullo stack e utilizzare l'indirizzo nella chiamata funzione come questa:
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);
. Altri suggerimenti
La tua chiamata a OpenProcess
fallisce:
.Se il processo specificato è il processo di sistema (0x00000000), la funzione fallisce e l'ultimo codice di errore è error_invalid_parameter.
Dovresti prendere in considerazione il controllo dei valori di ritorno.L'applicazione si blocca, dal momento che stai passando un puntatore casuale (Sys_Time
) a FileTimeToSystemTime
e Kernel_Time
a GetProcessTimes
.
Per ogni invocazione è necessario allocare la memoria.Le variabili automatiche sono sufficzate in questo caso:
FILETIME Kernel_Time = { 0 };
...
GetProcessTimes( Process, NULL, NULL, &Kernel_Time, NULL );
.