На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Kernel Objects



Kernel object handles are process specific. That is, a process must either create a kernel object or open an existing object to obtain an object handle. Any process can create a new handle to an existing kernel object (even one created by another process), provided that the process knows the name of the object and has access to the object as defined by user security. For more information about security, see Security.

Processes can inherit or duplicate handles to the following types of kernel objects:

· Processes
· Threads
· Files (including file-mapping objects)
· Events
· Semaphores
· Mutexes
· Pipes (named and anonymous)
· Mailslots
· Communications devices



All other kernel objects are private to the process that created them; object handles cannot be duplicated or inherited.
A child process inherits an open handle from its parent process if inheritance was specified when the original handle was created and if the child process was created with the "inherit handles" flag set. An inherited handle is valid only in the context of the child process.
The DuplicateHandle function duplicates a handle into the current process or into another process. If an application duplicates one of its handles into another process, the duplicated handle is valid only in the context of the other process.

A duplicated or inherited handle is a unique value, but it refers to the same object as the original handle.
Kernel object handles include access rights that indicate the actions the application wants to perform on the object. An application specifies access rights when it creates an object or obtains an existing object handle. Each type of kernel object supports its own set of access rights. For example, event handles can have "set" or "wait" access (or both), file handles can have "read" or "write" access (or both), and so on. For more information about access rights, see Security, and topics that describe individual objects.

In the following illustration, an application creates an event object. The CreateEvent function creates the event object and returns an object handle.

After the event object has been created, the application can use the event handle to set or wait on the event. The handle remains valid until the application closes the handle or terminates.
Most kernel objects support multiple handles to a single object. For example, the application in the preceding illustration could obtain additional event object handles by using the OpenEvent function, as shown in the following illustration.


This method enables an application to have handles with different access rights. For example, Handle 1 might have "set" and "wait" access to the event, and Handle 2 might have only "wait" access.
If another process knows the event name and has security access to the object, it can create its own event object handle by using OpenEvent, as shown in the following illustration.

The original application could also duplicate one of its handles into the same process or into another process by using the DuplicateHandle function, as shown in the following illustration.


The following illustration shows how a child process inherits a handle created by its parent process.

A child process of an application automatically inherits handles created by its parent process if inheritance was specified when the handles were created and if the child process was created with the "inherit handles" flag set. Note that in the preceding illustration, Handle 2 is not equivalent to Handle 1 but does refer to the same event object.

For more information about inheritance, see Processes and Threads and Files
An object remains in memory as long as at least one object handle exists. In the following illustration, the applications use the CloseHandle function to close their event object handles. When there are no event handles, the system removes the object from memory, as shown in the following illustration.

Occasionally, an object remains in memory after all object handles have been closed. For example, a thread could create an event object and wait on the event handle. While the thread is waiting, another thread could close the same event object handle. The event object remains in memory, without any event object handles, until the event object is set to the signaled state and the wait operation is completed. At this time, the system removes the object from memory.

Windows manages file objects somewhat differently from other kernel objects. File objects contain the file pointer ѕ the pointer to the next byte to be read or written in a file. Whenever an application creates a new file handle, the system creates a new file object. Therefore, more than one file object can refer to a single file on disk, as shown in the next illustration.

Only through duplication or inheritance can more than one file handle refer to the same file object, as shown in the following illustration.


The following table lists each of the Windows kernel objects and each object's creator and destructor functions. The creator functions either create the object and an object handle or create a new existing object handle. The destructor functions close the object handle. When an application closes the last handle to a kernel object, the system removes the object from memory.

Kernel Objects

Object Creator function Destructor function
Process CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Thread CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
File CreateFile CloseHandle, DeleteFile
File mapping CreateFileMapping, OpenFileMapping CloseHandle
Event CreateEvent, OpenEvent CloseHandle
Semaphore CreateSemaphore, OpenSemaphore CloseHandle
Mutex CreateMutex, OpenMutex CloseHandle
Pipe CreatePipe CloseHandle
Named pipe CreateNamedPipe CloseHandle, DisconnectNamedPipe
Mailslot CreateMailslot CloseHandle
Communications device GetStdHandle CloseHandle
Heap HeapCreate HeapDestroy
Module LoadLibrary, GetModuleHandle FreeLibrary
Update resource BeginUpdateResource EndUpdateResource
Find file FindFirstFile FindClose
Event log OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Change notification FindFirstChangeNotification FindCloseChangeNotification



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Объекты Зерна



