Как мне прослушать / определить, когда программа работает в Windows, используя C ++? - PullRequest
1 голос
/ 09 октября 2008

В частности, я хочу слушать, когда программы запускаются, и записывать такую ​​информацию, как: метка времени, исполняемый файл, имя Windows и пользователь.

Ответы [ 5 ]

1 голос
/ 09 октября 2008

Вы можете настроить постоянную подписку на события WMI для мониторинга процесса создания и регистрации деталей. У меня есть несколько примеров здесь - один из примеров отслеживает создание notepad.exe и записывает события в текстовый файл. Постоянная подписка на события отслеживает события «в любое время», но если вы хотите отслеживать события «в течение всего времени вашего приложения», вы можете использовать WMI COM API с C ++ - запрос событий WQL одинаков в обоих случаях. Документация здесь .

1 голос
/ 09 октября 2008

Я бы использовал функцию PSAPI EnumProcesses (), чтобы периодически получать список запущенных процессов.

1 голос
/ 09 октября 2008

В качестве альтернативы используйте интерфейс WMI, чтобы узнать, что работает, и предпримите соответствующие действия. В приведенном ниже коде VBScript подсистема WMI запрашивается с Select * from Win32_Process, чтобы изменить приоритет процесса. Узнайте, какие другие атрибуты доступны для Win32_Process, и вы должны найти материал, который движется в том направлении, куда вы хотите идти.

Const NORMAL_PRIORITY = 32
Const LOW_PRIORITY = 64
Const REALTIME_PRIORITY = 128
Const HIGH_PRIORITY = 256
Const BELOWNORMAL_PRIORITY = 16384
Const ABOVENORMAL_PRIORITY = 32768

Function SetPriority( sProcess, nPriority )
    Dim sComputer
    Dim oWMIService
    Dim cProcesses
    Dim oProcess
    Dim bDone

    bDone = False
    sComputer = "."
    Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\cimv2")

    Set cProcesses = oWMIService.ExecQuery ("Select * from Win32_Process Where Name = '" & sProcess & "'")
    For Each oProcess in cProcesses
        oProcess.SetPriority( nPriority )
        bDone = True        
    Next
    SetPriority = bDone
End Function
1 голос
/ 09 октября 2008

Самый непристойный способ сделать это - способ Google-desktop
А именно, чтобы ваша DLL загружалась в каждый когда-либо запущенный процесс и регистрировать информацию.
Если вам интересно больше, установите Google Desktop и наблюдайте за его загрузкой в ​​ваших процессах. Затем загляните в реестр, чтобы убедиться, что он это делает.
Помните, что это входит в сферу вирусоподобного поведения.

0 голосов
/ 09 октября 2008

Ознакомьтесь с использованием Perfmon API (проверьте MSDN для ссылок).

...