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

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

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

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

08.06.2009, 00:12. Просмотров 2404. Ответов 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++
#include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; #include <iomanip> using std::setiosflags; ...

Как передать параметры конструктора одного класса другому? - C++
Скажите пожалуйста, как это должно работать? Как передать параметры конструктора одного класса другому? #include <iostream> using...

Наследование: как передать массив одного класса другому классу? - C++
Доброе время суток, нужна помощь. Не могу сотворить чудо. Сомневаюсь уже во всём. Как передать массив одного класса другому классу? Дабы...

Указатель на функцию (как передать?) - C++
void abc(int a, int b) { } void func(void *f(int, int)) { f; }

Как передать указатель на файл в функцию? - C++
Здравствуй по ходу написания программы столкнулся с вопросом как передать указатель на тип файл в функцию. напишите код. ...

Как передать указатель на структуру в функцию - C++
Подскажите как передать указатель *arr на структуру в функцию2, чтобы в ней использовать уже заполненные массивы: void func1() ...

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

в другом процессе считать.
Vourhey
Почетный модератор
6478 / 2253 / 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
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.06.2009, 15:46 #9
вообщем тут уже все сказали, но можно еще через DuplicateHandle
нене, все возможно вопрос лишь в том чтобы процесс унаследовал дискриптор, а тут вам к манам
Evg
Эксперт CАвтор FAQ
17621 / 5845 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
08.06.2009, 16:08 #10
Насколько я понимаю, HANDLE - это некий указатель. И этот указатель вообще никак нельзя переать в другой процесс. Вернее значение этого указателя передать можно, но смысла в этом нет, т.к. каждый из процессов работает в своём независимом виртуальном пространстве адресов
Search..
08.06.2009, 18:32
  #11

Не по теме:

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

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

Как в функцию передать указатель на матрицу? - C++
Че то я немного туплю, давно с функциями не работал, мне нужно реализовать функцию которая бы работала и изменяла элементы матрицы...

Не знаю как правильно передать указатель - C++
В общем для начала приложу код ( не пугайтесь , что придется много читать , из этого кода изучить нужно лишь 2 функции и данные структуры )...

Как передать массив через указатель? - C++
Народ, такая проблема: при передаче в функцию массива через указатель, вся информация теряется и замещается бредом каким то, вот выдержка...

Передать в неуправляемую функцию указатель на указатель - C++
Неуправляемая функция типа FUNC(int ** r); Делаю так fixed (int* ptr = arr) { FUNC((int **)ptr); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.06.2009, 07:43
Ответ Создать тему
Опции темы

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