“Отказано в доступе” при работе с процессами

221
04 июня 2018, 07:50

Обращение ко многим свойствам процессов (включая безобидные StartTime, HasExited) выдают это самое исключение. Много гуглил, но везде рекомендуют от имени администратора запускать программу, а это не помогает. Нет, пишу не вирус (на шарпе это уже было бы смешно), хочу искать зомби-процессы или всякую малварь. Как можно решить проблему? Поможет ли WinAPI?

Answer 1

Для того, чтобы получить значения этих свойств для процесса, нужно иметь в отношении него право доступа PROCESS_QUERY_LIMITED_INFORMATION. Приложение всегда имеет это право в отношении других процессов того же пользователя, но для процессов других пользователей это право можно получить только при определенных условиях:

  • Запускающий пользователь должен иметь привилегии отладки (SeDebugPrivilege). По умолчанию эти привилегии доступны группе "Администраторы", но могут быть назначены другим пользователям. Для простоты иногда говорят "права администратора".

  • При включенном UAC нужно также повышение уровня привилегий (т.е., явное указание, что программа работает с правами администратора).

Если программа всегда должна запускаться с повышенными привилегиями, можно создать манифест и указать в нем это:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">        
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />        
      </requestedPrivileges>
    </security>
</trustInfo> 

Для теста создадим простую программу для отображения времени работы всех процессов:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;
namespace ConsoleApplication1
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            var processes = Process.GetProcesses();
            uint c_error = 0;
            foreach (Process pr in processes)
            {
                using (pr)
                {
                    Console.Write(pr.ProcessName.PadLeft(25));
                    try
                    {
                        Console.Write("\tRunning: " + DateTime.Now.Subtract(pr.StartTime).TotalHours.ToString("F3") + " hours ");
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\t" + ex.Message);
                        c_error++;
                    }
                    try
                    {
                        Console.Write("\tHasExited: " + pr.HasExited.ToString());
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\t" + ex.Message);
                        c_error++;
                    }
                    Console.WriteLine();
                }
            }
            Console.WriteLine();
            Console.WriteLine("Processes: {0}, Errors: {1}",
                processes.Length, c_error);
            Console.ReadKey();
        }
    }    
}

Результаты запуска без повышенных привилегий:

ConsoleApplication1.vshost      Running: 0,004 hours    HasExited: False 
                  audiodg       Running: 0,003 hours    Отказано в доступе 
                  browser       Running: 0,482 hours    HasExited: False 
                  wininit       Отказано в доступе      Отказано в доступе 
             aswidsagenta       Отказано в доступе      Отказано в доступе 
                  browser       Running: 0,128 hours    HasExited: False 
                  svchost       Отказано в доступе      Отказано в доступе 
                    csrss       Отказано в доступе      Отказано в доступе 
                      MDM       Отказано в доступе      Отказано в доступе 
                  taskmgr       Running: 0,493 hours    HasExited: False 
                  svchost       Отказано в доступе      Отказано в доступе 
                  svchost       Отказано в доступе      Отказано в доступе 
                 igfxTray       Running: 0,501 hours    HasExited: False 
                  svchost       Отказано в доступе      Отказано в доступе 
    PresentationFontCache       Отказано в доступе      Отказано в доступе 
                   igfxHK       Running: 0,501 hours    HasExited: False 
                WDExpress       Running: 0,224 hours    HasExited: False 
                  svchost       Отказано в доступе      Отказано в доступе 
                   igfxEM       Running: 0,501 hours    HasExited: False 
                      lsm       Отказано в доступе      Отказано в доступе 
                 AvastSvc       Отказано в доступе      Отказано в доступе 
                  svchost       Отказано в доступе      Отказано в доступе 
                  conhost       Running: 0,205 hours    HasExited: False 
                 iusb3mon       Running: 0,504 hours    HasExited: False 
                  browser       Running: 0,213 hours    HasExited: False 
                      LMS       Отказано в доступе      Отказано в доступе 
                 explorer       Running: 0,511 hours    HasExited: False 
                  svchost       Отказано в доступе      Отказано в доступе 
                      dwm       Running: 0,511 hours    HasExited: False 
                  AvastUI       Running: 0,504 hours    HasExited: False 
           igfxCUIService       Отказано в доступе      Отказано в доступе 
                    csrss       Отказано в доступе      Отказано в доступе 
                  spoolsv       Отказано в доступе      Отказано в доступе 
                  svchost       Отказано в доступе      Отказано в доступе 
                  browser       Running: 0,482 hours    HasExited: False 
                  MSBuild       Running: 0,205 hours    HasExited: False 
                    lsass       Отказано в доступе      Отказано в доступе 
                  browser       Running: 0,481 hours    HasExited: False 
                  conhost       Running: 0,000 hours    HasExited: False 
                 services       Отказано в доступе      Отказано в доступе 
       DiscSoftBusService       Отказано в доступе      Отказано в доступе 
            SearchIndexer       Отказано в доступе      Отказано в доступе 
                 wmpnetwk       Отказано в доступе      Отказано в доступе 
                  svchost       Отказано в доступе      Отказано в доступе 
              jhi_service       Отказано в доступе      Отказано в доступе 
          GISGKH Payments       Running: 0,505 hours    HasExited: False 
                  browser       Running: 0,475 hours    HasExited: False 
                  browser       Running: 0,478 hours    HasExited: False 
                   DTLite       Running: 0,505 hours    HasExited: False 
                  svchost       Отказано в доступе      Отказано в доступе 
           service_update       Отказано в доступе      Отказано в доступе 
                 winlogon       Отказано в доступе      Отказано в доступе 
                  browser       Running: 0,482 hours    HasExited: False 
      ConsoleApplication1       Running: 0,000 hours    HasExited: False 
           service_update       Отказано в доступе      Отказано в доступе 
                  browser       Running: 0,310 hours    HasExited: False 
                  browser       Running: 0,477 hours    HasExited: False 
                sqlwriter       Отказано в доступе      Отказано в доступе 
                     smss       Отказано в доступе      Отказано в доступе 
                 unsecapp       Отказано в доступе      Отказано в доступе 
                  svchost       Отказано в доступе      Отказано в доступе 
                  svchost       Отказано в доступе      Отказано в доступе 
                   System       Отказано в доступе      Отказано в доступе 
                 taskhost       Running: 0,512 hours    HasExited: False 
                     Idle       Отказано в доступе      Отказано в доступе 
 
Processes: 65, Errors: 75

С повышенными привилегиями:

