• disable all acpi interrupts

    From daniel S@21:1/5 to All on Tue Jul 25 19:44:55 2023
    hello im trying to disable all acpi interuupts in windows kernel i found out keraiseirql high_level not enough

    ```#define IA32_APIC_BASE_MSR 0x1B
    #define APIC_TPR_OFFSET 0x80

    volatile ULONG* MapLocalApicBase()
    {
    ULONG64 apicBaseMsrValue = __readmsr(IA32_APIC_BASE_MSR);
    PHYSICAL_ADDRESS apicBaseAddress;

    apicBaseAddress.QuadPart = apicBaseMsrValue & 0xFFFFFFFFF000;

    return (volatile ULONG*)MmMapIoSpace(apicBaseAddress, 4096, MmNonCached);
    }

    ULONG MaskAllInterruptsAndStoreOriginal()
    {
    volatile ULONG* localApicBase = MapLocalApicBase();
    if (!localApicBase)
    {
    DbgPrint("Failed to map Local APIC base.");
    return 0; // return 0 as a failure signal, handle it accordingly in your main code
    }

    volatile ULONG* tprRegister = localApicBase + (APIC_TPR_OFFSET / sizeof(ULONG));

    // Store the original value
    ULONG originalTPR = *tprRegister;

    *tprRegister = 0xFF;

    // Unmap the local APIC space after use
    MmUnmapIoSpace((PVOID)localApicBase, 4096);

    return originalTPR;
    }

    void RestoreInterrupts(ULONG originalTPR)
    {
    volatile ULONG* localApicBase = MapLocalApicBase();
    if (!localApicBase)
    {
    DbgPrint("Failed to map Local APIC base.");
    return;
    }

    volatile ULONG* tprRegister = localApicBase + (APIC_TPR_OFFSET / sizeof(ULONG));

    *tprRegister = originalTPR;

    // Unmap the local APIC space after use
    MmUnmapIoSpace((PVOID)localApicBase, 4096);
    }``` am i doing correct ?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)