Текущий архив: 2005.02.20;
Скачать: CL | DM;
ВнизО профессионализме программиста Найти похожие ветки
← →
Игорь Шевченко © (2005-01-27 15:42) [40]
> а например, окна объектом ядра не являются
LOL. Интересно, чьими объектами являются окна.
> Есть некий признак по которому однозначно определяется объект
> ядра это или нет
Было бы очень любопытно его услышать.
← →
jack128 © (2005-01-27 15:50) [41]Игорь Шевченко © (27.01.05 15:42) [40]
Интересно, чьими объектами являются окна.
Уж точно не ядра. Окно может уничтожить кто угодно и когда угодно, а, например, процесс только ядро после того как будут закрыты все хендлы
← →
Kerk © (2005-01-27 15:52) [42]jack128 © (27.01.05 15:50) [41]
а окно разве не объект shell ? как оно с ядром связано?
← →
Игорь Шевченко © (2005-01-27 15:54) [43]jack128 © (27.01.05 15:50) [41]
> Уж точно не ядра. Окно может уничтожить кто угодно и когда
> угодно, а, например, процесс только ядро после того как будут закрыты все хендлы
Ой. Откуда информация ?
А файл ?
← →
esu © (2005-01-27 16:01) [44]
> jack128 © (27.01.05 15:50) [41]
Окно создаешь в API, получаешь к нему хендл, дальше с ним работаешь... почему не объект ядра ? :)
← →
jack128 © (2005-01-27 16:01) [45]Kerk © (27.01.05 15:52) [42]
а окно разве не объект shell ? как оно с ядром связано?
Так и говорю, что окно - НЕ объект ядра
Игорь Шевченко © (27.01.05 15:54) [43]
Ой. Откуда информация ?
Рихтер на ушко шепнул ;-)
А файл
А что файл? Разве когда мы открываем файл мы не создаем НОВЫЙ объект ядра, даже если этот же файл был открыт другим процессом?
← →
Игорь Шевченко © (2005-01-27 16:04) [46]jack128 © (27.01.05 16:01) [45]
> Рихтер на ушко шепнул ;-)
>
> А файл
> А что файл? Разве когда мы открываем файл мы не создаем
> НОВЫЙ объект ядра, даже если этот же файл был открыт другим
> процессом?
Я очень извиняюсь, а медведь между Рихтером и тобой не пробегал в тот момент, когда он шептал ?
"Разве когда мы открываем файл мы не создаем
НОВЫЙ объект ядра, даже если этот же файл был открыт другим
процессом?" - нет, не создаем. Объект один и тот же.
Так чьими объектами являются окна ?
← →
esu © (2005-01-27 16:04) [47]хотя да, действительно не объект
← →
default © (2005-01-27 16:04) [48]jack128 © (27.01.05 15:50) [41]
бред
TerminateProcess (понятно что при этом система сама всё закроет)
но тем не менее
когда захочу тогда и порешу:)
"Учет пользователей объектов ядра
Объекты ядра принадлежат ядру, а не процессу. Иначе говоря, если Ваш процесс вызывает функцию, создающую объект ядра, а затем завершается, объект ядра может быть не разрушен. В большинстве случаев такой объект все же разрушается; но если созданный Вами объект ядра используется другим процессом, ядро запретит разрушение объекта до тех пор, пока от него не откажется и тот процесс.
Ядру известно, сколько процессов использует конкретный объект ядра, посколь ку в каждом объекте есть счетчик числа его пользователей. Этот счетчик — один из элементов данных, общих для всех типов объектов ядра. В момепт создания объекта счетчику присваивается 1. Когда к существующему объекту ядра обращается другой процесс, счетчик увеличивается на 1. А когда какой-то процесс завершается, счетчики всех используемых им объектов ядра автоматически уменьшаются на 1. Как только счетчик какого-либо объекта обнуляется, ядро уничтожает этот объект."
Рихтер
потоки принадлежат процессу а окна потокам отсюда окна есть
← →
default © (2005-01-27 16:07) [49]потоки принадлежат процессу а окна потокам отсюда окна есть собственность процесса а не ядра ОС
← →
Игорь Шевченко © (2005-01-27 16:10) [50]esu © (27.01.05 16:04) [47]
Почему ?
default © (27.01.05 16:07) [49]
А хуки ?
← →
jack128 © (2005-01-27 16:11) [51]default © (27.01.05 16:04) [48]
TerminateProcess (понятно что при этом система сама всё закроет)
система уничтожить запущенную программу, но объект ядра не будет уничтожен пока не будут закрыты все хендлы.
Игорь Шевченко © (27.01.05 16:04) [46]
Я очень извиняюсь, а медведь между Рихтером и тобой не пробегал в тот момент, когда он шептал ?
Цитата:
Ядру известно, ссколько процессов использует конкретный объект ядра, поскольку в каждом объекте есть счетчик числа его пользователей. Этот счетчик - один из элеменов данных общих для всех типов объектов ядра. Когда к существующему объекту ядра обращается другой процесс, счетчик увеличивается на 1. А когда какой то процесс завершается, счетчик всех используемых им оъектов ядра автоматически уменьшается на 1. Как только счетчик какого либо объекта обнуляется, ядро уничтожает этот объект.
Конец цитаты
← →
Игорь Шевченко © (2005-01-27 16:14) [52]jack128 © (27.01.05 16:11) [51]
> Цитата:
> Ядру известно, ссколько процессов использует конкретный
> объект ядра, поскольку в каждом объекте есть счетчик числа
> его пользователей. Этот счетчик - один из элеменов данных
> общих для всех типов объектов ядра. Когда к существующему
> объекту ядра обращается другой процесс, счетчик увеличивается
> на 1. А когда какой то процесс завершается, счетчик всех
> используемых им оъектов ядра автоматически уменьшается на
> 1. Как только счетчик какого либо объекта обнуляется, ядро
> уничтожает этот объект.
> Конец цитаты
1. И причем здесь твое утверждение про файл, открытый другим процессом ?
2. С окнами тоже самое. И счетчик, и уничтожение по завершению процесса или потока. Можешь провести эксперимент - через Task Manager завершить какой-либо процесс с открытыми окнами и посмотреть, что становится с этими окнами. Удивишься :)
← →
jack128 © (2005-01-27 16:20) [53]Игорь Шевченко © (27.01.05 16:14) [52]
2. С окнами тоже самое. И счетчик, и уничтожение по завершению процесса или потока. Можешь провести эксперимент - через Task Manager завершить какой-либо процесс с открытыми окнами и посмотреть, что становится с этими окнами. Удивишься :)
Провел еще до того, как начал этот разговор.
Нажимаю кнопку1
procedure TForm1.Button1Click(Sender: TObject);
begin
h := FindWindow("TMainForm", nil);
Win32Check(h <> 0)
end;
Закрывают ту программу, которой это окно пренадлежит
Нажимаю кнопку2
procedure TForm1.Button2Click(Sender: TObject);
var
r: TRect;
begin
Win32Check(GetWindowRect(h, r)); // Ошибка - недопустимый дискриптор окна.
end;
Игорь Шевченко © (27.01.05 16:14) [52]
1. И причем здесь твое утверждение про файл, открытый другим процессом ?
Игорь, не надо передергивать.
Ото был ответ на вот этот вопрос
Игорь Шевченко © (27.01.05 15:54) [43]
> Уж точно не ядра. Окно может уничтожить кто угодно и когда
> угодно, а, например, процесс только ядро после того как будут закрыты все хендлы
Ой. Откуда информация ?
← →
Игорь Шевченко © (2005-01-27 16:21) [54]Одно из главных отличий окон (меню, хуков и прочих объектов Win32) от объектов, описанных у Рихтера, это то, что ими управляет не Object Manager из ntoskrnl, а Object Manager из Win32k.sys. Они, разумеется, не обладают всей функциональностью тех объектов, которые описаны у Рихтера (например, не имеют дескриптора защиты, их описатели не являются уникальными для каждого процесса, и т.д.), но тем не менее, управляет ими ядерная часть подсистемы Win32.
← →
nikkie © (2005-01-27 16:21) [55]окно - не объект ядра. это User-объект.
Рихтер, стр. 648:
Однако два User-объекта (окна и ловушки) принадлежат только создавшему их потоку. И вновь, если поток создает окно или устанавливает ловушку, а потом завершается, операционная система автоматически уничтожает окно или удаляет ловушку.
← →
Игорь Шевченко © (2005-01-27 16:22) [56]nikkie © (27.01.05 16:21) [55]
А user-объекты где находятся ? :)
← →
Игорь Шевченко © (2005-01-27 16:24) [57]Естественно, мой спор не с Рихтером, Рихтер пишет все правильно :)
← →
nikkie © (2005-01-27 16:26) [58]хотел написать еще описание объектов ядра из Рихтера, но Игорь уже это и так сделал:
>Они, разумеется, не обладают всей функциональностью тех объектов, которые описаны у Рихтера (например, не имеют дескриптора защиты, их описатели не являются уникальными для каждого процесса, и т.д.)
добавлю такую цитатку:
Объекты ядра принадлежат ядру, а не процессу. Иначе говоря, если Ваш процесс вызывает функцию, создающую объект ядра, а затем завершается, тобъект ядра может быть не разрушен.
← →
Digitman © (2005-01-27 16:27) [59]
> jack128 © (27.01.05 16:01) [45]
> окно - НЕ объект ядра
чушь ты несешь.
окно в Windows как было отродясь объектом ядра, так им и осталось по сей день.
и не важно при этом, кто/что и при каких условиях имеет возможность/право уничтожать сей объект.
← →
Digitman © (2005-01-27 16:34) [60]
> jack128
ну если под ядром подразумевать только "kernel"-обозавнные исп.модули, тот тут ты, конечно же, прав)
← →
nikkie © (2005-01-27 16:35) [61]>[56] Игорь Шевченко
А user-объекты где находятся ? :)
мне какая разница? я прикладной программист, использую API, как именно внутри эти объекты реализованы меня не волнует. есть общепринятое разделение по признакам, которые могут быть описаны в терминах API.
Рихтер описывает по крайней мере три признака объектов ядра:
- зависимость описателей объектов ядра от процесса
- объект ядра не принадлежит процессу, его создавшему, система ведет счетчик процессов его использующих
- возможность использования дескриптора защиты
ни один из этих признаков для окна не выполнен.
← →
jack128 © (2005-01-27 16:35) [62]jack128 © (27.01.05 16:11) [51]
Этот счетчик - один из элеменов данных общих для всех типов объектов ядра.(с) Рихтер
Это правда или ложь?
Digitman © (27.01.05 16:27) [59]
окно в Windows как было отродясь объектом ядра, так им и осталось по сей день.
и не важно при этом, кто/что и при каких условиях имеет возможность/право уничтожать сей объект.
Ваше определение объекта ядра?
← →
nikkie © (2005-01-27 16:44) [63]Рихтер, стр.31
Кроме объектов ядра Ваша программа может использовать объекты других типов - меню, окна, курсоры мыши, кисти и шрифты. Они относятся к объектам User или GDI. Новичок в программировании для Windows может запутаться, пытаясь отличить объекты User или GDI от объектов ядра.
:)))
← →
Nous Mellon © (2005-01-27 16:45) [64]Вот они наши новички Дижитмэн и ИШ. :)
← →
Digitman © (2005-01-27 16:45) [65]
> jack128 © (27.01.05 16:35) [62]
как это ни странно, но ОЯ с т.з. прикл.задачи - это объект, созданный успешным вызовом одной из WinAPI-ф-ций.
← →
Digitman © (2005-01-27 16:48) [66]
> nikkie © (27.01.05 16:44) [63]
> User или GDI
а кому нужно такое "ядро" без USER и GDI ?
← →
jack128 © (2005-01-27 16:51) [67]Digitman © (27.01.05 16:45) [65]
как это ни странно, но ОЯ с т.з. прикл.задачи - это объект, созданный успешным вызовом одной из WinAPI-ф-ций.
хм. Ну не знаю. Я больше ориентируюсь на определение Рихтера. Прежде всего на
объект ядра не принадлежит процессу, его создавшему, система ведет счетчик процессов его использующих
и возможность использования дескриптора защиты
← →
Kerk © (2005-01-27 16:53) [68]Digitman © (27.01.05 16:48) [66]
а кому нужно такое "ядро" без USER и GDI ?
это другой вопрос ;)
← →
nikkie © (2005-01-27 16:53) [69]>[66] Digitman
>а кому нужно такое "ядро" без USER и GDI ?
например, серверным приложениям.
← →
Digitman © (2005-01-27 16:55) [70]
> nikkie
на Рихтера можно ссылаться сколь угодно, но и без него понятно, что есть глобальные (независимые от контекстов процессов) объекты "ядра", а есть контекстно-зависимые (зависимые от контекстов конкр.процессов) объекты того же самого "ядра".
← →
esu © (2005-01-27 16:58) [71]
> Digitman © (27.01.05 16:45) [65]
Ну если так то объект :)
Ладно, определения мы не будем оспаривать. Я во второй раз почему-то сориентировался на взоможность использования SECURITY_ATTRIBUTES ну да ладно :)
← →
default © (2005-01-27 16:58) [72]в [61] всё верно сказано
можно накрайняк открыть SDK:)
← →
Игорь Шевченко © (2005-01-27 17:01) [73]Прежде чем спорить о том, что является объектом ядра или не является им, неплохо бы ввести определение ядра. Если под ядром имеется в виду диспетчер объектов, то тогда к объектам ядра относится порядка 20-40 типов объектов, которыми он и управляет . Если под ядром имеется в виду еще и те части подсистем, которые работают в режиме ядра, тогда количество "объектов ядра" несколько увеличивается.
← →
Digitman © (2005-01-27 17:02) [74]
> nikkie © (27.01.05 16:53) [69]
> например, серверным приложениям.
ну эт ты загнул.
"серверное" приложение "серверному" приложению - рознь.
вот куда деваться серв.приложению, если ему позарез нужно выполнить PostThreadMessage(), в то время как nikkie ему сказал, мол, не нужен тебе USER32 ?
← →
nikkie © (2005-01-27 17:03) [75]>на Рихтера можно ссылаться сколь угодно, но и без него понятно, что...
а ссылки на MSDN и авторитет Microsoft тоже не принимаются?
может тогда и обсуждать ничего не надо, если все по понятиям решается?
Platform SDK: Interprocess Communications
Object Categories
The system provides three categories of objects: user, graphics device interface (GDI), and kernel. The system uses user objects to support window management, GDI objects to support graphics, and kernel objects to support memory management, process execution, and interprocess communications (IPC). For information about creating and using a specific object, refer to the associated overview.
User object Overview
Accelerator table Keyboard Accelerators
Caret Carets
Cursor Cursors
DDE conversation Dynamic Data Exchange Management Library
Desktop Window Stations and Desktops
Hook Hooks
Icon Icons
Menu Menus
Window Windows
Window position Windows
Window station Window Stations and Desktops
GDI object Overview
Bitmap Bitmaps
Brush Brushes
DC Device Contexts
Enhanced metafile Metafiles
Enhanced-metafile DC Metafiles
Font Fonts and Text
Memory DC Device Contexts
Metafile Metafiles
Metafile DC Metafiles
Palette Colors
Pen and extended pen Pens
Region Regions
Kernel object Overview
Access token Access Control
Change notification File I/O
Communications device Communications
Console input Consoles and Character-Mode Support
Console screen buffer Consoles and Character-Mode Support
Event Synchronization
Event log Event Logging
File File I/O
File mapping File Mapping
Find file File I/O
Heap Memory Management
Job Job Objects
Mailslot Mailslots
Module Dynamic-Link Libraries
Mutex Synchronization
Pipe Pipes
Process Processes and Threads
Semaphore Synchronization
Socket Windows Sockets 2
Thread Processes and Threads
Timer Synchronization
Update resource Resources
← →
Игорь Шевченко © (2005-01-27 17:04) [76]nikkie © (27.01.05 16:35) [61]
> мне какая разница? я прикладной программист, использую API,
> как именно внутри эти объекты реализованы меня не волнует.
Тогда зачем тебе вообще знать, что такое объекты ядра ? :)
> Рихтер описывает по крайней мере три признака объектов ядра:
> - зависимость описателей объектов ядра от процесса
> - объект ядра не принадлежит процессу, его создавшему, система
> ведет счетчик процессов его использующих
> - возможность использования дескриптора защиты
Первые два признака действительны также для хуков и курсоров :)
С уважением,
← →
default © (2005-01-27 17:06) [77]Игорь Шевченко © (27.01.05 17:01) [73]
нам следовало бы разуметь под объектами ядра то что написано в официальной документации(SDK) в разделе kernel objects
там есть их список, есть их отличительные черты
← →
Игорь Шевченко © (2005-01-27 17:07) [78]nikkie © (27.01.05 17:03) [75]
> Kernel object Overview
Что-то они там намешали...Модули и DLL не имеют счетчика ссылок, управляемого ядром и дескрипторов защиты. А также принадлежат процессу, а не системе. Heaps тоже.
С уважением,
← →
esu © (2005-01-27 17:11) [79]
> Object Categories
> The system provides three categories of objects: user, graphics
> device interface (GDI), and kernel. The system uses user
> objects to support window management, GDI objects to support
> graphics, and kernel objects to support memory management,
> process execution, and interprocess communications (IPC).
>
Терминология. Кто-то подразумевает объектами ядра все объекты, а кто-то system->kernel :)
В любом случае у нас используется слово Ядро а оно может подразумевать и как все системные объекты так и только одну из категорий.
← →
Digitman © (2005-01-27 17:14) [80]
> nikkie © (27.01.05 17:03) [75]
тогда выскажи. пож., свое соображение, почему в приведенной цитате IPC-объекты относятся к kernel objects, в то время как некие ф-ции доступа/управления IPC-объектов отнесены к user32, та же PostThreadMessage(), например .. ведь подобного рода очереди и их диспетчеризацию, по идее, должно "вести" именно ЯДРО, а не "нахлобучки" к нему типа USER ?
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2005.02.20;
Скачать: CL | DM;
Память: 0.64 MB
Время: 0.074 c