1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Требуется получить идентификатор текущего процесса...Использую функцию GetCurrentProcessId(void); В результате - вылет приложения...Объясните пожалуйста, в чём дело?
Это не ошибка, а предупреждение... wsprintf помечено как deprecated, значит, MS не рекомендует больше использовать эту функцию. Я не знаю, что там они рекомендуют для печати в строку, посмотри в MSDN что-ли, я Visual Studio не держу, попробовал на BDS 2009, работает...
Ты получаешь дескриптор мьютекса, а не текущего процесса. Кстати, это код из MSDN, там написано, для чего он применяется... А тебе для чего это понадобилось?
Ты получаешь дескриптор мьютекса, а не текущего процесса. Кстати, это код из MSDN, там написано, для чего он применяется... А тебе для чего это понадобилось?
Уу..тогда мьютекс мне совсем не нужен?? Если я хочу получить дескриптор текущего процесса..
мне требуется определить копию дескриптора текущего процесса с использованием функции OpenProcess (); Объясните пожалуйста, как это сделать...ведь функция открывает существующий объект по переданному идентификатору..
А вообще, не очень ясна цель производимых тобой махинаций... Поэтому очень трудно догадываться, как можно решить проблему более оптимально (да и вообще, надо ли ее решать).
А вообще, не очень ясна цель производимых тобой махинаций... Поэтому очень трудно догадываться, как можно решить проблему более оптимально (да и вообще, надо ли ее решать).
Поставлен конкретный ряд заданий, так что более оптимального решения не требуется) Спасибо!!)
Ещё один вопросик...по поводу DuplicateHandle().. Мне нужно использовать её для получения дескриптора текущего процесса... Не очень понятны некоторые параметры:
По-моему ты чего-то недоговариваешь... Смотри: что делает DuplicateHandle? Она создает для объекта, заданного в контексте одного процесса, новый описатель, корректный в контексте другого процесса. То есть, если у меня есть какой-то чужой процесс processID, и объект handle в его контексте, то я могу сделать так:
, это хотя бы оправдано, я получаю в hMyHandle дубликат хендла, который корректен в контексте моего процесса, и могу, скажем, его закрыть, чего мне нельзя было делать с handle... Что ты хочешь сделать - мне непонятно... Что значит
Цитата
использовать её для получения дескриптора текущего процесса
? Зачем? В том же самом контексте работать, и извращаться с DuplicateHandle? Я не буду этого делать...
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?
svetkom, можно пальцем показать, дубликат ЧЕГО и ГДЕ надо создать? Я в приведенном огрызке кода не вижу ни lab2, ни processID, поэтому ничего сказать не могу... Больше с кусками кода я дела не имею... Это вам не листбокс создать, так можно и систему порушить вплоть до переустановки, с админскими-то правами... Оно мне надо?
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.