Операционные системы. Программирование в операционной среде Windows

11 BOOL CreateProcessA( PCTSTR pszApplicationName, // имя исполняемого файла PTSTR pszCommandLine, //указатель на командную строку PSECURITY_ATTRIBUTES psaProcess, //указатель на атрибуты защиты процесса PSECURITY_ATTRIBUTES psaThread, // указатель на атрибуты защиты потока BOOL binheri tHandles , //флаг наследования описателей ОЯ DWORD fdwCreate, / флаги, определяющие как создать процесс PVOID pvEnvironment, // указатель блока переменных окружения PCTSTR pszCurDir, // указатель текущего диска и каталога PSTARTUPINFO ps i s tartlnfo, //указатели на структуру STARTUP INFO PPROCESS_INFORMATION ppiProcInfo) ; // и структуру PROCESS_INFORMATION Первые два параметра определяют имя исполняемого файла, которым будет пользоваться новый процесс, и командную строку, передаваемую этому процессу. Параметр pszCommandLine позволяет указать полную командную строку, используемую функцией CreateProcess при создании нового процесса, при этом параметр pszApplicationName должен быть равен NULL (что бывает в 99% случаев). STARTUPINFOA si = { sizeof(si) }; PROCESS_INFORMATION pi; char szCommandLine[] = "NOTEPAD"; CreateProcessA(NULL, szCoramandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); Вместо NULL можно передать адрес строки с именем исполняемого файла, который надо запустить. Однако тогда придется указать не только его имя, но и расширение, поскольку в этом случае имя не дополняется расширением ЕХЕ автоматически. CreateProcess предполагает, что файл находится в текуш,ем каталоге (если полный путь не задан). Если в текуш,ем каталоге файла нет, функция не станет искать его в других каталогах, и процесс не будет создан. Параметры psaProcess и psaThread позволяют определить атрибуты заш,иты для объектов «процесс» и «поток» соответственно. Если значения этих атрибутов заданы как NULL, то дескрипторы заш,иты система определит по умолчанию. Если объявить и инициализировать две структуры SECURITY ATTRIBUTES, где определить атрибут blnheritHandle =TRUE, то ОЯ «процесс» получает статус наследуемого любым дочерним процессом. ОЯ «поток» не наследуется. Параметр bInheritHandles позволяет установить флаг наследования описателей ОЯ. При создании дочернего процесса, которому требуется передать наследуемые описатели ОЯ, задать параметр bIrLheritnandles=TRUE. Пижеследуюш,ий фрагмент программы демонстрирует, как наследуются описатели ОЯ (выделено курсивом). STARTUPINFOA si = { sizeof(si) }; SECURITY_ATTRIBUTES saProcess, saThread; PROCESS INFORMATION piProcessB, piProcessC;

RkJQdWJsaXNoZXIy MTY0OTYy