Допустим есть ситуация, когда X рабочих потоков, а в очереди Y поставленных запросов, выполнение запроса требует времени Z.
Т.е. скажем очередь не пуста и в данное время необходимо срочно провести деинициализацию. Самое на первый взгляд простое — поставить в очередь
с помощью PostQueuedCompletionStatus некие данные после анализа которых, рабочий поток завершиться. Но вся суть, что
PostQueuedCompletionStatus использует KeInsertQueue, т.е. запрос ставиться в конец очереди. Т.е. необходимо ставить запрос в начало очереди, что-бы
рабочий поток в первую очередь получал уведомление о том, что происходит деинициализация. А так выходит, что пока все предыдущие задания из очереди не будут выбранны, задание о завершении не получить. А деинциализироваться надо, например в случае выгрузки драйвера или при уведомлении от SCM для службы. Ситуация не частая, но бывает. Как выходить из такого положения?