Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Счетчик числа загрузок DLL  (Прочитано 13741 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MasterAlexei
Гость
« : 29-10-2004 13:05 » 

Собственно, как его узнать в Виндах. наверняка есть такая функция.
Т.е. При LoadLibrary для одной длл первый раз, длл загружается и запускается DllMain. А при последующих вызовах LoadLibrary для той-же длл DllMain уже не вызывается, но увеличивается тот самый счетчик. Вот как его узнать? Какой функцией?
Заранее спасибо.
Алексей.
Записан
Серж
Гость
« Ответ #1 : 29-10-2004 14:05 » 

MasterAlexei, по-моему, на уровне пользователя, такой функции нет, счетчик доступен только на уровне ядра, видимо с помощью функции NTQueryObject.
Записан
Серж
Гость
« Ответ #2 : 29-10-2004 14:19 » 

С помощью функций API, наверно, можно тоже вычислить, только сложно:
EnumProcesses, затем EnumProcessModules и GetModuleFileName, т.е. получить все процессы, затем в каждом процессе модули и затем сравнив имя модуля с искомой DLL.
Записан
MasterAlexei
Гость
« Ответ #3 : 29-10-2004 14:33 » 

О. Спасибо. Основную идею понял. И направление тоже уже определил, куда рыть.
Записан
MasterAlexei
Гость
« Ответ #4 : 30-10-2004 10:06 » 

Ребята! Не все так плохо как кажется!
Есть такая книженция :
http://tcpip.nm.ru/chm/Richter.chm
Ссылка взята от сюда:
http://tcpip.nm.ru/
Так вот. Оччччень полезная книженция.
Там в главе 4 можно найти описание очень интересных функций.
Вот небольшие цитаты от туда:
... Многие разработчики программного обеспечения пытаются создавать инструментальные средства или утилиты для Windows, требующие перечисления процессов, выполняемых в системе. ...
...в Windows NT ведется постоянно обновляемая база данных Performance Data. В ней содержится чуть ли не тонна информации, доступной через функции реестра вроде RegQueryValueEx, для которой надо указать корневой раздел HKEY_PERFORMANCE_DATA...
...Чтобы упростить работу с этой базой данных, Microsoft создала набор функций под общим названием Performance Data Helper (содержащийся в PDH.dll). Если Вас интересует более подробная информация о библиотеке PDH.dll, ищите раздел по функциям Performance Data Helper в документации Platform SDK...
...в Windows 95 и Windows 98 такой базы данных нет. Вместо них предусмотрен набор функций, позволяющих перечислять процессы. Они включены в ToolHelp API....
...Но самое смешное, что разработчики Windows NT, которым ToolHelp-функции явно не нравятся, не включили их в Windows NT. Для перечисления процессов они создали свой набор функций под общим названием Process Status (содержащийся в PSAPI.dll). ...
...Microsoft, которая до сих пор, похоже, старалась усложнить жизнь разработчикам инструментальных средств и утилит, все же включила ToolHelp-функции в Windows 2000. Наконец-то и эти разработчики смогут унифицировать свой код хотя бы для Windows 95, Windows 98 и Windows 2000!...
(с) Джеффри Рихтер.

Так вот. С помощъю этих функций можно нарыть мноооого инфы о процессах ну и соответственно счетчик испольнзхования модулей.
Он лежит в структуре
MODULEENTRY32
...
    DWORD   GlblcntUsage;
    DWORD   ProccntUsage;
...
А саму структуру (значения) можно получить с помощью функции  Module32First и Module32Next
Поищите описалово этих функций в стандартном хелпе Win32 Porgramming Reference.
Желаю удачи. Надеюсь, что помог многим
ЗЫ. В той же книжке описано 3 способа как пролезть в пространство другого процесса, и чтобы никто ничего об этом не узнал. Так можно спрятаться от менеджера задач (TaskManager) например
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #5 : 01-11-2004 06:54 » 

MasterAlexei, я тебе больше скажу по секрету - эта книжка здесь в библиотеке лежит  Ага . Правда вариант оформления книги с твоей ссылки мне прнравился. И это sehr gut  Улыбаюсь .
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
MasterAlexei
Гость
« Ответ #6 : 01-11-2004 08:32 » 

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

А оформление мне и самому понравилось. Особенно то, что почти все исходные тексты программ-примеров в этом файлике как архивы представлены и можно отдельно каждый архивчик сохранить и сразу компилить.
Und wie gesagt, ich bin sehr froh, dass es ihnen gefalen hat. Улыбаюсь
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #7 : 01-11-2004 09:14 » 

MasterAlexei, а не могли бы вы объяснить мне старому 100-летнему человеку Отлично , для чего требуется инфа такого рода, я имею ввиду недокументированные фичи, дающие возможность поиметь систему? Или я ошибаюсь, или это нехорошо имхо. Извини но здесь можно поставить больше - чем +. 8)
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
MasterAlexei
Гость
« Ответ #8 : 01-11-2004 10:42 » 

Согласен. Но я то не знаю, зачем оно им (тем, кто ищет). Я вообще писал про счетчик использования модулей, ну и заодно, вспомнив, что народ спрашивал, а я видел, где лежит, написал и про то тоже.
А вообще все это на написание вырусов тянет. Или на программы, которые работают как отдельные процессы (не родственные потоки), но общаться им как-то надо. Но таких прог я видел мало (если вообще видел, не помню точно).
ИМХО это все довольно специфично для конкретных задач.
А с теоретической точки зрения - это помогает лучше понять, как работает система, и соответственно, генерить более устойчивый (или наоборот не устойчивый) код.
Записан
Diletant
Помогающий

de
Offline Offline

« Ответ #9 : 03-11-2004 11:54 » 

Во-первых, кто сказал, что при LoadLibrary DllMain вызывается не каждый раз. ИМХО, как раз наоборот. иначе бы много чего не работало. (Что файл каждый раз в память не загружается - это факт.) А посему счетчик слепить - раз плюнуть.
Записан
MasterAlexei
Гость
« Ответ #10 : 03-11-2004 14:09 » 

А ты попробуй в DllMain поставь счетчик и посчитай. И увидишь, что эта функция вызывается с параметром process_attach один раз для процесса.и если тот же процесс ее еще раз попытается загрузить, то она не вызовется вообще и ваш счетчик так и останется равным 1. Но freelibrary все равно придется вызывать несколько раз!
Если другой процесс ее загрузит, то она скорее всего вызовется но переменная счетчик уже будет в другом адрессном пространстве.
Если тот же процесс создаст поток и поток уже загрузит библ. то она уже вызовется с параметром thread_attach.
А бывает и так, что библ. вызывается сразу с параметром thread_DEtach, без вызовов Attach. В общем в книжке все популярно расписано.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines