Вы определенно НЕ хотите просто перебирать системные процессы и убивать их всех. Есть много вещей, которые не должны быть убиты. Если вы вышли из системы в Windows, а затем вошли в систему под другим пользователем, существует много процессов, которые продолжают работать на системном уровне и являются общими для всех пользователей.
В качестве хорошего примера, если я посмотрю в диспетчере задач Windows процессы, которыми владеет мой текущий пользователь (не системный), то у меня работает ATI Catalyst Control, приложение Synaptics для моей сенсорной панели, приложение Logitech для моей мыши, что-то для стека Bluetooth, что-то для аудиосистемы, что-то для управления беспроводным сетевым интерфейсом Dell ... Если я убью все это, я подозреваю, что мои периферийные устройства будут вести себя странно, даже если после меня войдет другой пользователь.
Не могли бы вы просто вызвать фактический материал LogOut Windows с помощью P / Invoke, как предложено здесь ? Таким образом, сама Windows может делать ... ну, все, что она делает , когда пользователь выходит из системы, вместо того, чтобы вам приходилось иметь дело с этим самостоятельно.
В худшем случае , я бы попытался собрать вещи, которые были запущены Windows во время запуска. Элементы Statup из StartMenu:
C: \ Users \ Имя_пользователя \ AppData \ Roaming \ Microsoft \ Windows \ Пуск \ Меню \ Программы \ Автозагрузка
и элементы реестра:
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Run
Затем зациклите запущенные процессы и посмотрите, какие из них действительно принадлежат этому пользователю, и остановите только те из них.