ОК, это попытка ответа (или просто слишком длинный комментарий, извините).
Лично я никогда не видел управляемых .NET DLL на панели Process Explorer, но, возможно, не имелискал / достаточно часто.Однако то, что я могу (и всегда мог видеть), это изображения NGENed (*.ni.dll
).
Обратите внимание также на наличие System.Data.dll
здесь, который не является NGENed, но представляет собой сборку в смешанном режиме и содержит как собственный, так и управляемый код.
Таким образом, можно сделать вывод, что вы можете видеть здесь только «сборки» NGENed и смешанного режима, потому что онипо-прежнему загружаются LoadLibrary
или LoadLibraryEx
.
Также обратите внимание на мой комментарий, который я воспроизвожу здесь для более легкого доступа:
Я думаю, что CLR не использует LoadLibrary, котораяобъяснил бы, почему вы не можете «видеть» их, используя API, которые вы описали.Фактически, CLR 4 не использует LoadLibrary для загрузки сборок - это релевантная запись в блоге.Вы всегда можете проверить источники (CoreCLR, но это не имеет значения), в частности, о том, как это делается.У меня нет действительно хорошего места, но вы могли бы начать здесь и затем уйти от него.Вместо этого используйте интерфейс ICorDebug.
Вот некоторые соответствующие цитаты из записи в блоге, указанной выше:
Вы можете спросить себя:… кого это волнует?Ну, во-первых, это приятно знать.Я не заметил объявления о государственной службе выше.Однако это подробности реализации - сборки CLR даже не гарантируются для реализации с использованием файлов, не говоря уже о файлах DLL в определенном формате, которые загружаются с помощью LoadLibrary Win32 API.
Однако существует несколько инструментов.и сценарии, основанные на том факте, что CLR загружает сборки с помощью LoadLibrary.Например, до CLR 4, если вы хотите узнать, какие сборки .NET были загружены в ваш процесс, достаточно надежной эвристикой будет запуск Sysinternals Process Explorer и просмотр представления DLL данного процесса.Это не работает для CLR 4, как вы можете видеть здесь:
Честно говоря, я не знаю, как Process Explorer удается отображать сборки (не NGENed и не смешанный режим) в вашем случае - appart от вас наблюдают за процессом CLR2 .Однако учтите, что PE использует не только Win32 API.Он также использует WMI и, вероятно, также использует CLR напрямую для получения дополнительной информации.Например, на вкладках «Свойства процесса / Сборки .NET» и «Свойства процесса / Производительность .NET» скорее всего используются ICorDebug
/ ICorProfile
и счетчики производительности / ETW соответственно.
Возможно, вам придется использоватьна один из этих интерфейсов, или что-то еще из неуправляемого API отладки или неуправляемого API в целом.
Что бы это ни было, я не думаю, чтоEnumProcessModules
и т. Д. Доставит вас по вышеуказанным причинам.