Объектные ручки Зерна являются процессом специфическим. То есть, процесс должен или создавать объект зерна или открывать существующий объект против получать объектную ручку. Любой процесс может создать новую ручку на существующий объект зерна (даже один созданное другим процессом), при условии, что процесс узнает имя объекта и имеет доступ к объекту как определено безопасностью потребителя. Более подробно о безопасности, смотри Безопасность.

Процессы могут унаследовать или дублировать ручки в следующие типы объектов зерна:

Процессы Резьба
Файлы (включая файловое распределение объектов) События Семафоры Mutexes
Трубы (поименованные и анонимные) Mailslots устройства Связи



Все другие объекты зерна частные в процессе, что создавшее их; объектные ручки не могут быть продублированы или унаследованы.
Процесс ребенка наследует открытую ручку из своего родительского процесса если наследство было определено когда оригинальная ручка была создана и если процесс ребенка был создан флагом "наследовать ручки" был установлен. Унаследованная ручка - в силе только в контексте процесса ребенка.
Функция DuplicateHandle дублирует ручку в текущий процесс или в другой процесс. Если приложение дублирует одну из своих ручек в другой процесс, удвоенная ручка - в силе только в контексте другого процесса.

Удвоенная или унаследованная ручка является уникальной величиной, но это имеет отношение к тому же объекту как оригинальная ручка.
Объектные ручки Зерна включают права доступа, которые указывают действия, что приложение хочет выполняться на объекте. Приложение определяет права доступа когда оно создает объект или получает существующую объектную ручку. Каждый тип объекта зерна поддерживает свою собственную установку прав доступа. Например, событие оперирует может "установил" или доступ "ожидания" (или оба), файловые ручки могут "прочитал" или доступ "записи" (или оба), и так далее. Более подробно о правах доступа, смотри Безопасность, и темы, которые описывают индивидуальные объекты.

В следующей иллюстрации, приложение создает объект события. Функция CreateEvent создает объект события и возвращает объектную ручку.

После того, как объект события будет создан, приложение может использовать ручку события, чтобы устанавливать или ожидаться в событии. Ручка остается в силе пока приложение не закроет ручку или завершит.
Наиболее зерно возражает поддержке кратного оперируется на единственный объект. Например, приложение в предыдущей иллюстрации могло бы получить объектные ручки дополнительного события используя функцию OpenEvent, как показано в следующей иллюстрации.


Этот метод позволяет приложение, чтобы иметь ручки с другими правами доступа. Например, Ручка 1 могли "установил" и доступ "ожидания" к событию, и Ручка 2 могли иметь только доступ "ожидания".
Если другой процесс знает имя события и имеет доступ безопасности к объекту, он может создать свою объектную ручку собственного события используя OpenEvent, как показано в следующей иллюстрации.

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


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

Процесс ребенка приложения автоматически наследует ручки созданные своим родительским процессом если наследство было определено когда ручки были созданы и если процесс ребенка был создан флагом "наследовать ручки" был установлен. Отметьте, что в предыдущей иллюстрации, Ручка 2 - не эквивалент, чтобы Оперировать 1 но ссшлется на тот же объект события.

Более подробно о наследстве, смотри Процессы и Резьбу и Файлы
Объект остается в памяти так же долго (длиной) как по крайней мере один объектная ручка существует. В следующей иллюстрации, приложения используют функцию CloseHandle, чтобы закрывать их объектные ручки события. Когда нет события оперируется, система удаляет объект из памяти, как показано в следующей иллюстрации.

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

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

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


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

Объекты Зерна

Функциональный Разрушитель Объектного функционального Процесса Создателя CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, Резьбы TerminateProcess CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread File CreateFile CloseHandle, Файла DeleteFile, отображающие CreateFileMapping, OpenFileMapping CloseHandle Event CreateEvent, Семафор OpenEvent CloseHandle CreateSemaphore, OpenSemaphore CloseHandle Mutex CreateMutex, OpenMutex CloseHandle Pipe CreatePipe CloseHandle
Поименованная труба CreateNamedPipe CloseHandle, устройство Связи DisconnectNamedPipe Mailslot CreateMailslot CloseHandle GetStdHandle CloseHandle Нагромождают HeapCreate HeapDestroy Module LoadLibrary, ресурс Коррекции GetModuleHandle FreeLibrary BeginUpdateResource EndUpdateResource Находит файл FindFirstFile FindClose
Протокол События OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog Изменяет уведомление FindFirstChangeNotification FindCloseChangeNotification



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz