При работе с Win32 FILETIME не забывайте, что у вас теперь есть std::chrono

FILETIME хранит время в единицах 100 наносекунд с собственной эпохой. Ручное объединение полей и деление на константы легко приводят к ошибке знака или единиц. Для C++/WinRT можно преобразовать FILETIME в тип часов, а интервал выразить через std::chrono.

Минуты после изменения

Ниже самостоятельный фрагмент для Windows/C++ с доступными C++/WinRT headers. Он возвращает целое число полных минут; если отметка лежит в будущем относительно текущих системных часов, возвращает 0.

#include <windows.h>
#include <winrt/base.h>
#include <chrono>
#include <cstdint>

std::int64_t elapsed_minutes(FILETIME changed)
{
    auto earlier = winrt::clock::from_FILETIME(changed);
    auto current = winrt::clock::now();
    if (current < earlier) return 0;
    return std::chrono::duration_cast<std::chrono::minutes>(
        current - earlier).count();
}

Разность вычисляется как текущее время минус сохранённое, а duration_cast явно задаёт единицу результата. Возвращаемый int64_t позволяет не сужать результат сразу до DWORD. Такой расчёт использует системные часы: для измерения длительности работы внутри процесса предпочтительны монотонные часы, а не две календарные отметки.

Windows Implementation Library также предоставляет wil::filetime::to_int64 и константы длительностей. Основной подход показан в The Old New Thing от 23 сентября 2026 года. Пример выше переписан; его сборка в вашей конфигурации отдельно не подтверждена.