- •Операционные системы и их интерфейсы.
- •Графические ос
- •Речевые ос
- •Динамически подключаемые библиотеки.
- •Потоки и процессы.
- •Локальная память потока
- •Потоки в Windows.
- •Сервисы в Windows
- •7. Процессы в виндовс
- •8.Работа с сервисами виндовс
- •Синхронизация.
- •Система информационной безопасности
- •Синхронизация потоков в Windows
- •Управление безопасностью в Windows
- •3. Управляемый доступ к сети
- •13. Взаимоисключающий доступ к переменным
- •Управление пользователями
- •Управление группами
- •Структура консольного приложения
- •Работа с идентификаторами безопасности
- •19, Работа с консолью
- •20. Работа с дескрипторами безопасности
- •21. Работа с окном консоли
- •Часть III. Программирование консольных приложений
- •22. Работа со списками управления доступом на высоком уровне
- •23. Работа с буфером экрана
- •24. Работа с привилегиями
- •Ввод-вывод на консоль
- •Работа с маркерами доступа
- •Первичный маркер доступа
- •Имперсонализирующие маркер доступа
- •Передача данных
- •Работа со списками управления доступом на низком уровне
- •Работа с анонимными каналами в Windows
- •Управление безопасностью объектов на низком уровне
- •Глава 45. Управление безопасностью объектов на низком уровне 993
- •31) Работа с именованными каналами в Windows
- •32) Win32 и Win64. Программирование в среде Win64.
- •33) Работа с почтовыми ящиками в Windows
- •34) Использование файловой системы и функций символьного ввода/вывода Windows
- •35) Фреймовая обработка исключений
- •36) Усовершенствованные средства для работы с файлами и каталогами и знакомство с реестром
- •37. Финальная обработка исключений
- •38. Обработка исключений
- •39. Виртуальная память
- •40 . Управление памятью, отображение файлов и библиотеки dll
- •41. Работа с виртуальной памятью в windows
- •42.Управление процессами
- •43. Работа с кучей в Windows
- •44. Потоки и планирование выполнения
- •45. Общие концепции управления файлами
- •46. Синхронизация потоков
- •47. Работа с файлами в Windows
- •48. Влияние синхронизации на производительность и рекомендации по ее повышению
- •49) Работа с каталогами (папками) в Windows
- •50) Усовершенствованные методы синхронизации потоков
- •51) Асинхронный вызов процедур
- •52) Взаимодействие между процессами
- •53) Асинхронный доступ к данным.
- •54) Сетевое программирование с помощью сокетов Windows
- •55)Порты завершения
- •57)Работа с ожидающим таймером
- •58)Асинхронный ввод/вывод и порты завершения
- •Порты завершения ввода-вывода
- •59)Отображение файлов в память.
- •Достоинства метода. Альтернативой отображению может служить прямое чтение файла или запись в файл. Такой способ работы менее удобен по следующим причинам:
- •60)Безопасность объектов Windows
- •Операционные системы и их интерфейсы.
21. Работа с окном консоли
Дескриптор ОКНа КОНСОЛИ МОЖНО ПОЛУЧИТЬ, ВЫЗВав фуНКЦИЮ GetConsoleWindow, которая имеет следующий прототип:
HWND GetConsoleWindow (VOID) ;
В случае успеха эта функция возвращает дескриптор окна консоли, а в случае неудачи — null. Неудача означает, что консоли у приложения нет. Отметим, что функция GetConsoleWindow работает только на платформе операционных систем Windows 2000/XP.
ДЛЯ Чтения заголовка ОКНа КОНСОЛИ ИСПОЛЬЗуеТСЯ фуНКЦИЯ GetConsoleTitle, которая имеет следующий прототип:
DWORD GetConsoleTitle(
LPTSTR lpConsoleTitle, // адрес буфера для заголовка
182
Часть III. Программирование консольных приложений
DWORD nSize // размер буфера для заголовка в символах
);
В случае успеха эта функция возвращает длину строки с заголовком в символах, а в случае неудачи — 0.
Для установки заголовка окна консоли используется функция setconsoieTitie, которая имеет следующий прототип:
BOOL SetConsoleTitle(
LPCTSTR lpConsoleTitle // указатель на строку с заголовком
);
В случае успеха эта функция возвращает ненулевое значение, а в случае неудачи — false.
22. Работа со списками управления доступом на высоком уровне
- это доступ к элементам списка будет осуществляться при помощи специальных структур trustee и explicit_access, которые содержат информацию об элементах этих списков. А именно, структура типа trustee используется для идентификации учетных записей, которым соответствуют элементы списка управления доступом. А структуры типа explicit_access используются для доступа к самим элементам списка управления доступом. При этом структура типа explicit_access содержит поле, которое имеет тип trustee.
Для идентификации учетных записей, которым соответствуют элементы из списка управления доступом, используется структура типа trustee. Тип этой структуры определен следующим образом:
typedef struct _TRUSTEE {
struct _TRUSTEE *pMultipleTrustee; //не поддерживается
MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; // замещение
TRUSTEE_FORM TrusteeForm; // тип имени учетной записи
TRUSTEE_TYPE TrusteeType; // тип учетной записи
LPSTR ptstrName; // указатель на имя или SID учетной записи
} TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;
Поле pMuitipieTrustee должно указывать на структуру trustee, описывающую учетную запись сервера, которая может замещать (impersonates) данную структуру trustee. В настоящее время эта возможность не поддерживается и поэтому в поле pMuitipieTrustee должно быть установлено значение null.
23. Работа с буфером экрана
Буфер экрана может быть создан посредством вызова функции CreateConsoleScreenBuffer, Которая имеет следующий ПРОТОТИП:
HANDLE CreateConsoleScreenBuffer(
DWORD dwDesiredAccess, // режимы доступа
DWORD dwShareMode, // режимы разделения доступа
CONST SECURITY_ATTRIBUTES *lpSecurityAttributes, // атрибуты зашиты
DWORD dwFlags, // тип буфера экрана
LPVOID IpScreenBufferData // зарезервировано
);
В случае успешного завершения эта функция возвращает дескриптор нового буфера экрана, а в случае неудачи значение invalid_handle_value. Параметры этой функции имеют следующее назначение.
В параметре dwDesiredAccess задаются флаги, которые определяет способ доступа к буферу экрана. Этот параметр может принимать любую комбинацию следующих значений:
□ generic_read — процессу разрешается чтение данных из буфера экрана;
□ generic_write — процессу разрешается запись в буфер экрана.
Параметр dwShareMode определяет, может ли буфер экрана использоваться несколькими процессами одновременно. Если этот параметр равен 0, то создаваемый буфер экрана не может использоваться несколькими процессами одновременно. Кроме того, этот параметр может принимать любую
комбинацию следующих значений:
□ file_share_read — буфер экрана допускает совместное чтение;
□ file_share_write — буфер экрана допускает совместную запись.
Параметр IpSecurityAttributes задает атрибуты защиты. Пока он будет устанавливаться нами в null, что задает атрибуты защиты по умолчанию. Параметр dwFiags задает тип буфера экрана и может принимать только одно значение console_textmode_buffer.
Параметр lpscreenBuf ferData зарезервирован для дальнейшего использования и поэтому должен быть установлен в null. После создания буфер экрана содержит пробелы, а курсор установлен в позицию с координатами @, 0). Чтобы сделать буфер экрана активным, т. е. выводить его содержимое на экран, нужно вызвать функцию setconsoieActiveScreenBuf f er, которая имеет следующий прототип:
BOOL SetconsoieActiveScreenBuffer(HANDLE hConsoleOutput);
В случае успешного завершения эта функция возвращает ненулевое значение, а в случае неудачи — значение false. Единственным параметром этой функции является дескриптор буфера экрана.
