Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
// Флаги
si.dwFlags = STARTF_USESHOWWINDOW;
// Показываем окошко
si.wShowWindow = SW_SHOWNORMAL;
// Информация о процессе
PROCESS_INFORMATION pi;
// Вот и всё! Теперь блокнот запущен
CreateProcess(NULL, "notepad.exe test.txt", NULL, NULL, FALSE, 0, 0, 0, &si, &pi);
А теперь более интересный пример – создание оболочки для программы MS-DOS. Для общения с консольной программой можно использовать только неименованные каналы (pipe). Проблема в том, что в WinNT неименованные каналы не наследуются порождаемым процессом. Для того чтобы наследовать неименованные каналы, необходимо установить соответствующие параметры безопасности. Но я подробно на этом останавливаться не буду – просто примите это на веру, так как дескрипторы безопасности – это отдельная большая тема.
SECURITY_DESCRIPTOR sd; // Дескриптор безопасности
SECURITY_ATTRIBUTES sa; // и его атрибуты
LPSECURITY_ATTRIBUTES lpsa = NULL;
// Это Windows NT
if (GetVersion() < 0x80000000) {
// Инициализация дескриптора
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
// Разрешаем наследование дескрипторов
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = &sd;
// А вот это уже нормальный дескриптор безопасности
lpsa = &sa;
}
// Создаём неименованный канал и получаем дескрипторы чтения/записи
HANDLE hReadPipe;