Ah, I understood the answer ...
It seems to ExQueueWorkItemdo the trick:
VOID NTAPI MyShutdownSystem(PVOID) { NtShutdownSystem(1); }
PWORK_QUEUE_ITEM pWorkItem =
(PWORK_QUEUE_ITEM)ExAllocatePool(NonPagedPool, sizeof(WORK_QUEUE_ITEM));
if (pWorkItem != NULL) {
ExInitializeWorkItem(pWorkItem, &MyShutdownSystem, NULL);
ExQueueWorkItem(pWorkItem, DelayedWorkQueue);
}
source
share