![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Требуется получить идентификатор текущего процесса...Использую функцию GetCurrentProcessId(void);
В результате - вылет приложения...Объясните пожалуйста, в чём дело?
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Все-таки не стоило бы приводить DWORD к указателю на строку, и потом все это - еще и к LPARAM... Я бы сделал так:
HWND hIdVal = CreateWindow( ... ); Сообщение отредактировано: volvo - 20.10.2008 0:01 |
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
HWND hIdVal = CreateWindow( ... ); Ошибка - 1>c:\study\lab3\main.cpp(175) : warning C4995: 'wsprintf': name was marked as #pragma deprecated Что это значит? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Это не ошибка, а предупреждение... wsprintf помечено как deprecated, значит, MS не рекомендует больше использовать эту функцию. Я не знаю, что там они рекомендуют для печати в строку, посмотри в MSDN что-ли, я Visual Studio не держу, попробовал на BDS 2009, работает...
|
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Пытаюсь определить дескриптор текущего процесса (используя DuplicateHandle и значение псевдодескриптора)...
Вот что получилось:
Вроде отрабатывает без ошибок и вылетов...И вопрос у меня в том, правильно ли я действую (дескриптор ли текущего процесса получаю)? |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ты получаешь дескриптор мьютекса, а не текущего процесса. Кстати, это код из MSDN, там написано, для чего он применяется... А тебе для чего это понадобилось?
|
18192123 |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата Если я хочу получить дескриптор текущего процесса.. , то кто мешает тебе получить PID этого процесса (в первом посте ты сама показала, как), а потом:DWORD PID = GetCurrentProcessId();Вроде бы возвращается именно хэндл процесса: ![]() Сообщение отредактировано: volvo - 21.10.2008 0:32 |
18192123 |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
мне требуется определить копию дескриптора текущего процесса с использованием функции OpenProcess ();
Объясните пожалуйста, как это сделать...ведь функция открывает существующий объект по переданному идентификатору.. |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата ведь функция открывает существующий объект по переданному идентификатору Как ты думаешь, что сделает вот этот вызов, к примеру:HANDLE newProcess = OpenProcess( PROCESS_DUP_HANDLE, TRUE, processID);? Не создаст копию дескриптора процесса? А вообще, не очень ясна цель производимых тобой махинаций... Поэтому очень трудно догадываться, как можно решить проблему более оптимально (да и вообще, надо ли ее решать). |
18192123 |
![]()
Сообщение
#11
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
18192123 |
![]()
Сообщение
#12
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Ещё один вопросик...по поводу DuplicateHandle()..
Мне нужно использовать её для получения дескриптора текущего процесса... Не очень понятны некоторые параметры:
И какой из этих параметров будет тем, что мне нужно? |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
По-моему ты чего-то недоговариваешь... Смотри: что делает DuplicateHandle? Она создает для объекта, заданного в контексте одного процесса, новый описатель, корректный в контексте другого процесса. То есть, если у меня есть какой-то чужой процесс processID, и объект handle в его контексте, то я могу сделать так:
HANDLE hMyProcess = GetCurrentProcess(); , это хотя бы оправдано, я получаю в hMyHandle дубликат хендла, который корректен в контексте моего процесса, и могу, скажем, его закрыть, чего мне нельзя было делать с handle... Что ты хочешь сделать - мне непонятно... Что значит Цитата использовать её для получения дескриптора текущего процесса ? Зачем? В том же самом контексте работать, и извращаться с DuplicateHandle? Я не буду этого делать... |
svetkom |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Женский Реальное имя: света Репутация: ![]() ![]() ![]() |
volvo попробую объяснить. мы с 18192123 учимся вместе, и проблема это наша общая) лабораторная работа, в первой части которой мы создавали процессы, объединяли их в задание.. а здесь требуется:
Цитата Разработать программу, которая · Определит идентификатор текущего процесса, используя функцию GetCurrentProcessID() · Определит псевдодескриптор текущего процесса, используя функцию GetCurrentProcess() · Определит дескриптор текущего процесса, используя функцию DuplicateHandle() и значение псевдодескриптора · Определит копию дескриптора текущего процесса, используя функцию OpenProcess() то есть извращения с duplicatehandle производятся из чисто спортивного интереса. а в продолжение вопроса: имело место такое: if (CreateProcess(NULL,ofn.lpstrFile, NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE,NULL,NULL,&si,&pi)) процесс lab2 запускает другой процесс, имя которого получаю из OpenDialog. пользуясь твоей терминологией: можем ли мы считать созданный процесс чужим по отношению к lab2? то есть так: запущен процесс lab2 и процесс processID, и требуется с помощью функции duplicatehandle создать описатель для processID,корректный в контексте lab2... я правильно вас поняла? если правильно,то по моему processID это hProcess? |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
svetkom, можно пальцем показать, дубликат ЧЕГО и ГДЕ надо создать? Я в приведенном огрызке кода не вижу ни lab2, ни processID, поэтому ничего сказать не могу... Больше с кусками кода я дела не имею... Это вам не листбокс создать, так можно и систему порушить вплоть до переустановки, с админскими-то правами... Оно мне надо?
|
svetkom |
![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Женский Реальное имя: света Репутация: ![]() ![]() ![]() |
volvo, извиняюс.. попробую еще раз. значит, на форме есть кнопка, по нажатию на которую происходит создание процесса и присоединение его к заданию:
вот это имелось ввиду.. не думала что все так серьезно, насчет порушения системы.. Добавлено через 14 мин. и еще вопрос. вот тут Цитата HANDLE hMyProcess = GetCurrentProcess(); handle - третий параметр в DuplicateHandle - что это? |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Допустим, сдублировала hProcess в dup... Что дальше будешь делать с ним? Что с ним можно сделать такого, чего нельзя сделать напрямую с hProcess?
Чтобы разобраться, что делает DuplicateHandle - см. 3-ю главу Рихтера Цитата handle - третий параметр в DuplicateHandle - что это? Я же написал там, это хэндл (неважно чего, любой, который можно дублировать), в контексте чужого процесса processID... |
18192123 |
![]()
Сообщение
#18
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Получаю псевдодескриптор текущего процесса с помощью GetCurrentProcess()... и всегда это -1...
Такое вообще может быть??
|
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Цитата Такое вообще может быть?? Может... Больше того, так должно быть:MSDN: GetCurrentProcess Function Цитата Remarks A pseudo handle is a special constant, currently (HANDLE)-1, that is interpreted as the current process handle. For compatibility with future operating systems, it is best to call GetCurrentProcess instead of hard-coding this constant value. The calling process can use a pseudo handle to specify its own process whenever a process handle is required. Pseudo handles are not inherited by child processes. |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 13:39 |