Я хочу регистрировать некоторые события из Microsoft-Windows-Kernel-сети провайдер, использующий код c (c ++) в реальное время.
Когда я пытаюсь выполнить программу не как администратор, она терпит неудачу в EnableTrace (EnableTraceEx2) с кодом 5 (доступ запрещен).
НО
Но я могу добавить провайдера в мой сеанс (если я просто создаю и не останавливаю и не закрываю его в программе), используя Монитор производительности без прав администратора.
Шаги с perfmon:
//Create trace session without providers
1. StartTrace() // EVENT_TRACE_REAL_TIME_MODE
2. OpenTrace() // PROCESS_TRACE_MODE_REAL_TIME | PROCESS_TRACE_MODE_EVENT_RECORD
//Wait for events
3. ProcessTrace()
//Add provider manually
4. Open perfmon and add provider manually to my session.
Результат: программа начинает получать события!
меры без perfmon и admin. права:
//Create trace session without providers
1. StartTrace() // EVENT_TRACE_REAL_TIME_MODE
2. OpenTrace() // PROCESS_TRACE_MODE_REAL_TIME | PROCESS_TRACE_MODE_EVENT_RECORD
3. EnableTraceEx2() //flag,keyword is 0, level is 0x00 or 0x04(Informational)
4. ProcessTrace()
OnError: ControlTrace() and CloseTrace() //EVENT_TRACE_CONTROL_STOP
Результат: ошибка на шаге 3: доступ запрещен
Как я могу программно добавить (включить) провайдера без администратора. привилегии?
Почему perfmon может сделать это без повышения?
Задача ещё не решена.