A>Т.е. держать в памяти карту всех открытых фалов и SID'ов, формируя её (карту) на IRP_MJ_CREATE и закрывая при IRP_MJ_CLOSE? Я правильно понял? И что является ключом карты в таком случае, PFILE_OBJECT?
PFILE_OBJECT собственно и является.
А почему нельзя проверить desired access в обработчике IRP_MJ_CREATE и отрубить create, если реквестор запросит DELETE или GENERIC_ALL, если ваш драйвер решит что низзя и вернуть access denied именно оттуда? Это классическое поведение и проблем с ним со стороны 3rd parties будет меньше чем с отлупом SET_INFORMATION при успешно проделанном CREATE.
Как много веселых ребят, и все делают велосипед...