System.Obsolete
один из самых полезных атрибутов в платформе, по-моему. Способность повысить предупреждение о коде, который больше не должен использоваться, очень полезна. Я люблю иметь способ сказать разработчикам, что что-то больше не должно использоваться, а также наличие способа объяснить, почему и указывают на лучший/новый способ сделать что-то.
Conditional attribute
довольно удобно также для использования отладки. Это позволяет Вам добавлять методы в своем коде в целях отладки, которые не будут скомпилированы, когда Вы создадите свое решение для выпуска.
Тогда существует много атрибутов, характерных для Веб-элементов управления, которые я нахожу полезными, но те более конкретны и не имеют никакого использования за пределами разработки управления сервером от того, что я нашел.
Это связано с изоляцией сеанса в Vista или более поздних версиях Windows. Ознакомьтесь с исходным кодом или дизассемблированием инструментов для сброса паролей, таких как Cain и Abel, которые подразумевают функциональность Vista. По сути, процесс тот же, но вы будете вызывать другую функцию для CreateRemoteThread (извините, я не думаю, что функция экспортируется, вам просто нужно ее найти, поэтому разборка работающего программного обеспечения, вероятно, лучший выбор).
Вы можете попробовать использовать RtlCreateUserThread вместо CreateRemoteThread. Этой подпрограмме не важно, в каком сеансе находится целевой процесс. Просто не забудьте, чтобы поток вызывал RtlExitUserThread до его завершения. Эти потоки не очищаются после себя, как это делают CreateThread / CreateRemoteThread.
Код реакции может дать вам хорошее представление о том, что делают эти подпрограммы.