ConsoleApplication1.vshost      Running: 0,039 hours    HasExited: False 
                  audiodg       Running: 0,038 hours    Отказано в доступе 
                  browser       Running: 0,517 hours    HasExited: False 
                  wininit       Running: 0,559 hours    HasExited: False 
             aswidsagenta       Running: 0,549 hours    HasExited: False 
                  browser       Running: 0,163 hours    HasExited: False 
                  svchost       Running: 0,556 hours    HasExited: False 
                    csrss       Running: 0,559 hours    HasExited: False 
                      MDM       Running: 0,554 hours    HasExited: False 
                  taskmgr       Running: 0,528 hours    HasExited: False 
                  svchost       Running: 0,554 hours    HasExited: False 
                  svchost       Running: 0,553 hours    HasExited: False 
                 igfxTray       Running: 0,536 hours    HasExited: False 
                  svchost       Running: 0,557 hours    HasExited: False 
    PresentationFontCache       Running: 0,537 hours    HasExited: False 
                   igfxHK       Running: 0,536 hours    HasExited: False 
                WDExpress       Running: 0,259 hours    HasExited: False 
                  svchost       Running: 0,557 hours    HasExited: False 
                   igfxEM       Running: 0,536 hours    HasExited: False 
                      lsm       Running: 0,559 hours    HasExited: False 
                 AvastSvc       Running: 0,556 hours    HasExited: False 
                  dllhost       Running: 0,000 hours    HasExited: False 
                  svchost       Running: 0,552 hours    HasExited: False 
                  conhost       Running: 0,240 hours    HasExited: False 
                 iusb3mon       Running: 0,539 hours    HasExited: False 
                  browser       Running: 0,247 hours    HasExited: False 
                      LMS       Running: 0,519 hours    HasExited: False 
                 explorer       Running: 0,546 hours    HasExited: False 
                  svchost       Running: 0,553 hours    HasExited: False 
                      dwm       Running: 0,546 hours    HasExited: False 
                  AvastUI       Running: 0,539 hours    HasExited: False 
           igfxCUIService       Running: 0,556 hours    HasExited: False 
                    csrss       Running: 0,561 hours    HasExited: False 
                  spoolsv       Running: 0,554 hours    HasExited: False 
                  svchost       Running: 0,557 hours    HasExited: False 
                  browser       Running: 0,517 hours    HasExited: False 
                  MSBuild       Running: 0,240 hours    HasExited: False 
                    lsass       Running: 0,559 hours    HasExited: False 
                  browser       Running: 0,516 hours    HasExited: False 
                 services       Running: 0,559 hours    HasExited: False 
       DiscSoftBusService       Running: 0,538 hours    HasExited: False 
      ConsoleApplication1       Running: 0,000 hours    HasExited: False 
            SearchIndexer       Running: 0,536 hours    HasExited: False 
                 wmpnetwk       Running: 0,535 hours    HasExited: False 
                  svchost       Running: 0,557 hours    HasExited: False 
              jhi_service       Running: 0,519 hours    HasExited: False 
          GISGKH Payments       Running: 0,539 hours    HasExited: False 
                  browser       Running: 0,510 hours    HasExited: False 
                  browser       Running: 0,513 hours    HasExited: False 
                   DTLite       Running: 0,540 hours    HasExited: False 
                  svchost       Running: 0,554 hours    HasExited: False 
           service_update       Running: 0,553 hours    HasExited: False 
                 winlogon       Running: 0,559 hours    HasExited: False 
                  browser       Running: 0,517 hours    HasExited: False 
                  dllhost       Running: 0,000 hours    HasExited: False 
           service_update       Running: 0,553 hours    HasExited: False 
                  browser       Running: 0,345 hours    HasExited: False 
                  browser       Running: 0,512 hours    HasExited: False 
                sqlwriter       Running: 0,553 hours    HasExited: False 
                     smss       Running: 0,562 hours    HasExited: False 
                 unsecapp       Running: 0,541 hours    HasExited: False 
                  svchost       Running: 0,557 hours    HasExited: False 
                  svchost       Running: 0,557 hours    HasExited: False 
                  conhost       Running: 0,000 hours    HasExited: False 
                   System       Running: 0,562 hours    Отказано в доступе 
                 taskhost       Running: 0,547 hours    HasExited: False 
                     Idle       Отказано в доступе      Отказано в доступе 
 
Processes: 67, Errors: 4

Как можно увидеть, при обычном запуске ошибку выдает на всех системных процессах, а при запуске с повышенными привилегиями - только на защищенных процессах (audiodg и System).

READ ALSO
wpf Validation возврат значения в модель

wpf Validation возврат значения в модель

В общем есть такой TextBox к которому добавлены ValidationRules Вопрос в том как правильно вернуть в модель(привязать к модели) флаг о наличии ошибки...

253
Как запретить ввод символов символов с клавиатуры в textBox?

Как запретить ввод символов символов с клавиатуры в textBox?

Пытаюсь создать калькулятор на Windows Forms, С#Добавил кнопки для ввода чисел и следовательно требуется ограничить ввод пользователя в TextBox

280
Описание combobox c# winforms

Описание combobox c# winforms

Как можно описать comboBox? Например, в описание combobBox написано ФРУКТЫ, а при клике в comboBox показывает название фруктов: яблоко, апельсин, банан,...

232