И Linux, и Windows уже решили эту проблему - вы можете посмотреть на их реализации, чтобы найти рабочий метод.
Короче говоря, используйте несколько таблиц.
При обращении к дескрипторам, выдаваемым ядром, система должна гарантировать, что мошеннический процесс не может просто украсть ваш дескриптор файла и получить доступ к вашим данным. Для этого система создает таблицу дескрипторов для каждого процесса, которая содержит только дескрипторы, относящиеся к вашему процессу. Если мошеннический процесс украдет один из ваших дескрипторов и попытается использовать его, он не сможет получить доступ к вашим данным - ОС проиндексирует их таблицу дескрипторов и не найдет либо ничего, либо один из их ресурсов.
Вы можете продублировать это поведение, сначала просмотрев таблицу дескрипторов по идентификатору процесса, а затем просмотрев структуру с предоставленным дескриптором. Если идентификатор процесса не существует в карте таблицы дескрипторов, вернуть ошибку. В противном случае запустите функцию для структуры, на которую ссылается дескриптор, если он существует.