Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
softrix
0 / 0 / 0
Регистрация: 05.04.2008
Сообщений: 48
#1

Как передать указатель другому процессу!? - C++

08.06.2009, 00:12. Просмотров 2293. Ответов 12
Метки нет (Все метки)

ПОдскажите как можно передать HANDLE другому процессу?
Т.е. если создавать процесс через

CreateProcess(0,"my_process.exe",0,0,TRUE,0,0,0,&si,&pi);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2009, 00:12     Как передать указатель другому процессу!?
Посмотрите здесь:

Как передать массив через указатель? C++
Как в конструкторе класса передать параметром указатель на функцию? C++
C++ Как правильно передать в функцию указатель на двумерный массив?
Указатель на функцию (как передать?) C++
C++ Как передать указатель на структуру в функцию
C++ Не знаю как правильно передать указатель
Как передать функции указатель на функцию в качестве аргумента? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
08.06.2009, 00:18     Как передать указатель другому процессу!? #2
Можно через переменные окружения передать, или через командную строку создаваемого процесса
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
08.06.2009, 00:18     Как передать указатель другому процессу!? #3
Записать например в файл
HANDLE h = ...
fwrite(h, sizeof(HANDLE), 1, fp);

в другом процессе считать.
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
08.06.2009, 00:21     Как передать указатель другому процессу!? #4
Handle чего? И для чего?
softrix
0 / 0 / 0
Регистрация: 05.04.2008
Сообщений: 48
08.06.2009, 01:14  [ТС]     Как передать указатель другому процессу!? #5
Цитата Сообщение от Vourhey Посмотреть сообщение
Handle чего? И для чего?
Я в частности пытаюсь с PIPE разобраться делаю
CreatePipe(&hRead,&hWrite,0,1024);
И соответственно в другом процессе хочу его прочитать или записать, а для этого надобы hRead отправить туда.

Через командную строку можно попробывать, а не подскажете как это делается?
Хотелось бы еще через межпроцессовые взаимодействия! пытаюсь через WM_COPYDATA указатель отправить чет не работает !
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
08.06.2009, 08:45     Как передать указатель другому процессу!? #6
Про все методы передачи данных процессу хорошо написано в книге Рихтера.
Точно не помню, но вроде как-то так
C++
1
CreateProcess(0,"my_process.exe handle1",0,0,TRUE,0,0,0,&s i,&pi);
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
08.06.2009, 08:59     Как передать указатель другому процессу!? #7
Цитата Сообщение от softrix Посмотреть сообщение
Я в частности пытаюсь с PIPE разобратьс
м-м-м-м... мне помнится, что CreatePipe() можно использовать только для передачи данных между ПОТОКАМИ одного процесса.
для передачи данных между процессами испльзуется
CreateNamedPipe() и ConnectNamedPipe().
а так как вы пытаетесь сделать - будет вылетать с ошибкой в лучшем случае. может и вообще система рухнуть, если вдруг хэндл совпадет с хэндлом системного канала.
хэндл ведь выдается конкретному процессу, в пространстве адресов другого процесса его значение некорректно.
softrix
0 / 0 / 0
Регистрация: 05.04.2008
Сообщений: 48
08.06.2009, 15:41  [ТС]     Как передать указатель другому процессу!? #8
Цитата Сообщение от Patch Посмотреть сообщение
м-м-м-м... мне помнится, что CreatePipe() можно использовать только для передачи данных между ПОТОКАМИ одного процесса.
для передачи данных между процессами испльзуется
CreateNamedPipe() и ConnectNamedPipe().
а так как вы пытаетесь сделать - будет вылетать с ошибкой в лучшем случае. может и вообще система рухнуть, если вдруг хэндл совпадет с хэндлом системного канала.
хэндл ведь выдается конкретному процессу, в пространстве адресов другого процесса его значение некорректно.
ХМ я думал что можно, просто дескриптор передать и обратиться по нему, но если межпроцессорное возможно только именованными каналами.. то буду разбираться с ними спасибо
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.06.2009, 15:46     Как передать указатель другому процессу!? #9
вообщем тут уже все сказали, но можно еще через DuplicateHandle
нене, все возможно вопрос лишь в том чтобы процесс унаследовал дискриптор, а тут вам к манам
Evg
Эксперт CАвтор FAQ
17265 / 5519 / 343
Регистрация: 30.03.2009
Сообщений: 15,024
Записей в блоге: 26
08.06.2009, 16:08     Как передать указатель другому процессу!? #10
Насколько я понимаю, HANDLE - это некий указатель. И этот указатель вообще никак нельзя переать в другой процесс. Вернее значение этого указателя передать можно, но смысла в этом нет, т.к. каждый из процессов работает в своём независимом виртуальном пространстве адресов
Search..
08.06.2009, 18:32
  #11

Не по теме:

Как взломать кнопку Пуск ??? ыыыыыы

alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.06.2009, 23:24     Как передать указатель другому процессу!? #12
Цитата Сообщение от Evg Посмотреть сообщение
Насколько я понимаю, HANDLE - это некий указатель. И этот указатель вообще никак нельзя переать в другой процесс. Вернее значение этого указателя передать можно, но смысла в этом нет, т.к. каждый из процессов работает в своём независимом виртуальном пространстве адресов
если сперва создать пайп, а потом создать процесс с правами наследования объектов ядра, то дескрипторы потомка будут численно совпадать с дескрипторами родителя на момент создания потомка, поэтому если передать ему значения хэндлов они будут иметь смысл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2009, 07:43     Как передать указатель другому процессу!?
Еще ссылки по теме:

Как в функцию передать указатель на матрицу? C++
C++ Как передать в функцию в качестве параметров указатель на файл
C++ Как передать указатель на файл в функцию?
C++ Как правильно передать массив через указатель?
C++ Как передать параметры конструктора одного класса другому?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
09.06.2009, 07:43     Как передать указатель другому процессу!? #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
если сперва создать пайп, а потом создать процесс с правами наследования объектов ядра, то дескрипторы потомка будут численно совпадать с дескрипторами родителя на момент создания потомка, поэтому если передать ему значения хэндлов они будут иметь смысл
угу.
Объекты ядра. (часть 3) совместное использование
http://club.shelek.ru/viewart.php?id=86
Yandex
Объявления
09.06.2009, 07:43     Как передать указатель другому процессу!?
Ответ Создать тему
Опции темы

Текущее время: 12:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru