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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать ProcessId  (Прочитано 15097 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maa
Гость
« : 31-08-2003 07:18 » 

Как узнать ProcessId текущего процесса или, что ещё лучше, зная ProcessHandle, возвращаемый сервисом WIN32_GetCurrentProcessHandle под Win98?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 31-08-2003 17:49 » 

Поищи тут на форуме была где то темка по ID процессов совсем недавно - просто повторять неохота, да и много там инфы было...
Записан

А птичку нашу прошу не обижать!!!
maa
Гость
« Ответ #2 : 01-09-2003 09:06 » 

Была тема "Как по ID получить имя процесса (NT)" мне, по-сути, нужно то же самое, только для Win9x (из драйвера). На худой конец можно обойтись тем, чтобы по значению, возвращаемому функцией VWIN32_GetCurrentProcessHandle определять (как?) ProcessId, а уж по ProcessId можно (в прикладной программе) определить имя процесса.
Просмотр Environment Database процесса позволяет максимум получить имя процесса без пути (например, запускаемый exe'шник может не находиться в текущей директории).
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 01-09-2003 09:19 » 

Ну я не понял в чем проблема?
Перенести знания НТ на возможности 98 не получается Не понял
Сам же сказал - была тема, все что там сказано касаетсяч и твоего вопроса, если что-то не подходит формулируй поточнее...
Цитата

На худой конец можно обойтись тем, чтобы по значению, возвращаемому функцией VWIN32_GetCurrentProcessHandle определять (как?) ProcessId, а уж по ProcessId можно (в прикладной программе) определить имя процесса.

И что? Тебе этого мало - или ...
В общем я не понял задачи как она поставлена и где именно не решается...
Записан

А птичку нашу прошу не обижать!!!
maa
Гость
« Ответ #4 : 01-09-2003 14:51 » 

Так ведь DDK для Win98 и для NT - совсем разные!! Также как и архитектура этих систем. Кроме того, разные структуры, описывающие процессы.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 01-09-2003 14:55 » 

Хм - а что API тоже разный - я серьезно ибо не вдавался в эти проблемы - функции которые работают с такими данными должны быть теже по названию и параметрам...

Честно говоряы я не разбирался в той задаче - посмотри кто там давал советы и пошли ему персонально по форумной личной почте сообщение - правда тебе придется зарегистрироваться.
Записан

А птичку нашу прошу не обижать!!!
.
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 01-09-2003 14:56 » 

Цитата: maa
Так ведь DDK для Win98 и для NT - совсем разные!! Также как и архитектура этих систем. Кроме того, разные структуры, описывающие процессы.
а ты пробовал? или только разглагольствуешь? попробуй, если не получится - попробуй поискать еще раз по хелпам, а если не найдешь - спроси еще раз. Тебе точно ответят! Ага
Записан
maa
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 01-09-2003 17:12 » 

Разобрался для usermode. Под Windows 98 Pan European адрес структуры pProcess и ProcessId связаны посредством операции исключающее или с константой.
Константу можно определить следующей программой:
Код:
#include <windows.h>
#include <stdio.h>

void main ()
{
     DWORD Id = GetCurrentProcessId ();
     printf ( "GetCurrentProcessId () returns 0x%x\n", Id );
     unsigned char * ptr = ( unsigned char * ) &GetCurrentProcessId;
     if   ( *ptr == 0xa1 )
     {
          DWORD *** ptr2_to_pProcess = ( DWORD *** )( ptr + 1 );
          DWORD pProcess = *** ptr2_to_pProcess;
          printf ( "pProcess = 0x%x, xor constant = 0x%x\n", pProcess, pProcess ^ Id );
     }
     else
     {
          printf ( "Can't get pProcess and xor constant\n" );
     }
}
PS: А программирую драйвера я давно, и давно знаю, что в ядре 98 нет функции, конвертирующей pProcess в ProcessId.
« Последнее редактирование: 19-11-2007 17:52 от Алексей1153++ » Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #8 : 01-09-2003 18:01 » 

Цитата

 А программирую драйвера я давно, и давно знаю, что в ядре 98 нет функции, конвертирующей pProcess в ProcessId.


Честно - без обид - я не понимаю сути вопроса.

Что-то все настолько смутно, что угадывать не хочется.

Поясню, ты спросил про переконвертацию.
Я отослал к аналогичной же теме.
Там ты посмотрел - помогло или нет не знаю.
Счас ты выложил решение, и дополнительно сообщил то что я процитировал.
А в чем состоял вопрос - если учесть цитату?

Я не ерничаю....

TJSoft, не груби... пожалуйста...
Записан

А птичку нашу прошу не обижать!!!
maa
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 04-09-2003 12:31 » 

Вопрос вроде простой: "Как узнать ProcessId текущего процесса из драйвера под Win98?". А в более общем случае, как по значению ProcessHandle, которое возвращает сервис VWIN32_GetCurrentProcessHandle и которое на самом деле есть указатель на недокументированную структуру pProcess, вычислить ProcessId, который используется в Win32 приложениях.

Зачем мне это нужно?
- Для того, чтобы в дальнейшем из userlevel'а определить полное имя файла процесса, чтобы знать, в контексте какого приложения вызывается та или иная функция драйвера.

Аналогичная тема касалась системы NT, и не помогла в данном вопросе. Замечание: в NT DDK есть функция PsGetCurrentProcessId, возвращающая идентификатор процесса.

Цитата
Счас ты выложил решение, и дополнительно сообщил то что я процитировал

Теперь я не понял, что я сообщил, что ты процитировал.

Но как бы то ни было, получение имени файла процесса с последующей передачей его в драйвер - не лучшее решение. Хотелось бы уметь узнавать такие параметры процесса прямо в драйвере. А это, похоже, означает, что надо копаться в области данных библиотеки kernel32.dll. Над этим я сейчас и работаю. Буду благодарен за сообветствующую информацию.

PS: Что-то проблемы с сервером www.shelek.com: то по DNS не резольвится, то не пингуестя. Уже второй раз набираю этот ответ.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #10 : 04-09-2003 12:55 » 

Цитата

PS: Что-то проблемы с сервером www.shelek.com: то по DNS не резольвится, то не пингуестя. Уже второй раз набираю этот ответ.

Да проблемы пока немного сохраняются - но будут сходить на нет - мы пока живем на другом сервере и старые DNS перестроены...
У меня правда все нормально - но качество видимо не очень - вот почта не работает пока...

А по вопросу - я счас отвлекся - чуть позже если кто сможет помочь - ответит.
Записан

А птичку нашу прошу не обижать!!!
maaaaaad
Гость
« Ответ #11 : 09-09-2003 00:59 » new

а кстати по теме=)))
кто-нибудь знает как убить процесс из айса? =)
я тут недавнича присвоил зависшему процессу приоритет реального времени....кроме айса ничего больше открыть не смог =)))
команду как убить процесс не нашел=(((
пришлось hboot делать =((((
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines