Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> логирование процессов 
V
    Опции темы
Dmitry1
Дата 14.12.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.11.2008

Репутация: нет
Всего: нет



Добрый день
передо мной стоит задача получить все запущенные процессы.
вроде нашел чтото похожее
тут и тут
но не очень понимаю как этим воспользоваться. в С++ я новичок. 
создал новый проект. там формочка. 
пытаюсь воспользоваться этим кодом

Код

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "psapi.h"

void PrintProcessNameAndID( DWORD processID )
{
    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");

    // Get a handle to the process.

    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );

    // Get the process name.

    if (NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;

        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
             &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, 
                               sizeof(szProcessName)/sizeof(TCHAR) );
        }
    }

    // Print the process name and identifier.

    _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );

    CloseHandle( hProcess );
}

void main( )
{
    // Get the list of process identifiers.

    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        return;

    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the name and process identifier for each process.

    for ( i = 0; i < cProcesses; i++ )
        if( aProcesses[i] != 0 )
            PrintProcessNameAndID( aProcesses[i] );
}


но ничего не выходит. скопировал отсюда без изменения эти методы(заменил main)  и подключил указанные в коде библиотеки(притом оставил 2 которые создались по умолчанию #include "stdafx.h" #include "Form1.h")и получил ошибки

Цитата

Error    2    error C2365: 'PrintProcessNameAndID' : redefinition; previous definition was 'formerly unknown identifier'

Error    1    error C3861: 'PrintProcessNameAndID': identifier not found


подскажите в чем может быть дело.
зы проект может быть и консольным в принципе
PM MAIL   Вверх
Alca
Дата 14.12.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50





--------------------
PM WWW ICQ Skype Jabber   Вверх
xvr
Дата 15.12.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Код правильный. Сделай проект консольным и НЕ .NET'овским! (Должно быть 'Win32 приложение')

PM MAIL   Вверх
Dmitry1
Дата 15.12.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.11.2008

Репутация: нет
Всего: нет



Спасибо за помощь! помогло
правда я сперва сделал как и советовали - win32 application но затем заменил на clr - удобнее работать
возник вопрос. для некоторых процессов не возвращает имена. а именно для

system
csrss.exe
svchost.exe(причем для одного svchost показывает нормально)
svchost.exe
svchost.exe
svchost.exe
sqlservr.exe
alg.exe
sqlbrowser.exe

это можно как-нить победить?
вот тут прочитал что
Цитата

Oбратите внимание на специальную обработку для двух процессов. Мы вынуждены обрабатывать отдельно процесс бездействия системы (Idle) с идентификатором 0, и системный процесс (System), который имеет идентификатор 2 на Windows NT 4 и 8 - на Windows 2000/XP, потому что OpenProcess не позволяет открыть описатель для этих процессов, возвращая код ошибки ERROR_ACCESS_DENIED. 

Если вы запустите тестовое приложение, прилагающееся к этой статье, то обнаружите, что для одного из процессов в качестве имени возвращается "(name unavailable)". Запустив Task Manager нетрудно определить, что этим процессом является CSRSS.EXE. Оказывается, система устанавливает такой дескиптор безопасности этому процессу, который не позволяет открыть его с необходимыми нам правами доступа.

то есть про system и csrss.exe все ясно. а как быть с остальными? почему не показываются сведения о них?
спасибо.
PM MAIL   Вверх
xvr
Дата 15.12.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата

почему не показываются сведения о них?
svchost.exe тоже системный процесс (контейнер для системных сервисов). sqlservr.exe - сервер MSSQL (IMHO), работает скорее всего с системными правами. sqlbrowser.exe - судя по названию оболочка к SQL базе (особых прав требовать не должен). Кто такой alg.exe - неизвестно
Цитата

а как быть с остальными? 
Поднять права своей проге (например сделать ее сервисом). И напечатать коды ошибок, если они есть.


PM MAIL   Вверх
Dmitry1
Дата 15.12.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 13.11.2008

Репутация: нет
Всего: нет



Всем большое спасибо за помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.