EPROCESS PagefileUsage? Всем привет помогите пожалуйста разобратся с EPROCESS. В w2k PagefileUsage был в EPROCESS по смещению 0B8h. В wxp PagefileUsage уже содержится в EPROCESS_QUOTA_BLOCK. (Спасибо Four-F) почему запись Process = PsGetCurrentProcess(); quota = Process->QuotaBlock; DbgPrint("PagefileUsage:%lu\n\n",quota->PagefileUsage); выдает туфту (в wxp)4294967295 Если можете помогите. Я хочу получать данные о вирт памяти из EPROCESS но значения несуразные Всем спасибо
volodya В том то и весь прикол.Вначале я использовал структуру для w2k но с ней был полный бред.Потом я переделал wxpundoc.inc.С ним результаты получше.Но вот насет PagefileUsage полный облом.В данном случае я надеялся на то что структура из kmdkit17 в принципе реальна. Что делать подскажите.Кто работал с ней в данном вопросе(параметры виртуальной памяти). И может кто нибудь подскажет как можно с помощью softice проверить/изучить/ковырнуть структуру EPROCESS
[ VOOrDOOluck: Вначале я использовал структуру для w2k но с ней был полный бред. ] Ну так конечна. Она же для w2k. Специально ведь в именах мнклудов указано w2k, xp, net. Даже в разные каталоги запихал. [ VOOrDOOluck: В данном случае я надеялся на то что структура из kmdkit17 в принципе реальна. ] Она и есть реальна. [ VOOrDOOluck: проверить/изучить/ковырнуть структуру EPROCESS ] Проверить никак, а /изучить/ковырнуть никаких проблем. proc и в колонке KPEB будут указатели для EPROCESS. Дальше dd... Я бы вызвал ZwQuerySystemInformation с классом SystemProcessesAndThreadsInformation. И посмотрел поле SYSTEM_PROCESSES.VmCounters. Код (Text): typedef struct _VM_COUNTERS { ULONG PeakVirtualSize; ULONG VirtualSize; ULONG PageFaultCount; ULONG PeakWorkingSetSize; ULONG WorkingSetSize; ULONG QuotaPeakPagedPoolUsage; ULONG QuotaPagedPoolUsage; ULONG QuotaPeakNonPagedPoolUsage; ULONG QuotaNonPagedPoolUsage; ULONG PagefileUsage; ULONG PeakPagefileUsage; }VM_COUNTERS,*PVM_COUNTERS; А потом посмотрел откуда оно берется.
Four-F Она и есть реальна. Интересно чем это подтверждается nt = ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,\ &sp,sizeof(SYSTEM_PROCESSES),0); if (!NT_SUCCESS(nt)) { DbgPrint("VirtualSize:%lu\nPeakVirtualSize:%lu\n",\ sp.VmCounters.VirtualSize,sp.VmCounters.PeakVirtualSize); DbgPr int("HandleCount:%lu\n",sp.HandleCount); Смех и грех в том что кроме нулей(большинство)я больше ничего не вижу.Я что чтото не так делаю. То что естЬ функции это хорошо.Всю инфу они сами берут из EPROCESS. Но интересно почему когда я ее от туда же хочу взять получается фигня.Фигня получается и при вызове функций(но с этим я еще могу тупить) Four-FПопробуйте.Мне интересно у вас работает(достать PagefileUsage из EPROCESS хр)
Four-F Нарастает у меня подозрение что "А может быть вся фигня в том что в тех самых специально разделенных папках структуры EPROCESS_QUOTA_BLOCK специально для хр нету и нужно юзать из nt в которых и так все по другому". P.S.Никакой насмешки просто это реально факт на который я хотел бы услышать по возможности ответ
[ VOOrDOOluck: Интересно чем это подтверждается ] Тем, что она вытащена из ntoskrnl.pdb. Пдбэшка была от xp no sp, так что теоритически в сервис паках может отличаться, но вряд ли. [ VOOrDOOluck: Смех и грех в том что кроме нулей(большинство)я больше ничего не вижу.Я что чтото не так делаю. ] Возможно какой-нить бит из NtGlobalFlags надо включить. [ VOOrDOOluck: Попробуйте. ] Щас некогда. Может на днях попробую.
Four-F Ну ладно насчет попробуйте можно забыть. Еще один вопрос.После серий dd в айсе при просмотре EPROCESS_QUOTA_BLOCK получается что только PagefileUsage забит ахинеей ffffffff.Остальные смотрятся в принципе симпатично.Что это может значить на ваш взгляд.вот это я еще буду проверять а то инфы ноль. P.S.В двух словах можно сказать какой именно NtGlobalFlags может так портить картину. P.S.S.она вытащена из ntoskrnl.pdb КРУТО
VOOrDOOluck Возьми ntoskrnl.pdb для своей ОС. Возьми pdbdump с сайта. Возьми DIA SDK от MS. Скомпили утилиту. Пропусти pdb через нее. И будет тебе счастье.
[ VOOrDOOluck: <font color="indigo]Смех и грех в том что кроме нулей(большинство)я больше ничего не вижу.Я что чтото не так делаю.</font><!--color--> ] Щас глянул под w2k. Всё тянется. Нули только для первых двух процессов (id=0 и 8). Для остальных какие-то осмысленные цифры имеются. Инфа тянется как раз из EPROCESS_QUOTA_BLOCK. Для уточнения QuotaPeakPoolUsage DWORD 2 dup(?) ; 08h QuotaPoolUsage DWORD 2 dup(?) ; 10h QuotaPoolLimit DWORD 2 dup(?) ; 18h это на самом деле массивы из 2 элементов: первый для NonPagedPool, второй - PagedPool. Не вижу никаких предпосылок к тому, чтобы под ХР это не работало. Так что в NtGlobalFlags ничего менять не надо.
volodya Спасай.Решил попробовать твой вариант.Но на фразе "скомпили утилиту" застрял.Там проект из .нет а с ним я никогда не работал и ничего не получается.В вс гон на хедер для мидл.Что делать. Если утилита сампле идет как обобщенный с достаточной функциональностью можеш прислать?
VOOrDOOluck, там ещё основы COM надо знать. Помнится я с нуля разобрался за 2-3 дня с СOM + DIA SDK. Ещё через 2-3 дня написал простенький парсер PDB, который выдавал структуры в синтаксисе masm. Точнее полуфабрикаты. Там много гемора было с обработкой вложенных union'ов и битовых полей, поэтому я это похерил и руками добивал. Так многие определения структур из KmdKit сделаны. Сразу говорю, исходник не дам... стесняюсь Писалось в попыхах и лишь бы заработало. Вобщем, короче, разобраться можно за разумное время, надо только его найти.