Поддерживает ли DuplicateHandle () какой-либо межпроцессный обмен данными (IPC), и если нет, то почему целевые параметры? - PullRequest
1 голос
/ 13 марта 2019

Я нахожу DuplicateHandle () очень запутанным. Третий и четвертый параметры, hTargetProcessHandle и lpTargetHandle, по-видимому, подразумевают, что эта функция API выполняет некоторую форму межпроцессного взаимодействия, но то, что я читал в Интернете, похоже, подразумевает (не говоря прямо), что на самом деле эта функция не может взаимодействовать ни с чем, кроме адресное пространство своего собственного процесса, и если вы действительно хотите сказать, скопируйте дескриптор локального процесса в другой процесс, вы должны сделать это самостоятельно вручную.

Так может кто-нибудь, пожалуйста, пожалейте меня и скажите мне окончательно, выполняет ли эта функция сам IPC? Также, если это не делает никакого IPC тогда, в чем смысл этих двух параметров? Как может быть «цель», если данные не отправляются и выходные данные этой функции не видны другим процессам?

Сначала я подумал, что мог бы вызвать GetCurrentProcess (), а затем использовать DuplicateHandle (), чтобы скопировать дескриптор локального процесса в другой процесс, но потом я начал понимать, что это, вероятно, не так просто.

1 Ответ

2 голосов
/ 13 марта 2019

Третий параметр hTargetProcessHandle задокументирован как

A handle to the process that is to receive the duplicated handle.

Это означает, что дескриптор (который представляет собой просто числовое значение под ним) станет пригодным для использования в целевом процессе. Однако то, как вы получаете этот дескриптор в целевой процесс и в каком контексте он будет использоваться, выходит за рамки этой функции. Также обратите внимание на то, что «должен получать» баллы в будущем и относится к результату вызова, поэтому он должен быть после завершения вызова.

Как аналогия, вы хотите разрешить другу в вашем доме. Для этого вы создаете второй ключ к вашей двери. Просто это не означает, что ваш друг теперь может открыть вашу дверь, потому что вы сначала должны дать ей это, но это первый шаг.

...