Привет! Я искал ответ на этот вопрос, и мне интересно, знает ли кто-нибудь, имеющий опыт работы с внутренними компонентами Windows, ядро когда-либо назначит идентификатор процесса, который совпадает с идентификатором потока. Я имею в виду, что есть запущенный мной процесс a.exe, имеющий поток с идентификатором 123. Если запущен другой процесс, например b.exe, будет ли идентификатор процесса 123? Другими словами, когда идентификаторы процессов и потоков сталкиваются? Спасибо
РЕДАКТИРОВАТЬ: Кажется, что идентификаторы процессов и потоков происходят из того же пула, который называется PspCidTable. Хакер по имени Полином, который просматривал источник Windows NT, говорит следующее:
Ядро должно иметь возможность генерировать последовательность процессов и
идентификаторы потоков, которые являются уникальными для всей системы. Чтобы эффективно и
безопасно сделать это, ядро создает пул идентификаторов, которые могут быть использованы для
как процессы, так и потоки. Этот пул экспортируется в ядре как
HANDLE_TABLE объект с именем PspCidTable. Во время запуска Phase0
система, функция PspInitPhase0 вызывается. Эта функция создает
HANDLE_TABLE объект с использованием ExCreateHandleTable, который автоматически
заполняет таблицу 65536 Каждая запись 16-битная
целое число без знака (по крайней мере, в 32-битной ОС), хранящееся в списке
объект item, являющийся частью двусвязного списка. Оба процесса и
идентификаторы потоков поступают из пула PspCidTable.
Источник выше: Вещи, которые вы (вероятно) не знали о Windows
PspCidTable все еще существует в Windows XP , и эмпирические наблюдения в Windows 7 наводят меня на мысль, что вышесказанное все еще верно.