Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать количество окрытых Handles для процесса 
:(
    Опции темы
Gradov
Дата 24.3.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В менеджерах процессов, таких как Process Explorer, Task Info есть возможность увидеть кол-во открытых HANDLES для процесса. Как это можно сделать програмно?
PM MAIL   Вверх
azesmcar
Дата 24.3.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



CreateToolHelp32Snapshot

Process32Next возвращяет структуру..там есть все что надо
PM   Вверх
Gradov
Дата 24.3.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

PROCESSENTRY32 ppe;

typedef struct tagPROCESSENTRY32 {
  DWORD     dwSize;
  DWORD     cntUsage;
  DWORD     th32ProcessID;
  ULONG_PTR th32DefaultHeapID;
  DWORD     th32ModuleID;
  DWORD     cntThreads;
  DWORD     th32ParentProcessID;
  LONG      pcPriClassBase;
  DWORD     dwFlags;
  TCHAR     szExeFile[MAX_PATH];
} PROCESSENTRY32, *PPROCESSENTRY32;

Process32Next(CreateToolhelp32Snapshot(0,GetCurrentThreadID()),&ppe);


Где здесь кол-во HANDLES? Не нашел.
PM MAIL   Вверх
azesmcar
Дата 24.3.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Gradov неправильно помнил значит..

http://msdn.microsoft.com/en-us/library/ms683214(VS.85).aspx
Цитата

GetProcessHandleCount Function

Retrieves the number of open handles that belong to the specified process.


это пойдет?
PM   Вверх
Gradov
Дата 24.3.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Отлично, то что надо.  smile  Спасибо.

azesmcar, а попутно не в курсе из-за чего может расти кол-во HANDLES в приложении. Если я точно все их закрываю с помощью CloseHandle, 10 раз проверял  если HANDLE открывается, то обязательно есть CloseHandle. Но в процессе работы программы кол-во HANDLES равномерно растет, с чего бы это?
PM MAIL   Вверх
jonie
Дата 24.3.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



растет всегда? быть может винда чего там у себя кеширует?..
провел тест:
Код

    DWORD count;
    BOOL rv;
    rv = GetProcessHandleCount(GetCurrentProcess(), &count);
    if(!rv) {
        std::cerr<<GetLastError();
        throw "FAILED";
    }
    std::cout<<"count:"<<count<<"\n";

    HANDLE hfile = CreateFile(L"C:\\ntldr",0, FILE_SHARE_READ, 0, OPEN_EXISTING,0,0);

    GetProcessHandleCount(GetCurrentProcess(), &count);
    std::cout<<"count:"<<count<<"\n";

    CloseHandle(hfile);

    GetProcessHandleCount(GetCurrentProcess(), &count);
    std::cout<<"count:"<<count<<"\n";


было 8 стало 9 потом 8. Заметьте, что количество изначально не нуль.... можно копануть IDAой)

Это сообщение отредактировал(а) jonie - 24.3.2009, 22:56


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Gradov
Дата 25.3.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(jonie @  24.3.2009,  22:55 Найти цитируемый пост)
было 8 стало 9 потом 8. Заметьте, что количество изначально не нуль.


Да я тоже себе сделал такой тест и у меня также идет работа - несколько прибавит, потом несколько убавит. Но иногда кол-во убавленных получается меньше в результате растет число открытых HANDLES. Первое, что можно предположить - где-то не закрывается Handle, но я очень тщательно все проверил. Мне в общем надо это только лишь по одной причине - проверить чтобы программа точно нормально работала и не было исключения типа "system out if resources".
PM MAIL   Вверх
azesmcar
Дата 25.3.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата

Да я тоже себе сделал такой тест и у меня также идет работа - несколько прибавит, потом несколько убавит. Но иногда кол-во убавленных получается меньше в результате растет число открытых HANDLES. Первое, что можно предположить - где-то не закрывается Handle, но я очень тщательно все проверил. Мне в общем надо это только лишь по одной причине - проверить чтобы программа точно нормально работала и не было исключения типа "system out if resources".


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

Это сообщение отредактировал(а) azesmcar - 25.3.2009, 12:48
PM   Вверх
Gradov
Дата 25.3.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(azesmcar @  25.3.2009,  12:46 Найти цитируемый пост)
не забывай что твой процесс делает не только то что ты ему приказал, он подгружает библиотеки для АПИ которые ты используешь (это тоже хендл)..так что вполне возможно

Ну если так пускай равномерно увеличиваются. 

Цитата(azesmcar @  25.3.2009,  12:46 Найти цитируемый пост)
а в чем собственно проблема

Да проблемы собственно нет пока, работаю на предупреждение. Еще раз говорю - чтобы нормально программа работала, без ошибок. А то если начнут handles прибавляться в неуёмном кол-ве - долбанет исключение и в общем программа может и зависнуть и полететь.

PM MAIL   Вверх
Unudiop
Дата 2.12.2022, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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