Если скопировать чужой хэндл к себе, а потом его у себя закрыть CloseHandle, то чужой хэндл, конечно, не закроется, так как
http://www.sources.ru/magazine/0804/kernel.html писал(а):Эта функция сначала проверяет таблицу хэндлов, принадлежащую вызывающему процессу, чтобы убедиться, идентифицирует ли переданный ей индекс (хэндл) объект, к которому этот процесс действительно имеет доступ. Если переданный индекс правилен, система получает адрес структуры данных объекта и уменьшает в этой структуре счетчик числа пользователей; как только счетчик обнулится, ядро удалит объект из памяти.Если же описатель неверен, происходит одно из двух. В нормальном режиме выполнения процесса CloseHandle() возвращает FALSE, a GetLastError () - код ERROR_INVALID_HANDLE. Но при выполнении процесса в режиме отладки система допольнительно уведомляет отладчик об ошибке.
Перед самым возвратом управления CloseHandle() удаляет соответствующую запись из таблицы хэндлов: данный хэндл теперь недействителен в создавшем объект процессе, и использовать его нельзя. При этом запись удаляется независимо от того, разрушен объект ядра или нет. После вызова CloseHandle() невозможно больше получить доступ к этому объекту ядра; но, если его счетчик не обнулен, объект остается в памяти. Тут все нормально, это означает лишь то, что объект используется другим процессом (или процессами). Когда и остальные процессы завершат свою работу с этим объектом (тоже вызвав CloseHandle()), он будет разрушен.
Внимание вопрос: можно ли закрыть хэндл в чужом процессе, не прибегая к внедрению кода?