Иногда в драйвере устройства нужно выполнять действие при нахождении системного сигнального объекта (любой объект, дескриптор которого можно передать в функцию WaitForSingleObject и аналогичную ей; например, событие, поток, мьютекс, семафор и т.д.) в сигнальном состоянии.
Например, отслеживать изменения в папке с помощью системной функции FindFirstChangeNotification.
Для этого можно использовать функции
CreateDeviceEvent - создать обработчик системного сигнального объекта
DestroyDeviceEvent - удалить обработчик системного сигнального объекта