#include "common/kmod.h"
#include "common/windows/nt.h"
#include "common/mallocHelper.h"
#include "common/stringUtils.h"

bool ffKmodLoaded(const char* modName) {
    ULONG bufferSize = 0;
    NtQuerySystemInformation(SystemModuleInformation, NULL, 0, &bufferSize);
    if (bufferSize == 0) {
        return true; // ignore errors
    }

    FF_AUTO_FREE RTL_PROCESS_MODULES* buffer = malloc(bufferSize);

    if (!NT_SUCCESS(NtQuerySystemInformation(SystemModuleInformation, buffer, bufferSize, &bufferSize))) {
        return true; // ignore errors
    }

    for (ULONG i = 0; i < buffer->NumberOfModules; i++) {
        const char* name = (const char*) buffer->Modules[i].FullPathName + buffer->Modules[i].OffsetToFileName;

        if (ffStrEqualsIgnCase(name, modName)) {
            return true;
        }
    }

    return false;
}
