Как правильно вызвать ObOpenObjectByPointer для получения хэндла по созданному в драйвере объекту тпа KEVENT? Сей хэндл надо дать процессу для использования в юзермоде. Я уже много чего перепробывал и либо BSOD, либо неудача.
А не проще будет сразу создавать евент с помощью ZwCreateEvent и по запросу приложения копировать ему хэндл через NtDuplicateObject. Затем можно получить указатель на евент и в ядре использовать его.
Одно НО! Евент создается в драйвере и он необходим почти во всех процессах, т.к. я внедряю ДЛЛ-ку во все доступные процессы... Соответственно запросс на хэндл этого евента придет из разных процессов, которые работают под текущем аккаунтом и под SYSTEM. И соответственно не ясно что подставлять в параметры NtDuplicateObject, в частности в SourceProcessHandle что подставить?
Если евент создан как ядерный хэндл (OBJ_KERNEL_HANDLE) то NtCurrentProcess. Если запрос приходит через IOCTL (а значит и в контексте запрашивающего процесса), то и TargetProcessHandle будет NtCurrentProcess