powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача НАNDLE между процессами
4 сообщений из 4, страница 1 из 1
Передача НАNDLE между процессами
    #32658571
luser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Ситуация следующая: есть COM EXE SERVER, порт обслуживает.
на каждый порт - копия сервера.
Открыл СOM1, COM2, в памяти 2 копии. Есть потребность записать из
компоненты обслуживающей СOM1 в COM2 и наоборот. Передал через клиента HANDLE открытого COM2 компоненте обслуживающей СOM1.
Запись в порт производится в потоке у каждого отдельно - взятого компонента. Запись в таком случает в "чужой" порт , если даже известен его хендл не происходит. Я так понимаю этот HANDLE не ликвидный получился.
Как побороть это ?
...
Рейтинг: 0 / 0
Передача НАNDLE между процессами
    #32659024
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе нужно воспользоваться функцией DuplicateHandle
=====
Cat и его покойный друг Chicago
...
Рейтинг: 0 / 0
Передача НАNDLE между процессами
    #32661040
luser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ваяется каменный цветок !
Пытаюсь использовать DuplicateHandle.
НО :
1. Попытка вернуть хендл процесса для компоненты используя GetCurrentProcess возвращает все время -1
2. GetCurrentThread = -2
А как я понимаю без них хендл порта для "чужого" процесса\потока не
скопируешь. В чем могут быть грабли ?
...
Рейтинг: 0 / 0
Передача НАNDLE между процессами
    #32662206
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А MSDN почитать слабо?

GetCurrentThread

The GetCurrentThread function retrieves a pseudo handle for the current thread.


HANDLE GetCurrentThread(void);

Parameters
This function has no parameters.
Return Values
The return value is a pseudo handle for the current thread.

Remarks
A pseudo handle is a special constant that is interpreted as the current thread handle. The calling thread can use this handle to specify itself whenever a thread handle is required. Pseudo handles are not inherited by child processes.

This handle has the maximum possible access to the thread object. For systems that support security descriptors, this is the maximum access allowed by the security descriptor for the calling process. For systems that do not support security descriptors, this is THREAD_ALL_ACCESS. For more information, see Thread Security and Access Rights.

The function cannot be used by one thread to create a handle that can be used by other threads to refer to the first thread. The handle is always interpreted as referring to the thread that is using it. A thread can create a "real" handle to itself that can be used by other threads, or inherited by other processes, by specifying the pseudo handle as the source handle in a call to the DuplicateHandle function.

GetCurrentThread и GetCurrentProcess возвращают псевдодескрипторы, которые можно использовать внутри текущего потока и процесса соответственно, чтобы получить реальные дескрипторы для передачи в другой процесс нужно воспользоваться опять таки DuplicateHandle с псевдодескриптором в качестве источника. Псевдодескрипторы закрывать не нужно. Реальный дескриптор нужно закрыть вызовом CloseHandle. В твоем случае нужна синхронизация. Не стоит закрывать дескриптор до того как он был скопирован вызовом DuplicateHandle в другом процессе. Все.

Простой пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#include <windows.h>

int main(int argc, char* argv[])
{
	 //Псевдодескрипторы 
	HANDLE hPseudoProc=GetCurrentProcess(),
	       hPseudoThrd=GetCurrentThread();
	
	 //Реальные дескрипторы 
	HANDLE hProc, hThrd;

	DuplicateHandle(hPseudoProc, hPseudoProc, hPseudoProc, &hProc,  0 , FALSE, DUPLICATE_SAME_ACCESS);
	DuplicateHandle(hPseudoProc, hPseudoThrd, hPseudoProc, &hThrd,  0 , FALSE, DUPLICATE_SAME_ACCESS);
	return  0 ;
}

Рекомендую почитать Windows для профессионалов: Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. Рихтер Дж.
Пригодится
=====
Cat и его покойный друг Chicago
Код: plaintext
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача НАNDLE между процессами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]