Let me expand slightly - using events to communicate between UM and KM is a poor choice. Events may sound like a good idea, but in practice the overhead is high and as you observe the latency is not deterministic. High thread priority will reduce the chances of a delay, but on a loaded system, even high priority threads won’t be scheduled for awhile - potentially an unbounded time, but in practice a few thread quanta should be the maximum.
Either IRPs or shared memory (allocated with a long lived IRP) have better performance characteristics and are easier to work with
To answer your specific question, use SetPriorityClass with REALTIME_PRIORITY_CLASS and then SetThreadPriority with THREAD_PRIORITY_TIME_CRITICAL. Priority boosting is not relevant for you - that’s something that processes with mouse and keyboard focus get so the user can interact with them more swiftly. This is largely obsolete now that even low end systems have many cores