Var exe что это
Перейти к содержимому

Var exe что это

  • автор:

Расширение файла VAR

Эти файлы VAR можно просматривать с помощью два существующего (-их) прикладных (-ого) программных (-ого) средств (-а), как правило, My Personal Programmer, разработанного M:Pact Technologies. Оно связано с один основным (-и) типом (-ами) файла (-ов), но часто встречается в формате Variable Data. Расширение файла VAR указано преимущественно в категории Developer Files.

Файлы VAR были обнаружены на платформах Windows. Они подходят для настольных ПК (и мобильных устройств). Рейтинг популярности основного типа файла VAR составляет «Низкий», что означает, что эти файлы встречаются на стандартных настольных комьютерах или мобильных устройствах достаточно редко.

Если у вас возникли проблемы с открытием файлов VAR, или если вы просто хотите узнать больше о связанных с ними программах и разработчиках см. полную информацию, представленную ниже.

Форматы путей к файлам в системах Windows

Члены большинства типов в пространстве имен System.IO имеют параметр path , который позволяет указать абсолютный или относительный путь к ресурсу в файловой системе. Этот путь передается в API файловой системы Windows. В этом разделе рассматриваются форматы путей к файлам, которые можно использовать в операционных системах Windows.

Традиционные пути DOS

Стандартный путь DOS может состоять из трех компонентов:

  • Буква тома или диска, после которой следует разделитель томов ( : ).
  • Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
  • Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.

Если присутствуют все три компонента, путь является абсолютным. Если буква тома или диска не указана и имя каталога начинается с символа разделителя каталогов, такой путь задан относительно корня текущего диска. В противном случае путь задан относительно текущего каталога. В следующей таблице показаны некоторые возможные пути к каталогам и файлам.

Путь Description
C:\Documents\Newsletters\Summer2018.pdf Абсолютный путь к файлу из корня диска C: .
\Program Files\Custom Utilities\StringFinder.exe Относительный путь от корня текущего диска.
2018\January.xlsx Относительный путь к файлу в подкаталоге текущего каталога.
..\Publications\TravelBrochure.pdf Относительный путь к файлу в каталоге, начиная с текущего каталога.
C:\Projects\apilibrary\apilibrary.sln Абсолютный путь к файлу из корня диска C: .
C:Projects\apilibrary\apilibrary.sln Относительный путь из текущего каталога диска C: .

Обратите внимание на различия между двумя последними путями. В обоих случаях задается необязательный описатель тома ( C: ), однако первый путь, в отличие от второго, начинается с корня указанного тома. В результате первый путь является абсолютным из корневого каталога диска C: , тогда как второй — относительным из текущего каталога C: . Использование второй формы пути в тех случаях, когда предполагается наличие первой, является распространенным источником ошибок, связанных с путями к файлам в Windows.

Можно определить, является ли путь к файлу полным (то есть, если путь не зависит от текущего каталога и не изменяется при изменении текущего каталога), вызвав Path.IsPathFullyQualified метод. Обратите внимание, что такой путь может включать сегменты с относительным путем к каталогу ( . и .. ), но при этом по-прежнему будет полным, если разрешенный путь всегда указывает на одно и то же место.

В приведенном ниже примере показано различие между абсолютными и относительными путями. Предполагается, что каталог D:\FY2018\ существует и вы не установили какой-либо текущий каталог для диска D:\ из командной строки перед запуском этого примера.

using System; using System.Diagnostics; using System.IO; using System.Reflection; public class Example < public static void Main(string[] args) < Console.WriteLine($"Current directory is ''"); Console.WriteLine("Setting current directory to 'C:\\'"); Directory.SetCurrentDirectory(@"C:\"); string path = Path.GetFullPath(@"D:\FY2018"); Console.WriteLine($"'D:\\FY2018' resolves to "); path = Path.GetFullPath(@"D:FY2018"); Console.WriteLine($"'D:FY2018' resolves to "); Console.WriteLine("Setting current directory to 'D:\\Docs'"); Directory.SetCurrentDirectory(@"D:\Docs"); path = Path.GetFullPath(@"D:\FY2018"); Console.WriteLine($"'D:\\FY2018' resolves to "); path = Path.GetFullPath(@"D:FY2018"); // This will be "D:\Docs\FY2018" as it happens to match the drive of the current directory Console.WriteLine($"'D:FY2018' resolves to "); Console.WriteLine("Setting current directory to 'C:\\'"); Directory.SetCurrentDirectory(@"C:\"); path = Path.GetFullPath(@"D:\FY2018"); Console.WriteLine($"'D:\\FY2018' resolves to "); // This will be either "D:\FY2018" or "D:\FY2018\FY2018" in the subprocess. In the sub process, // the command prompt set the current directory before launch of our application, which // sets a hidden environment variable that is considered. path = Path.GetFullPath(@"D:FY2018"); Console.WriteLine($"'D:FY2018' resolves to "); if (args.Length < 1) < Console.WriteLine(@"Launching again, after setting current directory to D:\FY2018"); Uri currentExe = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase, UriKind.Absolute); string commandLine = $"/C cd D:\\FY2018 & \"\" stop"; ProcessStartInfo psi = new ProcessStartInfo("cmd", commandLine); ; Process.Start(psi).WaitForExit(); Console.WriteLine("Sub process returned:"); path = Path.GetFullPath(@"D:\FY2018"); Console.WriteLine($"'D:\\FY2018' resolves to "); path = Path.GetFullPath(@"D:FY2018"); Console.WriteLine($"'D:FY2018' resolves to "); > Console.WriteLine("Press any key to continue. "); Console.ReadKey(); > > // The example displays the following output: // Current directory is 'C:\Programs\file-paths' // Setting current directory to 'C:\' // 'D:\FY2018' resolves to D:\FY2018 // 'D:FY2018' resolves to d:\FY2018 // Setting current directory to 'D:\Docs' // 'D:\FY2018' resolves to D:\FY2018 // 'D:FY2018' resolves to D:\Docs\FY2018 // Setting current directory to 'C:\' // 'D:\FY2018' resolves to D:\FY2018 // 'D:FY2018' resolves to d:\FY2018 // Launching again, after setting current directory to D:\FY2018 // Sub process returned: // 'D:\FY2018' resolves to D:\FY2018 // 'D:FY2018' resolves to d:\FY2018 // The subprocess displays the following output: // Current directory is 'C:\' // Setting current directory to 'C:\' // 'D:\FY2018' resolves to D:\FY2018 // 'D:FY2018' resolves to D:\FY2018\FY2018 // Setting current directory to 'D:\Docs' // 'D:\FY2018' resolves to D:\FY2018 // 'D:FY2018' resolves to D:\Docs\FY2018 // Setting current directory to 'C:\' // 'D:\FY2018' resolves to D:\FY2018 // 'D:FY2018' resolves to D:\FY2018\FY2018 
Imports System.Diagnostics Imports System.IO Imports System.Reflection Public Module Example Public Sub Main(args() As String) Console.WriteLine($"Current directory is ''") Console.WriteLine("Setting current directory to 'C:\'") Directory.SetCurrentDirectory("C:\") Dim filePath As String = Path.GetFullPath("D:\FY2018") Console.WriteLine($"'D:\\FY2018' resolves to ") filePath = Path.GetFullPath("D:FY2018") Console.WriteLine($"'D:FY2018' resolves to ") Console.WriteLine("Setting current directory to 'D:\\Docs'") Directory.SetCurrentDirectory("D:\Docs") filePath = Path.GetFullPath("D:\FY2018") Console.WriteLine($"'D:\\FY2018' resolves to ") filePath = Path.GetFullPath("D:FY2018") ' This will be "D:\Docs\FY2018" as it happens to match the drive of the current directory Console.WriteLine($"'D:FY2018' resolves to ") Console.WriteLine("Setting current directory to 'C:\\'") Directory.SetCurrentDirectory("C:\") filePath = Path.GetFullPath("D:\FY2018") Console.WriteLine($"'D:\\FY2018' resolves to ") ' This will be either "D:\FY2018" or "D:\FY2018\FY2018" in the subprocess. In the sub process, ' the command prompt set the current directory before launch of our application, which ' sets a hidden environment variable that is considered. filePath = Path.GetFullPath("D:FY2018") Console.WriteLine($"'D:FY2018' resolves to ") If args.Length < 1 Then Console.WriteLine("Launching again, after setting current directory to D:\FY2018") Dim currentExe As New Uri(Assembly.GetExecutingAssembly().GetName().CodeBase, UriKind.Absolute) Dim commandLine As String = $"/C cd D:\FY2018 & """" stop" Dim psi As New ProcessStartInfo("cmd", commandLine) Process.Start(psi).WaitForExit() Console.WriteLine("Sub process returned:") filePath = Path.GetFullPath("D:\FY2018") Console.WriteLine($"'D:\\FY2018' resolves to ") filePath = Path.GetFullPath("D:FY2018") Console.WriteLine($"'D:FY2018' resolves to ") End If Console.WriteLine("Press any key to continue. ") Console.ReadKey() End Sub End Module ' The example displays the following output: ' Current directory is 'C:\Programs\file-paths' ' Setting current directory to 'C:\' ' 'D:\FY2018' resolves to D:\FY2018 ' 'D:FY2018' resolves to d:\FY2018 ' Setting current directory to 'D:\Docs' ' 'D:\FY2018' resolves to D:\FY2018 ' 'D:FY2018' resolves to D:\Docs\FY2018 ' Setting current directory to 'C:\' ' 'D:\FY2018' resolves to D:\FY2018 ' 'D:FY2018' resolves to d:\FY2018 ' Launching again, after setting current directory to D:\FY2018 ' Sub process returned: ' 'D:\FY2018' resolves to D:\FY2018 ' 'D:FY2018' resolves to d:\FY2018 ' The subprocess displays the following output: ' Current directory is 'C:\' ' Setting current directory to 'C:\' ' 'D:\FY2018' resolves to D:\FY2018 ' 'D:FY2018' resolves to D:\FY2018\FY2018 ' Setting current directory to 'D:\Docs' ' 'D:\FY2018' resolves to D:\FY2018 ' 'D:FY2018' resolves to D:\Docs\FY2018 ' Setting current directory to 'C:\' ' 'D:\FY2018' resolves to D:\FY2018 ' 'D:FY2018' resolves to D:\FY2018\FY2018 

UNC-пути

UNC-пути (универсальное соглашение об именовании) используются для доступа к сетевым ресурсам и имеют следующий формат:

  • Имя сервера или узла, которому предшествуют символы \\ . В качестве имени сервера может выступать имя компьютера NetBIOS, а также IP-адрес или полное доменное имя (поддерживаются адреса IPv4 и IPv6).
  • Имя общего ресурса, которое отделяется от имени узла символами \ . Имя сервера и имя общего ресурса в совокупности образуют том.
  • Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
  • Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.

Ниже приводятся некоторые примеры UNC-путей:

Путь Description
\\system07\C$\ Корневой каталог диска C: на компьютере system07 .
\\Server2\Share\Test\Foo.txt Файл Foo.txt в тестовом каталоге тома \\Server2\Share .

UNC-пути всегда должны быть полными. Они могут включать сегменты с относительным путем к каталогу ( . и .. ), однако они должны быть частью полного пути. Использовать относительные пути можно только посредством сопоставления UNC-пути с буквой диска.

Пути к устройствам DOS

В операционной системе Windows используется унифицированная объектная модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и предоставляются на уровень Win32 с использованием специальной папки с символьными ссылками, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с использованием синтаксиса пути к устройству DOS, который может иметь одну из приведенных ниже форм:

Помимо использования буквы диска, вы можете указать том с помощью его GUID. Синтаксис будет иметь вид:

Синтаксис пути к устройству DOS поддерживается в реализациях платформы .NET для ОС Windows, начиная с версий .NET Core 1.1 и .NET Framework 4.6.2.

Путь к устройству DOS состоит из следующих компонентов:

    Описатель пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS.

Примечание. Описатель \\?\ поддерживается во всех версиях .NET Core, в .NET 5 и более поздних версий, а также в .NET Framework, начиная с версии 4.6.2.

Пути к устройству DOS полностью соответствуют определению и не могут начинаться с относительного сегмента каталога ( . или .. ). Они никогда не задаются относительно текущего каталога.

Пример: способы задать ссылку на один и тот же файл

В следующем примере демонстрируются некоторые способы задать ссылку на файл с использованием API в пространстве имен System.IO. В этом примере создается экземпляр объекта FileInfo и используются его свойства Name и Length, чтобы отобразить имя и длину файла.

using System; using System.IO; class Program < static void Main() < string[] filenames = < @"c:\temp\test-file.txt", @"\\127.0.0.1\c$\temp\test-file.txt", @"\\LOCALHOST\c$\temp\test-file.txt", @"\\.\c:\temp\test-file.txt", @"\\?\c:\temp\test-file.txt", @"\\.\UNC\LOCALHOST\c$\temp\test-file.txt", @"\\127.0.0.1\c$\temp\test-file.txt" >; foreach (var filename in filenames) < FileInfo fi = new FileInfo(filename); Console.WriteLine($"file : bytes"); > > > // The example displays output like the following: // file test-file.txt: 22 bytes // file test-file.txt: 22 bytes // file test-file.txt: 22 bytes // file test-file.txt: 22 bytes // file test-file.txt: 22 bytes // file test-file.txt: 22 bytes // file test-file.txt: 22 bytes 
Imports System.IO Module Program Sub Main() Dim filenames() As String = < "c:\temp\test-file.txt", "\\127.0.0.1\c$\temp\test-file.txt", "\\LOCALHOST\c$\temp\test-file.txt", "\\.\c:\temp\test-file.txt", "\\?\c:\temp\test-file.txt", "\\.\UNC\LOCALHOST\c$\temp\test-file.txt", "\\127.0.0.1\c$\temp\test-file.txt">For Each filename In filenames Dim fi As New FileInfo(filename) Console.WriteLine($"file : bytes") Next End Sub End Module 

Нормализация путей

Практически все передаваемые в API Windows пути нормализуются. При нормализации в Windows выполняются следующие действия:

  • Идентифицируется путь.
  • Текущий каталог применяется к неполным (относительным) путям.
  • Выполняется канонизация разделителей каталогов.
  • Вычисляются относительные компоненты каталога ( . для текущего и .. для родительского каталога).
  • Удаляются некоторые символы.

Нормализация осуществляется неявно, но при необходимости вы можете выполнить ее явно, вызвав метод Path.GetFullPath, который создает оболочку для вызова функции GetFullPathName(). Также можно вызвать функцию GetFullPathName() Windows напрямую с помощью P/Invoke.

Идентификация пути

На первом шаге процесса нормализации осуществляется идентификация типа пути. Пути могут относиться к одной из нескольких категорий:

  • Пути к устройствам: начинаются с двух разделителей и знака вопроса или точки ( \\? или \\. ).
  • UNC-пути: начинаются с двух разделителей без знака вопроса или точки.
  • Полные пути DOS: начинаются с буквы диска, разделителя томов и компонентов ( C:\ ).
  • Пути к устаревшим устройствам ( CON , LPT1 ).
  • Пути относительно корня текущего диска: начинаются с одного разделителя компонентов ( \ ).
  • Пути относительно текущего каталога указанного диска: начинаются с буквы диска и разделителя томов, но не содержат разделителя компонентов ( C: ).
  • Пути относительно текущего каталога: начинаются с любых других символов ( temp\testfile.txt ).

Тип пути определяет, будет ли каким-либо образом применяться текущий каталог. Кроме того, от типа пути зависит применяемый корень.

Работа с устаревшими устройствами

Если путь указывает на устаревшее устройство DOS, например CON , COM1 или LPT1 , он преобразуется в путь к устройству путем добавления перед ним последовательности \\.\ и возвращается в таком виде.

Путь, который начинается с имени устаревшего устройства, всегда интерпретируется как путь к устаревшему устройству с помощью метода Path.GetFullPath(String). Например, путь к устройству DOS CON.TXT будет выглядеть как \\.\CON , а путь к устройству DOS COM1.TXT\file1.txt будет выглядеть как \\.\COM1 .

Применение текущего каталога

Если путь не является полным, система Windows применяет к нему текущий каталог. К UNC-путям и путям к устройствам текущий каталог не применяется. Также текущий каталог не применяется к полным путям к диску с разделителем C:\ .

Если путь начинается с одного разделителя компонентов, применяется диск текущего каталога. Например, для пути к файлу \utilities и текущего каталога C:\temp\ в результате нормализации будет получен путь C:\utilities .

Если путь начинается с буквы диска, разделителя томов и не содержит разделителя компонентов, применяется последний текущий каталог, установленный из командной оболочки. Если последний текущий каталог не был установлен, применяется диск сам по себе. Например, для пути D:sources , текущего каталога C:\Documents\ и последнего текущего каталога D:\sources\ на диске D: в результате будет получен путь D:\sources\sources . Пути, задаваемые относительно диска, являются распространенными источниками ошибок программ и логики скрипта. Предположение, что путь, начинающийся с буквы и двоеточия, не является относительным, очевидно неверно.

Если путь не начинается с разделителя, применяются текущий диск и текущий каталог. Например, для пути к файлу filecompare и текущего каталога C:\utilities\ в результате будет получен путь C:\utilities\filecompare\ .

Применение относительных путей в многопотоковых приложениях (то есть в большинстве приложений) сопряжено с определенными рисками, поскольку текущий каталог задается на уровне процесса. Таким образом, любой поток может в любое время изменить текущий каталог. Начиная с версии .NET Core 2.1, вы можете вызвать метод Path.GetFullPath(String, String) для получения абсолютного пути на основе относительного и базового (текущий каталог) путей, относительно которых требуется выполнить разрешение.

Канонизация разделителей

Все символы косой черты ( / ) преобразуются в стандартные разделители Windows, то есть символы обратной косой черты ( \ ). Если они присутствуют, последовательность символов косой черты после первых двух таких символов свертывается в один символ косой черты.

Вычисление относительных компонентов

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

  • Если обнаруживается одна точка, текущий сегмент удаляется, поскольку он ссылается на текущий каталог.
  • Если обнаруживаются две точки, удаляются текущий и родительский сегмент, поскольку в этом случае задается ссылка на родительский каталог. Родительские каталоги удаляются только в том случае, если они не находятся после корня пути. Корень пути зависит от его типа. Это будет диск ( C:\ ) для путей DOS, сервер или общий сетевой ресурс для UNC-путей ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ).

Удаление знаков

Помимо удаленных ранее разделителей и относительных сегментов во время нормализации также удаляются некоторые дополнительные знаки:

  • Если сегмент заканчивается одной точкой, эта точка удаляется. (Сегмент одного или двойного периода нормализуется на предыдущем шаге. Сегмент из трех или более периодов не нормализован и фактически является допустимым именем файла или каталога.)
  • Если путь не заканчивается разделителем, удаляются все конечные точки и пробелы (U+0020). Если последний сегмент содержит только одну или две точки, к нему применяется приведенное выше правило для относительных компонентов. Это правило устанавливает, что вы можете создать имя каталога с конечным пробелом, добавив разделитель после пробела.

Внимание Создавать имена каталогов или файлов с конечным пробелом нельзя. Наличие конечных пробелов может затруднить или исключить возможность доступа к каталогу. В связи с этим при попытке обработать каталоги или файлы, имена которых содержат конечные пробелы, происходит сбой приложения.

Пропуск нормализации

Как правило, любой путь, передаваемый в API Windows передается в функцию GetFullPathName и нормализуется. Существует одно важное исключение: путь к устройству, который начинается со знака вопроса, а не с точки. Если путь не начинается с последовательности \\?\ (обратите внимание на использование канонической формы с обратной косой чертой), он нормализуется.

Зачем нужно пропускать нормализацию? Существует три основных причины:

  1. Получение путей, которые в обычных обстоятельствах недоступны, но являются допустимыми. Например, невозможно каким-либо иным способом получить доступ к файлу или каталогу с именем hidden. .
  2. Повышение производительности за счет пропуска нормализации в тех случаях, когда нормализация уже выполнена.
  3. Только на платформе .NET Framework пропуск проверки длины пути MAX_PATH для использования путей длиной более 259 символов. Такое поведение допускается в большинстве API за некоторыми исключениями.

.NET Core и .NET 5 или более поздней версии обрабатывают длинные пути неявным образом и не выполняют проверку MAX_PATH . Проверка MAX_PATH применяется только для платформы .NET Framework.

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

Пути, начинающиеся с последовательности \\?\ , по-прежнему нормализуются, если явно передать их в функцию GetFullPathName.

Вы можете передавать пути длиной более MAX_PATH символов в функцию GetFullPathName без \\?\ . Она поддерживает пути произвольной длины, которая ограничивается лишь максимальным размером строки, поддерживаемым в Windows.

Регистр символов и файловая система Windows

Особенность файловой системы Windows заключается в том, что пользователи и разработчики, имеющие дело с другими операционными системами, могут сталкиваться с проблемами из-за того, что в именах каталогов и путях не учитывается регистр символов. Это значит, что в именах каталогов и файлов сохраняется регистр строк, используемый в момент их создания. Например, вызов метода

Directory.Create("TeStDiReCtOrY"); 
Directory.Create("TeStDiReCtOrY") 

создает каталог с именем TeStDiReCtOrY. Если переименовать каталог или файл так, чтобы изменился регистр символов, в имени будет отражен регистр, используемый в момент переименования. Например, следующий код переименовывает файл test.txt в Test.txt:

using System.IO; class Example < static void Main() < var fi = new FileInfo(@".\test.txt"); fi.MoveTo(@".\Test.txt"); >> 
Imports System.IO Module Example Public Sub Main() Dim fi As New FileInfo(".\test.txt") fi.MoveTo(".\Test.txt") End Sub End Module 

Тем не менее при сравнении имен каталогов и файлов регистр символов не учитывается. Если выполнить поиск файла с именем "test.txt", API файловой системы .NET будут игнорировать регистр символов при сравнении. Таким образом, при поиске файла "test.txt" будут возвращены совпадения для файлов "Test.txt", "TEST.TXT", "test.TXT", а также любых других их вариантов с различным сочетанием букв в верхнем и нижнем регистре.

Совместная работа с нами на GitHub

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

Переменные среды

Variables

Переменные среды, используемые в пакетных (командных) файлах, позволяют обходиться без указания абсолютных путей к директориям. Например, если нам заранее неизвестна буква системного диска, мы всегда можем использовать переменную %systemdrive%, возвращающую букву диска, на котором установлена ОС. Также, переменные применяются для оптимизации кода - многократно повторяющемуся параметру (например, разделе реестра) можно назначить короткую переменную и использовать ее. В данной статье подробно рассматриваются различные приемы работы с переменными, а также способы изменения и создания новых переменных. Теперь обо всем по порядку.

Классификация переменных среды

Справка Windows различает два типа переменных среды: системные и локальные. Системные переменные возвращают одинаковые значения для всех пользователей. К примеру, %systemdrive% - буква системного диска, и она для всех пользователей одинакова. А вот значения, возвращаемые локальными переменными, варьируются в зависимости от вошедшего в систему пользователя. Например, %userprofile% может возвращать C:\Documents and Settings\ТекущийПользователь, где ТекущийПользователь - название учетной записи пользователя. Узнать, какие переменные среды в операционной системе вам доступны и какие значения в данный момент им присвоены, вам поможет команда SET , запущенная из командной строки без параметров (Пуск – Выполнить – cmd – set ). В рамках данной статьи нас интересуют переменные, обозначающие путь к различным папкам (каталогам). Чуть подробнее о некоторых из них ниже:

Переменная Тип Описание
%SYSTEMDRIVE% Системная Возвращает имя диска, содержащего корневой каталог операционной системы Windows XP/2003 (т. е. системный корневой каталог).
%SYSTEMROOT%, %WINDIR% Системная Возвращает размещение корневого каталога операционной системы Windows XP/2003
%PATH% Системная Указывает путь поиска для исполняемых файлов.
%PROGRAMFILES% Системная Указывает путь к каталогу установки программ (Program Files)
%COMMONPROGRAMFILES% Системная Указывает путь к общему каталогу программ (Program Files\Common Files).
%TEMP% и %TMP% Системная и пользовательская Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.
%USERPROFILE% Локальная Возвращает размещение профиля для текущего пользователя.
%ALLUSERSPROFILE% Локальная Возвращает размещение профиля "All Users".
%CD% Локальная Возвращает путь к текущей папке.
%APPDATA% Локальная Возвращает используемое по умолчанию размещение данных приложений.

Использование переменных в пакетных файлах

Начнем с простенького примера:

DEL /F /Q "%AllUsersProfile%\Главное меню\Активация Windows.lnk"
DEL /F /Q "%AllUsersProfile%\Главное меню\WindowsUpdate.lnk" DEL /F /Q "%systemroot%\system32\*.scr"

В этом примере я удаляю вышеуказанные ярлыки, которые маячат перед глазами в меню Пуск, используя переменную %AllUsersProfile%, а также все файлы с расширением SCR из директории Windows\system32, используя переменную %SystemRoot%. Вместо DEL /F /Q , как вы понимаете, может быть все что угодно: от команды копирования COPY до команды запуска установки нужного нам приложения со всеми параметрами командной строки, если это потребуется. Во всех командах я специально использовал "кавычки" – это не случайно. Весь путь, включая переменные, надо заключать в кавычки, если вы используете пути, содержащие пробелы. Даже если сама переменная кавычек не содержит, после ее разбора системой в пути могут появится пробелы (например, %ProgramFiles% в C:\Program Files). В любом случае кавычки лучше использовать – это является хорошим тоном оформления командных файлов.

Как задать свои переменные

Разобранный выше пример использовал уже существующие переменные среды. И вы, вероятно, обратили внимание на символы процентов, окружающие названия переменных. Эти символы нужны для того, чтобы разрешить подстановку значений переменной в командной строке или в пакетном файле. Символы процентов указывают на то, что Cmd.exe должна обратиться к значениям переменных, а не делать посимвольное сравнение. Ниже вы увидите, как это работает. Задать свои переменные в пакетном файле можно командой SET .

Команда SET

Вы можете задать в командном файле свои переменные при помощи все той же команды SET . Чтобы добавить переменную, введите в командной строке:

set имя_переменной=значение

Чтобы отобразить переменную, введите в командной строке:

set имя_переменной

Чтобы удалить переменную, введите в командной строке:

set имя_переменной=

SET mydir=D:\Files\Work

задает переменную mydir, которая будет возвращать путь к указанной папке. Подробнее о команде вы можете прочитать из set /? . Важное примечание: переменные, задаваемые командой set , действуют лишь на протяжении командной сессии, в которой они были заданы. Эти переменные могут быть созданы, к примеру, для любых путей, надо лишь задать или найти алгоритм присвоения переменной в каждой частной ситуации, пользуясь готовыми примерами или создавая свои на их основе. Как правило, такие переменные создаются в текущей сессии командными файлами с помощью некоторых операторов. Пример назначения переменных в файле RunOnceEx.cmd, импортирующем параметры в реестр

@echo off
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
SET i=100

REG ADD %KEY% /V TITLE /D "Installing Applications" /f

REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f
REG ADD %KEY%\%i% /V 2 /D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f
SET /A i+=1

В данном скрипте командой SET задаются две переменных - %i% и %KEY%. Обратите внимание, что задаются они без символов процентов, а вот для обращения к ним %% уже нужны. Переменная %KEY% служит для упрощения и оптимизации кода. Она остается неизменной на протяжении текущей командной сессии, что избавляет от необходимости каждый раз включать в код раздел реестра. Каждый раз, когда в коде встречается %KEY%, будет происходить ее замена на HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx. А вот %i% служит для последовательной нумерации разделов реестра. При начальном значении 100 переменная увеличивается на единицу при помощи команды SET /A i+=1 после каждого блока команд, что дает последовательность 100, 101, 102 и т.д. Таким образом, строка

REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f

на самом деле отработает так

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100 /V 1 /D "C:\install\Software\WinRar.exe /s" /f

Обратите внимание, что во фрагменте файла также используется системная переменная %systemdrive%, которая соответствует букве системного диска. Пример назначения переменных в командном файле, устанавливающем приложение с CD:

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i:
start /wait “%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe”

В этом примере для всех перечисленных дисков происходит поиск определенного файла (WIN51). В случае его обнаружения на одном из дисков, последнему присваивается переменная %CDROM%, а далее уже происходит установка программного обеспечения с использованием пути, заданного созданной переменной.

Изменение переменных среды и добавление собственных переменных

Как уже было сказано выше, действие переменных, заданных командой set , ограничивается текущей командной сессией. Если вы хотите получить из временной переменной системную или пользовательскую, то надо ее прописать в реестр. Сделать это тоже можно различными способами.

Утилита setenv

Утилита работает из командной строки (сайт, загрузить). Работать с утилитой очень просто ( setenv /? ).

Пользовательские настройки: setenv -u имя_переменной значение
Системные настройки: setenv -m имя_переменной значение
Настройки Default User: setenv -d имя_переменной значение
Настройки текущего пользовательского сеанса: setenv -v имя_переменной значение

Допустим, если нужно получить переменную %temp% еще на стадии установки, то можно это проделать из cmdlines.txt, например:

:: Creating and Setting Temp folder.
md %systemdrive%\Temp
setenv -u Temp %systemdrive%\Temp
setenv -u Tmp %systemdrive%\Temp

Утилита удобна тем, что после задания переменной ею можно пользоваться сразу. Ну почти сразу - в следующей командной сессии. Чтобы использовать ее в текущей сессии, можно задействовать старую знакомую команду set :

:: Creating #EgOrus# var
set EgOrus=D:\EgOrus
setenv -u EgOrus %EgOrus%

Импорт параметров в реестр

Если же пойти путем внесения изменений в реестр после первого входа в систему, то переменные начнут "работать" только после перезагрузки или завершения пользовательского сеанса. Конечно, в процессе автоустановки можно импортировать желаемые параметры на Т-12 (см. статью Твики реестра) и обойти данную проблему. Если же вы не собираетесь использовать назначенную переменную в текущем пользовательском сеансе, то импорт в реестр вас тоже может устроить. Процесс импорта REG-файлов описывать повторно не буду, а рассмотрю команду REG ADD на конкретном примере. Допустим, вы заинтересованы иметь в системе переменную %CDROM% на постоянной основе и установить ее в процессе установки приложений с CD. Следуя коду, приведенному выше, нужно после определения переменной назначить ее системной.

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i:
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v cdrom /d %CDROM% /f

После нахождения файла WIN51 диску, на котором он был найден, присваивается локальная переменная %CDROM%, которая тут же и назначается в виде постоянной системной переменной посредством импорта в реестр. Этот метод предложил в одной из тем на конференции Oszone Sanja Alone. Заодно вы узнали. где в реестре хранятся настройки системных переменных. Настройки пользовательских переменных хранятся в HKCU\Environment. Пути, возвращаемые переменными %PROGRAMFILES% и %COMMONPROGRAMFILES%, можно посмотреть в параметрах ProgramFilesDir и CommonFilesDir в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion, но менять их там не следует. Каталоги установки программ (отличные от %SystemDrive%\Program Files) нужно конфигурировать через файл ответов.

Резюме

Командная оболочка Windows (cmd.exe) - это весьма мощный инструмент работы с системой. При помощи пакетных файлов можно автоматизировать изрядное количество задач, и именно поэтому они часто используются для автоматической установки Windows. Умелое использование переменных в пакетных файлах позволяет решать широкий спектр вопросов. Работа с командной оболочкой становится более эффективной и одновременно упрощается код пакетных файлов. Другие примеры использования переменных вы можете найти на страницах сайта или форума. Все примеры, использованные в этой статье, взяты из скриптов участников форума, за что им большое спасибо.

Терминология

Командная оболочка — это отдельный программный продукт, который обеспечивает прямую связь между пользователем и операционной системой. Текстовый пользовательский интерфейс командной строки предоставляет среду, в которой выполняются приложения и служебные программы с текстовым интерфейсом. cmd.exe - интерпретатор команд, который командная оболочка ОС Windows использует для перевода введенной команды в формат, понятный системе. К тексту ^ Командная сессия может инициироваться как запуском cmd.exe, так и запуском пакетного файла. Иными словами создается текущая командная оболочка. Соответственно выход из этой оболочки (к примеру, окончание работы пакетного файла) завершает командную сессию. К тексту ^ Пользовательский сеанс (пользовательская сессия) начинается с момента входа пользователя в систему (log on) и завершается при выходе (log off). К тексту ^

Автор: specialist, Вадим Стеркин aka Vadikan • Иcточник: forum.oszone.net; Справка Windows XP • Опубликована: 07.02.2006

Галопом по Европам: Легитимные процессы Windows на пальцах

В этой статье моей целью будет быстро и понятно внести памятку о легитимных процессах Windows. Немного расскажу, какой процесс за что отвечает, какие нормальные свойства имеют процессы, и приправлю это все небольшим количеством краткой, но полезной информации.

Я искренне приношу извинения за возможные неточности в изложении материала, информация в этой статье является "сборной солянкой" из моих слов и тысячи и тысячи источников!
По мере возможности я постараюсь обновлять материал, исправляя неточности, делая его более детализированным и актуальным.

System

Путь: Процесс не создается за счет исполняемого файла
Родительский процесс: Нет
Количество экземпляров: Один
Время запуска: Запуск системы

Здесь многословить не стоит: этот процесс отвечает за выполнение ядра операционной системы, других процессов и драйверов устройств, поэтому в основном под ним запускаются файлы .sys и некоторые важные для системы библиотеки. В обязанности System входит контроль за управлением оперативной и виртуальной памятью, объектами файловой системы.

smss.exe

Путь: %SystemRoot%\System32\smss.exe
Родительский процесс: System
Количество экземпляров: Один и дочерний, который запускается после создания сеанса
Время запуска: Через несколько секунд после запуска первого экземпляра

Session Manager Subsystem - диспетчер, отвечающий за создание новых сеансов, запуск процессов csrss.exe и winlogon.exe, отвечающих за графический интерфейс и вход в систему, а также за инициализацию переменных окружения. Первый экземпляр создает сеанс нуля и дочерний экземпляр, и как только дочерний экземпляр инициализирует новый сеанс, запуская csrss.exe и wininit.exe для сеанса 0 или winlogon.exe для сеанса 1, дочерний экземпляр завершается.

Если обнаружены проблемы с файловой системой, первостепенной функцией smss.exe является запуск системной утилиты для проверки диска - autochk.
После выполнения этих задач smss.exe переходит в пассивный режим.

Немного о сеансе 0 и сеансе 1

Сеанс 0 и сеанс 1 - это разные типы сеансов Windows, которые используются для запуска процессов.
Сеанс 0 создается при запуске системы, и в нем в фоновом режиме работают службы и процессы Windows.
Сеанс 1 создается для пользовательских процессов.

Chkdsk и autochk - что это вообще, и зачем? А разница в чем?

На самом деле, autochk - это версия chkdsk, которая запускается автоматически smss.exe при обнаруженных проблемах с диском. А разница их в том, что chkdsk можно запустить в среде Windows напрямую из командной строки, а autochk - нет.
Да и autochk работает только с NTFS, что не скажешь про chkdsk - он, в дополнение к NTFS, поддерживает FAT и exFAT.

Кстати!
По сути, chkdsk тоже может запускаться smss.exe, но это зависит от того, что указано в ключе реестра HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control\SessionManager (здесь хранится информация, предназначенная для Диспетчеpa сеансов ) в параметре BootExecute ). При запуске chkdsk Диспетчер сеансов использует параметр /r , что позволяет утилите производить поиск повреждённых секторов (наряду с ошибками файловой системы).

csrss.exe

Путь: %SystemRoot%\System32\csrss.exe
Родительский процесс: smss.exe, который, запустив csrss.exe, завершает работу
Количество экземпляров: Два или больше
Время запуска: Через несколько секунд после запуска первых двух экземпляров - для сеанса 0 и сеанса 1

Client/Server Run-Time Subsystem - подсистема выполнения "клиент/сервер" обеспечивает пользовательский режим подсистемы Windows. Csrss.exe отвечает за импорт многих DLL-библиотек, которые предоставляют WinAPI (kernel32.dll, user32.dll, ws_2_32.dll и другие), а также за обработку графического интерфейса завершения работы системы.
Процесс запускается для каждого сеанса, а именно 0 и 1, дополнительные сеансы создаются при помощи удаленного рабочего стола или за счет быстрого переключения между пользователями.

Что интересно для Windows Server

Можно проверить количество активных сеансов, введя query SESSION в командной строке. Так можно проверить, соответствует ли количество сеансов количеству запущенных csrss.exe.

И еще..

До Windows 7 csrss.exe обеспечивал старт окна консоли, но теперь этим занимается conhost.exe.

wininit.exe

Путь: %SystemRoot%\System32\wininit.exe
Родительский процесс: smss.exe, который завершает работу перед запуском wininit.exe
Количество экземпляров: Один
Время запуска: Через несколько секунд после запуска системы

После получения управления от процесса smss.exe, wininit.exe помечает себя как критический, что позволяет ему избегать нежелательного отключения при аварийном завершении сеанса или входа систему в гибернацию. Целью Windows Initialisation (wininit.exe) является запуск ключевых фоновых процессов в рамках сеанса нуля. Он запускает:

  • services.exe - Диспетчер управления службами
  • lsass.exe - Сервер проверки подлинности локальной системы безопасности
  • lsaiso.exe - для систем с включенной Credential Guard.

Дополнительно на протяжении всего сеанса работы системы wininit.exe отвечает за создание и наполнение папки TEMP . Перед выключением wininit.exe снова "активизируется" - теперь уже для корректного завершения запущенных процессов. .

Кстати!

До Windows 10 lsm.exe (Диспетчер локальных сеансов) также запускался с помощью wininit.exe. Начиная с Windows 10, эта функция перенесена в lsm.dll, которая размещена в svchost.exe.

services.exe

Путь: %SystemRoot%\System32\services.exe
Родительский процесс: wininit.exe
Количество экземпляров: Один
Время запуска: Через несколько секунд после запуска системы

В функции services.exe входит реализация Унифицированного диспетчера фоновых процессов (UBPM), который отвечает за фоновую работу таких компонентов, как Диспетчер управления службами (SCM) и Планировщик задач (Task Sheduler). Словом, services.exe отвечает за управление службами, а также за контроль за взаимодействием служб, обеспечивая их безопасную и эффективную работу.

UBPM: немного для тех, кто видит первый раз

Унифицированный диспетчер фоновых процессов (UBPM) - компонент системы, который автоматически управляет фоновыми процессами, такими как службы и запланированные задачи. Словом, он помогает оптимизировать запущенные в фоновом режиме службы, приостанавливать или завершать фоновые процессы, что позволяет экономить ресурсы системы.

Кстати!

До Windows 10, как только пользователь успешно вошел в систему в интерактивном режиме, services.exe считал загрузку успешной и устанавливал для последнего удачного набора элементов управления HKLM\SYSTEM\Select\LastKnownGood значение CurrentControlSet .

А LastKnownGood - что это вообще?

LastKnownGood являлся опцией восстановления, благодаря которой можно запустить систему с последней рабочей конфигурацией, если система не может загрузиться из-за каких-либо причин. LastKnownGood сохранял резервную копию части реестра, в которой хранится информация о системе, драйверах и настройках.

Когда это могло пригодиться? Например, если загрузка нового ПО или изменение параметров системы не привело ни к чему хорошему. Тогда можно было бы использовать эту опцию, чтобы отменить изменения и откатиться к прошлому состоянию.

svchost.exe

Путь: %SystemRoot%\system32\svchost.exe
Родительский процесс: services.exe (чаще всего)
Количество экземпляров: Несколько (обычно не менее 10)
Время запуска: В течение нескольких секунд после загрузки, однако службы могут запускаться в течение работы системы, что приводит к появлению новых экземпляров svchost.exe.

svchost.exe (в Диспетчере задач прописывается как Служба узла) - универсальный хост-процесс для служб Windows, использующийся для запуска служебных DLL. В системе запускается несколько экземпляров svchost.exe, и каждая служба работает в своем собственном процессе svchost, что позволяет изолировать ошибки в работе одной службы от других, хотя в системах с ОЗУ менее 3,5 ГБ службы приходится группировать (см. ниже). Ну а в системах с оперативной памятью более 3,5 ГБ можно увидеть даже более 50 экземпляров svchost.exe.

Злоумышленники часто пользуются преимуществом наличия большого количества процессов svchost.exe, и могут воспользоваться этим, чтобы разместить какую-либо вредоносную DLL в качестве службы, либо запустить вредоносный процесс с именем svchost.exe или что-то типа scvhost.exe, svhost.exe и так далее.
Хотя, как известно, так можно сделать с любым процессом, но с svchost.exe это происходит почаще.

  • DcomLaunch - служба, которая запускает компоненты COM и DCOM, благодаря которым программы взаимодействуют между собой на удаленных компьютерах
  • RPCSS - служба RPC (удаленный вызов процедур), благодаря которой программы взаимодействуют между собой через сеть.
  • LocalServiceNetworkRestricted - локальная служба, которая работает в пределах компьютера и имеет доступ к сети только для определенных операций.
  • LocalServiceNoNetwork - локальная служба, идентичная LocalServiceNetworkRestricted, но не имеющая доступа к сети.
  • netsvcs - группа служб Windows, благодаря которым выполняются задачи, связанные с сетью.
  • NetworkService - служба, которая позволяет выполнять задачи на удаленных хостах, и имеет доступ к сети для обмена данными.

RuntimeBroker.exe

Путь: %SystemRoot%\System32\RuntimeBroker.exe
Родительский процесс: svchost.exe
Количество экземпляров: Один или больше
Время запуска: Может быть разным

Работающий в системах Windows, начиная с Windows 8, RuntimeBroker.exe действует как прокси между ограниченными приложениями универсальной платформы Windows (UWP) и набором функций и процедур Windows API. В целях безопасности приложения UWP должны иметь ограниченные возможности взаимодействия с оборудованием, файловой системой и другими процессами, поэтому процессы-брокеры а-ля RuntimeBroker.exe используются для обеспечения требуемого уровня доступа для таких приложений.

Обычно для каждого приложения UWP существует один файл RuntimeBroker.exe. Например, запуск сalculator.exe приведет к запуску соответствующего процесса RuntimeBroker.exe.

И такое было: об утечках памяти, связанных с RuntimeBroker

Когда процесс RuntimeBroker еще был в новинку, пользователи во время работы с системой начали замечать, что RuntimeBroker.exe нещадно занимает аж более 500 МБ памяти, что несвойственно для него.
Оказывается, ошибка заключалась в следующем: каждый вызов метода TileUpdater.GetScheduledTileNotifications приводила к тому, что RuntimeBroker выделял память без ее дальнейшего высвобождения. Чаще всего с этим сталкивались пользователи, у которых было установлено приложение «The Time» для измерения времени - оно постоянно обновляло информацию на плитке.

Об этом казусе в Windows 8 можно почитать тут.

Про метод TileUpdater.GetScheduledTileNotifications

Если кратко, это метод, позволяющий получать запланированные уведомления от плиток в универсальных приложениях Windows (UWP). Он позволяет приложениям отображать информацию на стартовом экране пользователя в виде динамически обновляемых плиток.

Те самые

taskhostw.exe

Путь: %SystemRoot%\System32\taskhostw.exe
Родительский процесс: svchost.exe
Количество экземпляров: Один или больше
Время запуска: Может быть разным

Процесс Task Host Window отвечает за выполнение различных задач Windows.
С началом работы, taskhostw.exe начинает выполнять задачи, которые были назначены ему системой, а в течение работы системы выполняет непрерывный цикл прослушивания триггерных событий. Примеры триггерных событий, которые могут инициировать задачу, могут включать в себя:

  • Определенное расписание задач
  • Вход пользователя в систему
  • Запуск системы
  • Событие журнала Windows
  • Блокировка/ разблокировка рабочей станции и т.д.

Двое из ларца: В чем разница между Task Host Window и Task Scheduler?

Task Host Window отвечает за выполнение различных системных задач, например, запуск служб и выполнение запросов на исполнение программ. Taskhostw.exe может использоваться для запуска службы обновления Windows, перехода компьютера в режим сна или ожидания после определенного времени и так далее.

Task Sheduler, он же Планировщик задач, - инструмент, благодаря которому пользователь имеет возможность создавать задачи и запускать их по расписанию или при определенных событиях. Планировщик задач может быть использован для запуска программ, скриптов и автоматизации задач.

lsass.exe

Путь: %SystemRoot%\System32\lsass.exe
Родительский процесс: wininit.exe
Количество экземпляров: Один
Время запуска: В течение нескольких секунд после загрузки

Local Security Authentication Subsystem Service (Служба проверки подлинности локальной системы безопасности) отвечает за аутентификацию пользователей путем вызова соответствующего пакета аутентификации, указанного в HKLM\SYSTEM\CurrentControlSet\Control\Lsa . Обычно это Kerberos для учетных записей домена или MSV1_0 для локальных учетных записей. Помимо аутентификации пользователей, lsass.exe также отвечает за реализацию локальной политики безопасности (например, политики паролей и политики аудита), а также за запись событий в журнал событий безопасности.

Что любят котята: Mimikatz и LSASS

Многим известно, что злоумышленники могут использовать Mimikatz, зачастую для перехвата учетных данных в операционной системе, и делают они это за счет перехвата данных процесса lsass.exe.
Все просто: работает Mimikatz на уровне ядра и внедряется в процесс LSASS или использует метод DLL-injection. Кража учетных данных происходит либо за счет получения доступа к памяти процесса, в котором лежат заветные креды, либо за счет перехвата вызова функций до шифрования учетных данных.
Также Mimikatz не пренебрегает использованием стандартных функций Win32 LsaProtectMemory и LsaUnprotectMemory, которые используются для шифрования и расшифровки некоторых участков памяти с чувствительной информацией.

Чуть больше об lsass.exe можно прочитать тут.
И о любви котят к LSASS - тут.

winlogon.exe

Путь: %SystemRoot%\System32\winlogon.exe
Родительский процесс: smss.exe, который, запустив winlogon.exe, завершает работу
Количество экземпляров: Один или больше
Время запуска: В течение нескольких секунд после загрузки первого экземпляра, дополнительные экземпляры запускаются по мере создания новых сеансов (подключение с удаленного рабочего стола и быстрое переключение пользователей)

Winlogon обрабатывает интерактивный вход и выход пользователей из системы. Он запускает LogonUI.exe, который использует поставщика учетных данных для сбора учетных данных пользователя, а затем передает учетные данные lsass.exe для проверки.
После аутентификации пользователя Winlogon загружает NTUSER.DAT пользователя в HKCU, настраивает окружение пользователя, включая его рабочий стол, настройки реестра и т.д., и запускает оболочку пользователя explorer.exe через userinit.exe.

Совсем чуть-чуть об logonUI.exe

Да, название говорит само за себя: logonUI.exe отвечает за отображение экрана входа пользователя и за взаимодействие с пользователем при входе в систему. Если просто, то вывод того самого экрана входа и поля для ввода учетных данных - старания logonUI.exe.

..И об userinit.exe

Основная функция userinit.exe заключается в подготовке среды пользователя для работы в операционной системе.
Когда пользователь входит в систему, userinit.exe инициирует загрузку профиля пользователя, настройки оболочки (шаблоны рабочего стола, запуск программ и т.д.). После выполнения сих действий, userinit.exe запускает оболочку пользователя explorer.exe, которая отображает рабочий стол и другие элементы интерфейса, после чего завершает работу.

Кстати!

Обработка команд из CTRL+ALT+DEL , между прочим, тоже входит в обязанности winlogon.exe.
А тут можно почитать о Winlogon еще и узнать чуть больше - и про его состояния, и про GINA, и про все-все.

explorer.exe

Путь: %SystemRoot%\explorer.exe
Родительский процесс: userinit.exe, который завершает работу
Количество экземпляров: Один или больше, если включена опция Запускать окна с папками в отдельном процессе
Время запуска: Интерактивный вход пользователя

По своей сути, explorer.exe предоставляет пользователям доступ к файлам, хотя одновременно это файловый браузер через проводник Windows (тот самый Диспетчер файлов) и пользовательский интерфейс, предоставляющий такие функции, как:

  • Рабочий стол пользователя
  • Меню "Пуск"
  • Панель задач
  • Панель управления
  • Запуск приложений через ассоциации расширений файлов и файлы ярлыков

Словом, процесс отвечает за отображение действий пользователя: открытие и закрытие окон, перемещение и копирование файлов и тому подобное.

Запуск приложений через ассоциации расширений файлов

По сути, это процесс, при котором система использует информацию о расширении имени файла (например, .txt ) для определения программы, которая будет запущена, чтобы обработать этот файл. Например, файл расширения .txt ассоциируется в системе с текстовым редактором, потому она запустит его при двойном щелчке мышью. Словом, ассоциации расширений файлов определяют, какие программы открываются по умолчанию для определенных типов файлов.

Также и с ярлыками - при щелчке запускается связанные с ними ресурсы.

Explorer.exe — это пользовательский интерфейс по умолчанию, указанный в значении реестра HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Shell , хотя Windows может работать и с другим интерфейсом, например, с cmd.exe .
Следует заметить, что легитимный explorer.exe находится в каталоге %SystemRoot% , а не %SystemRoot%\System32 .

Explorer - это же браузер, нет?

В старые добрые времена, когда на системах еще стоял Internet Explorer, запуск этого браузера инициировал процесс iexplore.exe, и с каждой новой вкладкой создавался новый экземпляр этого процесса. Сейчас остался только explorer.exe, который ни в коем случае не связан с браузером.
Вместо Internet Explorer на наших системах стоит MS Edge, который имеет процесс msedge.exe, исполняемый файл которого лежит в \Program Files (x86)\Microsoft\Edge\Application\ .

ctfmon.exe

Путь: %SystemRoot%\System32\ctfmon.exe
Родительский процесс: Зависит от того, какой процесс запустил ctfmon.exe
Количество экземпляров: Один
Время запуска: При входе в систему

Процесс ctfmon.exe или, как привыкли его видеть, CTF-загрузчик, управляет функциями рукописного и сенсорного ввода, распознавания голоса и переключения языка на панели задач. Также процесс отслеживает активные программы и настраивает языковые параметры для обеспечения поддержки многоязычного ввода.
Ctfmon.exe может быть запущен разными процессами, и это напрямую зависит от того, какие функции ввода или языка используются в системе. Примеры родительских процессов и причины запуска:

  • svchost.exe - использование рукописного ввода или распознавания речи
  • winword.exe, excel.exe и т.д. - использование программ пакета Microsoft Office
  • searchUI.exe - использование поиска на панели задач или приложения из магазина Windows 10

Конечно, это не исчерпывающий список легитимных процессов, но, как минимум, основной. Хочется верить, что этот материал был полезен тем, кто пугается страшных букв в Диспетчере задач и тем, кто просто хочет узнать немного больше.
Спасибо за прочтение!

  • нормальные процессы
  • легитимные процессы
  • windows
  • операционная система

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *