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);
.

È stato utile?

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 );
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top