Требуется получить идентификатор текущего процесса...Использую функцию GetCurrentProcessId(void); В результате - вылет приложения...Объясните пожалуйста, в чём дело?
Ошибка - 1>c:\study\lab3\main.cpp(175) : warning C4995: 'wsprintf': name was marked as #pragma deprecated Что это значит?
volvo
20.10.2008 4:23
Это не ошибка, а предупреждение... wsprintf помечено как deprecated, значит, MS не рекомендует больше использовать эту функцию. Я не знаю, что там они рекомендуют для печати в строку, посмотри в MSDN что-ли, я Visual Studio не держу, попробовал на BDS 2009, работает...
18192123
21.10.2008 1:20
Пытаюсь определить дескриптор текущего процесса (используя DuplicateHandle и значение псевдодескриптора)...
Вроде отрабатывает без ошибок и вылетов...И вопрос у меня в том, правильно ли я действую (дескриптор ли текущего процесса получаю)?
volvo
21.10.2008 2:17
Ты получаешь дескриптор мьютекса, а не текущего процесса. Кстати, это код из MSDN, там написано, для чего он применяется... А тебе для чего это понадобилось?
18192123
21.10.2008 2:33
Цитата(volvo @ 20.10.2008 23:17)
Ты получаешь дескриптор мьютекса, а не текущего процесса. Кстати, это код из MSDN, там написано, для чего он применяется... А тебе для чего это понадобилось?
Уу..тогда мьютекс мне совсем не нужен?? Если я хочу получить дескриптор текущего процесса..
volvo
21.10.2008 3:27
Цитата
Если я хочу получить дескриптор текущего процесса..
, то кто мешает тебе получить PID этого процесса (в первом посте ты сама показала, как), а потом:
мне требуется определить копию дескриптора текущего процесса с использованием функции OpenProcess (); Объясните пожалуйста, как это сделать...ведь функция открывает существующий объект по переданному идентификатору..
volvo
25.10.2008 1:45
Цитата
ведь функция открывает существующий объект по переданному идентификатору
Как ты думаешь, что сделает вот этот вызов, к примеру:
А вообще, не очень ясна цель производимых тобой махинаций... Поэтому очень трудно догадываться, как можно решить проблему более оптимально (да и вообще, надо ли ее решать).
18192123
25.10.2008 1:52
Цитата(volvo @ 24.10.2008 22:45)
А вообще, не очень ясна цель производимых тобой махинаций... Поэтому очень трудно догадываться, как можно решить проблему более оптимально (да и вообще, надо ли ее решать).
Поставлен конкретный ряд заданий, так что более оптимального решения не требуется) Спасибо!!)
18192123
26.10.2008 0:58
Ещё один вопросик...по поводу DuplicateHandle().. Мне нужно использовать её для получения дескриптора текущего процесса... Не очень понятны некоторые параметры:
И какой из этих параметров будет тем, что мне нужно?
volvo
26.10.2008 1:22
По-моему ты чего-то недоговариваешь... Смотри: что делает DuplicateHandle? Она создает для объекта, заданного в контексте одного процесса, новый описатель, корректный в контексте другого процесса. То есть, если у меня есть какой-то чужой процесс processID, и объект handle в его контексте, то я могу сделать так:
, это хотя бы оправдано, я получаю в hMyHandle дубликат хендла, который корректен в контексте моего процесса, и могу, скажем, его закрыть, чего мне нельзя было делать с handle... Что ты хочешь сделать - мне непонятно... Что значит
Цитата
использовать её для получения дескриптора текущего процесса
? Зачем? В том же самом контексте работать, и извращаться с DuplicateHandle? Я не буду этого делать...
svetkom
27.10.2008 3:46
volvo попробую объяснить. мы с 18192123 учимся вместе, и проблема это наша общая) лабораторная работа, в первой части которой мы создавали процессы, объединяли их в задание.. а здесь требуется:
Цитата
Разработать программу, которая · Определит идентификатор текущего процесса, используя функцию GetCurrentProcessID() · Определит псевдодескриптор текущего процесса, используя функцию GetCurrentProcess() · Определит дескриптор текущего процесса, используя функцию DuplicateHandle() и значение псевдодескриптора · Определит копию дескриптора текущего процесса, используя функцию OpenProcess()
то есть извращения с duplicatehandle производятся из чисто спортивного интереса. а в продолжение вопроса: имело место такое:
if (CreateProcess(NULL,ofn.lpstrFile, NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE,NULL,NULL,&si,&pi)) { hProcess=pi.hProcess; AssignProcessToJobObject(hJob,hProcess); }
процесс lab2 запускает другой процесс, имя которого получаю из OpenDialog. пользуясь твоей терминологией: можем ли мы считать созданный процесс чужим по отношению к lab2? то есть так: запущен процесс lab2 и процесс processID, и требуется с помощью функции duplicatehandle создать описатель для processID,корректный в контексте lab2... я правильно вас поняла? если правильно,то по моему processID это hProcess?
volvo
27.10.2008 4:33
svetkom, можно пальцем показать, дубликат ЧЕГО и ГДЕ надо создать? Я в приведенном огрызке кода не вижу ни lab2, ни processID, поэтому ничего сказать не могу... Больше с кусками кода я дела не имею... Это вам не листбокс создать, так можно и систему порушить вплоть до переустановки, с админскими-то правами... Оно мне надо?
svetkom
27.10.2008 4:54
volvo, извиняюс.. попробую еще раз. значит, на форме есть кнопка, по нажатию на которую происходит создание процесса и присоединение его к заданию:
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.