Нужно передать готовое соединение другом процессу. Прочитал про наследование дескрипторов на msdn, но примеров не нашел. Как именно мне получит доступ к наследуемуму дескриптору сокета? Где он лежит?
Чтобы «другой» (дочерний) процесс мог получить доступ к дескриптору, открытому в вашем процессе, необходимо выполнить две вещи:
Сделать дескриптор наследуемым (изначально создав его таким, либо склонировав через DuplicateHandle()
с параметром bInheritHandle == true
). Это сделает дескриптор видимым из дочернего процесса.
Передать собственно дескриптор (четырёхбайтное целое число). Как это сделать — решайте сами. Можете воспользоваться стандартным потоком ввода/вывода, или открыть именованный канал, или послать оконное сообщение главному окну дочерней программы, или даже указать его в качестве параметра командной строки дочернего процесса, если дескриптор был открыт до вызова CreateProcess()
.
Если же вы попытаетесь передать дескриптор, для которого наследование разрешено не было, дочерний процесс не сможет получить к нему доступ, будто его не существует.
Где он лежит?
В ядре операционной системы, как обычно. Изменяется лишь проверка прав доступа при обращении к объекту за дескриптором. По умолчанию требуется точное соответствие обращающегося процесса и процесса-создателя. При включении же наследования критерий соответствия превращается из «только создатель» в «создатель и его потомки».
К слову, с помощью такой штуки, как DACL (передаваемой через параметры типа LPSECURITY_ATTRIBUTES
) можно задавать ещё более гибкие разрешения.
Для дублирования дескрипторов сокетов следует использовать специальную функцию WSADuplicateSocket. Ее работа отличается от обычной DuplicateHandle
, вместо нового дескриптора она заполняет структуру WSAPROTOCOL_INFO
, которую необходимо самостоятельно передать в другой процесс и использовать для вызова WSASocket
в нем.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Вики содержит информацию о том, что ссылка не может быть переопределенаНо нижеследующий код исправно работает, причем компиляция проходит...
Как построить пирамиду, применить к ней текстуру и осветить ее? Пишу на Qt
При попытке компиляции из терминала CLion получаю сообщение
Ребят помогите с задачей, нужно взять изображение и перевести его в чёрное белое в виде матрицы 0 или 1, или как яркость вродеКакие библиотеки...