Есть следующая задача, АКА проблема:
Есть процесс. Нужно получить из него хэндл открытого в нем файла, и потом вызвать DuplicateHandle (CloseSourceHandle)
Хэндлы получаются просто — ZwQuerySystemInformation. и мы получаем список хэндлов всех процессов.
Дальше казалось бы тоже все просто — бежим по хэндлам, делаем DuplicateHandle а потом ZwQueryObject (ObjectNameInformation). Но не тут-то было. Когда мы спрашиваем имя объекта у Named-Pipe , либо у файла в который сейчас происходит запись ( Pending read\write operation ) то ZwQueryObject подвисает в дебрях ядра (после вызова sysenter. Вопрос такой: как можно определить является объект Named-Pipe к примеру, если есть его Handle , открытый у себя в процессе, и соотвественно обойти этот объект — не спрашивать его имя. Либо если есть другой вариант запросить имя объекта тоже хотелось бы знать о нем.
Примечание — есть вариант получения хэндлов, читая из памяти ядра. Но это требует установки NtGlobalFlag, что является неприемлемым по той причине, что код будет выполняться под непривелигированным юзером.