Объекты ядра Windows Типы объектов ядра маркеры доступа / access token события / event файлы / file проекции файлов / file mapping порты завершения ввода-вывода / I/O completion port задания / Job почтовые ящики / mailslot мъютексы / mutex каналы / pipe процессы / process семафоры / semaphore потоки / thread ожидаемые таймеры / waitable timer Защита объектов ядра typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; // размер структуры LPVOID lpSecurityDescriptor; // дескриптор защиты BOOL bInheritHandle; // наследовать объект } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES; Пользователи объектов ядра Область памяти ядра Пользовательские процессы Процесс 1 Объект ядра счётчик=2 ? API Процесс 2 Таблицы дескрипторов Создание объектов ядра HANDLE CreateFile( LPCTSTR lpFileName, // имя файла DWORD dwDesiredAccess, // права доступа к файлу DWORD dwShareMode, // режим совместного использования LPSECURITY_ATTRIBUTES lpSecurityAttributes, // права доступа к объекту ядра DWORD dwCreationDisposition, // режим создания DWORD dwFlagsAndAttributes, // аттрибуты файла HANDLE hTemplateFile // дескриптор шаблона ); Создание объектов ядра HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // права доступа к объекту ядра LONG lInitialCount, // начальное значение LONG lMaximumCount, // максимальное значение LPCTSTR lpName // имя объекта ); Закрытие объектов ядра BOOL CloseHandle( HANDLE hObject // дескриптор объекта ); Совместное использование Наследование дескрипторов объектов ядра Копирование дескрипторов объектов ядра Имена объектов ядра Наследование объектов ядра Копирование дескрипторов BOOL DuplicateHandle( HANDLE hSourceProcessHandle, // дескриптор процесса-источника HANDLE hSourceHandle, // дескриптор объекта который копируем HANDLE hTargetProcessHandle, // дескриптор процесса-получателя LPHANDLE lpTargetHandle, // дескриптор объекта-копии DWORD dwDesiredAccess, // режим доступа BOOL bInheritHandle, // режим наследования копии DWORD dwOptions // дополнительные опции ); Имена объектов ядра HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // права доступа к объекту ядра LONG lInitialCount, // начальное значение LONG lMaximumCount, // максимальное значение LPCTSTR lpName // имя объекта ); Имена объектов ядра HANDLE OpenSemaphore( DWORD dwDesiredAccess, // режим доступа к объекту ядра BOOL bInheritHandle, // режим наследования LPCTSTR lpName // имя объекта );