KernWakeup

This wakes up threads that are blocking in KernBlock. The eventid to be specified has to match the eventid used in KernBlock. It is possible to submit a 32 bit return value to the unblocked thread. The number of threads that are unblocked is returned.

Synopsis
APIRET APIENTRY KernWakeup(ULONG eventid, ULONG flags, PULONG tcnt, ULONG retdata);

Parameters

 * eventid:Event id of the blocked thread(s).
 * flags:One or more of the following flag bits:
 * KEE_WAKE_SINGLE - Only wakeup the first matching thread; by default, if multiple threads are waiting, all will be awaking.
 * KEE_WAKE_PRIOINCR - Run the woke threads with higher priority.
 * KEE_WAKE_RETDATA - return data value specified to the KernBlock retdata variable. By default, nothing is returned.


 * tcnt:pointer to an ULONG to return the actual number of threads that were woke. Ignored when NULL.
 * retdata:Data to be returned to the unblocked threads. Ignored when KEE_WAKE_RETDATA is not set.

Comments
I don't know whether the priority increase issued by KEE_WAKE_PRIOINCR is permanent, or only for the current timeslice. It shouldn't be permanent.