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

Может быть не все знают, но о том, запускать или нет редактор реестра и диспетчер задач, Windows спрашивает ключ не у вахтерши в главном офисе Microsoft, а у собственного реестра. Поэтому первым делом следует узнать у кого-нибудь владеющего начальными знаниями по поиску в интернете, а в каком именно ключе реестра можно об этом прочитать? Если ты не знаешь, как устроен реестр или что такое ключ, дальше можно читать только с целью повторения букв русского алфавита, либо для общего образования, что тоже не возбраняется. Итак, по странному совпадению отключить (и влючить, конечно) РР и ДЗ можно, разыскав в реестре ветку "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System". При этом, если присмотреться внимательно и вооружиться англо-русским словариком, то можно разглядеть в этом разделе два искомых параметра: "DisableRegistryTools" и "DisableTaskMgr". Как нетрудно догадаться людям, читающим MSDN в подлиннике, первый отвечает за сохранность редактора реестра, а второй - за диспетчер задач. Однако, не стоит пить валидол и переставлять Windows, если ты не обнаружил этих параметров, ибо секрет фокуса в том, что их может видеть только сильно больной человек с нездоровой операционной системой. Тут все просто: есть параметр - нет доступа, нет параметра - выдохни.

Ну что ж, клад найден, осталось купить лопату. По намеченному ранее плану, первым делом мы должны найти соответствующую ветку реестра, затем проверить наличие ключа, и уж потом, при необходимости, ампутировать. Я же обещал, что будет всего три попсовых аккорда!
1. Найдем ветку реестра: 

RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_READ, &Key);  

RegOpenKey - это наше первое заклинание, вызывающее дух открытого ключа реестра, HKEY_CURRENT_USER - в этом разделе будем искать, 0 - просто так надо, KEY_READ - читаем по-английски, и сохраняем результат в ранее объявленную переменную Key типа HKEY.

2. Проверим наличие параметра 

RegQueryValueEx(Key, L"DisableRegistryTools", NULL, NULL, NULL, NULL); 

RegQueryValueEx используем, чтобы опросить подозреваемых, при этом во второй параметр пишем искомое, а про Key я уже говорил. Если функция вернет ERROR_SUCCESS, то нифига это не успех, это значит, что данный параметр существует и придется резать по-живому.

3. Хирургическое вмешательство. Если анализ был положительным, самое время заняться DELом. 

RegDeleteValue(Key, L"DisableRegistryTools"); 

RegDeleteValue - последнее заклинание, чтобы удалить негодяя.

Вот такие вот нехитрые телодвижения я собрал в одно целое: 

bool IsRegistryLocked()
{
    HKEY Key;
    if (RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_READ, &Key) != ERROR_SUCCESS)
        return false;
     return (RegQueryValueEx(Key, L"DisableRegistryTools", NULL, NULL, NULL, NULL) == ERROR_SUCCESS);
}
bool IsTaskMgrLocked()
{
    HKEY Key;
     if (RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_READ, &Key) != ERROR_SUCCESS) 
        return false;
     return (RegQueryValueEx(Key, L"DisableTaskMgr", NULL, NULL, NULL, NULL) == ERROR_SUCCESS);
}
void UnlockRegistry() 
{
    HKEY Key;
    if (RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_WRITE, &Key) == ERROR_SUCCESS)
        RegDeleteValue(Key, L"DisableRegistryTools");
}
void UnlockTaskMgr()
{
    HKEY Key;
    if (RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", 0, KEY_WRITE, &Key) == ERROR_SUCCESS)
        RegDeleteValue(Key, "DisableTaskMgr");
}
void CheckAll(HWND regLabel, HWND taskLabel) 
{
    if (IsRegistryLocked())
        SetWindowText(regLabel, L"Редактор реестра заблокирован");
    else
        SetWindowText(regLabel, L"Редактор реестра не заблокирован");
     if (IsTaskMgrLocked())
        SetWindowText(taskLabel, L"Диспетчер задач заблокирован");
    else
        SetWindowText(taskLabel, L"Диспетчер задач не заблокирован");
} 

Ну, конечно же, у меня есть еще пара модулей с окошками и прочей атрибутикой, но к делу это уже мало относится. А готовый экземпляр лежит в разделе "Программы"