窗口是内核对象吗?

时间:2021-11-04 17:37:31
我创建一个窗口,获得一个hWnd句柄。

这个窗口,是不是内核对象?应该是吧。

23 个解决方案

#1


我认为窗口不是内核对象

#2


不是,,窗口是用户对象

#3


是的,内核对象

#4


不是,内核对象的创建函数,必须有一个security参数,而窗口的没有

#5


想看内核对象,请用
Process Explorer
http://technet.microsoft.com/zh-cn/sysinternals/bb896653

#6


原来窗口既不是内核对象,也不是用户对象,而是GDI对象。

但是,GDI对象也是操作系统在维护啊,为什么不能叫做内核对象?

#7


操作系统怎样维护GDI对象?维护这个词过于宽泛。

#8


引用 6 楼 xingguyuwang 的回复:
原来窗口既不是内核对象,也不是用户对象,而是GDI对象。

但是,GDI对象也是操作系统在维护啊,为什么不能叫做内核对象?


YES。

这个看Windows核心编程,就很清晰了。

#9


那GDI和内核,是什么关系?


引用 7 楼 maoloverme1 的回复:
操作系统怎样维护GDI对象?维护这个词过于宽泛。

#10


有人说内核是ring0权限下的代码,
有人说内核是kernel32.dll中的代码,
有人说内核是.sys文件中的代码。
有人说内核是……

参考 那英《雾里看花》

#11


内核对象在整个系统内可以访问,用户对象只在本进程内可以访问。 GDI句柄不是内核对象。

#12


但你还是没有说出,GDI对象本身的特点是什么?它为什么又不是用户对象?

引用 11 楼 mujiok2003 的回复:
内核对象在整个系统内可以访问,用户对象只在本进程内可以访问。 GDI句柄不是内核对象。

#13


引用 12 楼 xingguyuwang 的回复:
但你还是没有说出,GDI对象本身的特点是什么?它为什么又不是用户对象?

引用 11 楼 mujiok2003 的回复:内核对象在整个系统内可以访问,用户对象只在本进程内可以访问。 GDI句柄不是内核对象。


我认为就分两种:用户对象和内涵对象,非此即彼。这个没有标准吧。

#14


说是一物即不中。
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》

#15


这本书我粗略看过,好像没有提及什么是GDI对象啊。

引用 14 楼 zhao4zhong1 的回复:
说是一物即不中。
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》

#16


查MSDN是Windows程序员必须掌握的技能之一。
mk:@MSITStore:C:\MSDN98\98VS\2052\vccore.chm::/html/_core_graphic_objects.htm
Graphic Objects
Home |  Overview |  How Do I |  Tutorial

Windows provides a variety of drawing tools to use in device contexts. It provides pens to draw lines, brushes to fill interiors, and fonts to draw text. MFC provides graphic-object classes equivalent to the drawing tools in Windows. The table below shows the available classes and the equivalent Windows graphics device interface (GDI) handle types.

The general literature on programming for the Windows GDI applies to the Microsoft Foundation classes that encapsulate GDI graphic objects. This article explains the use of these graphic-object classes:

Classes for Windows GDI Objects

Class Windows handle type 
CPen HPEN 
CBrush HBRUSH 
CFont HFONT 
CBitmap HBITMAP 
CPalette HPALETTE 
CRgn HRGN 


Each graphic-object class in the class library has a constructor that allows you to create graphic objects of that class, which you must then initialize with the appropriate create function, such as CreatePen.

Each graphic-object class in the class library has a cast operator that will cast an MFC object to the associated Windows handle. The resulting handle is valid until the associated object detaches it. Use the object’s Detach member function to detach the handle. 

The following code casts a CPen object to a Windows handle:

CPen myPen;
myPen.CreateSolidPen( PS_COSMETIC, 1, RGB(255,255,0) );
HPEN hMyPen = (HPEN) myPen;

Process of Creating a Graphic Object in a Device Context
The following four steps are typically used when you need a graphic object for a drawing operation: 

Define a graphic object on the stack frame. Initialize the object with the type-specific create function, such as CreatePen. Alternatively, initialize the object in the constructor. See the discussion of one-stage and two-stage creation, which provides example code.


Select the object into the current device context, saving the old graphic object that was selected before.


When done with the current graphic object, select the old graphic object back into the device context to restore its state.


Allow the frame-allocated graphic object to be deleted automatically when the scope is exited. 
Note   If you will be using a graphic object repeatedly, you can allocate it once and select it into a device context each time it is needed. Be sure to delete such an object when you no longer need it.

What do you want to know more about?
One-stage and two-stage construction of graphic objects


Example of constructing a pen in one and two stages


Example of selecting a pen into a device context


Device contexts 

#17


mk:@MSITStore:C:\MSDN98\98VS\2052\vccore.chm::/html/_core_window_object_topics.htm
Window Object Topics
Home |  Overview |  How Do I |  Tutorial

A C++ window object (whether for a frame window or some other kind of window) is distinct from its corresponding Windows window (the HWND), but the two are tightly linked. A good understanding of the relationship between a C++ window object and an HWND is crucial for effective programming with MFC.

The general literature on programming for Windows is a good resource for learning how to use the CWnd member functions, which typically encapsulate the HWND APIs. See Books That Help You Learn MFC.

Functions for Operating On a CWnd
CWnd and its derived classes provide constructors, destructors, and member functions to initialize the object, create the underlying Windows structures, and access the encapsulated HWND. CWnd also provides member functions that encapsulate Windows APIs for sending messages, accessing the window’s state, converting coordinates, updating, scrolling, accessing the Clipboard, and many other tasks. Most Windows window-management APIs that take an HWND argument are encapsulated as member functions of CWnd. The names of the functions and their parameters are preserved in the CWnd member function. For details about the Windows APIs encapsulated by CWnd, see class CWnd.

CWnd and Windows Messages
One of the primary purposes of CWnd is to provide an interface for handling Windows messages, such as WM_PAINT or WM_MOUSEMOVE. Many of the member functions of CWnd are handlers for standard messages—those beginning with the identifier afx_msg and the prefix “On,” such as OnPaint and OnMouseMove. Message Handling and Mapping Topics covers messages and message handling in detail. The information there applies equally to the framework’s windows and those that you create yourself for special purposes. 

What do you want to know more about?
The relationship between a C++ window object and an HWND


Working with windows of your own


Window classes derived from class CWnd


Registering window “classes” (as in Win32 SDK programming)


General window creation sequence


Destroying window objects


Device contexts: objects that make Windows drawing device independent


Graphic objects: pens, brushes, fonts, bitmaps, palettes, regions


One-stage and two-stage construction of objects such as pens


Selecting a graphic object into a device context 

#18


该回复于2013-03-07 20:16:44被管理员删除

#19


看得真是云里雾里,有答案了没有?

#20


引用 10 楼 zhao4zhong1 的回复:
有人说内核是ring0权限下的代码,
有人说内核是kernel32.dll中的代码,
有人说内核是.sys文件中的代码。
有人说内核是……

参考 那英《雾里看花》


我靠,有这本书?fak 你

#21


总有人拿这个来考别人,闲得无聊啊

喜欢咬文嚼字,看核心编程吧,里面有的

#22


书名号不能用来括住歌名吗?我小学语文不及格啊。 窗口是内核对象吗?

#23


引用 楼主 xingguyuwang 的回复:
我创建一个窗口,获得一个hWnd句柄。

这个窗口,是不是内核对象?应该是吧。

       一些简单的问题回答起来并不容易。内核对象这个概念首先要界定(或者说楼主的本意实际是什么)。内核是指操作系统内核吗?如果是操作系统内核,那么可以明确的是,Windows的内核(不讨论已经完全过时的非NT内核,如Windows 9x)是不包括图形对象的,尽管处于效率考虑,Windows负责图形处理的部分有在内核空间运行的驱动组件)。
       Windows操作系统正如它名称暗示,其基本特征是图形界面。我对微软内部不熟悉,但我的猜想中,微软内部应该有不同的开发小组,对Windows内核开发小组而言,关心的问题应该很多,一个内核同时支持Windows客户版本和服务器版本,服务器版本应用场合重点就不在图形界面上。从MinWin( http://en.wikipedia.org/wiki/MinWin)概念的提出,侧面说明微软的Windows内核开发小组的独立性意识也在加强。
       另外,前面赵老师给出工具也不是查看内核对象的,内核对象查看工具是这个: http://technet.microsoft.com/en-us/sysinternals/bb896657

#1


我认为窗口不是内核对象

#2


不是,,窗口是用户对象

#3


是的,内核对象

#4


不是,内核对象的创建函数,必须有一个security参数,而窗口的没有

#5


想看内核对象,请用
Process Explorer
http://technet.microsoft.com/zh-cn/sysinternals/bb896653

#6


原来窗口既不是内核对象,也不是用户对象,而是GDI对象。

但是,GDI对象也是操作系统在维护啊,为什么不能叫做内核对象?

#7


操作系统怎样维护GDI对象?维护这个词过于宽泛。

#8


引用 6 楼 xingguyuwang 的回复:
原来窗口既不是内核对象,也不是用户对象,而是GDI对象。

但是,GDI对象也是操作系统在维护啊,为什么不能叫做内核对象?


YES。

这个看Windows核心编程,就很清晰了。

#9


那GDI和内核,是什么关系?


引用 7 楼 maoloverme1 的回复:
操作系统怎样维护GDI对象?维护这个词过于宽泛。

#10


有人说内核是ring0权限下的代码,
有人说内核是kernel32.dll中的代码,
有人说内核是.sys文件中的代码。
有人说内核是……

参考 那英《雾里看花》

#11


内核对象在整个系统内可以访问,用户对象只在本进程内可以访问。 GDI句柄不是内核对象。

#12


但你还是没有说出,GDI对象本身的特点是什么?它为什么又不是用户对象?

引用 11 楼 mujiok2003 的回复:
内核对象在整个系统内可以访问,用户对象只在本进程内可以访问。 GDI句柄不是内核对象。

#13


引用 12 楼 xingguyuwang 的回复:
但你还是没有说出,GDI对象本身的特点是什么?它为什么又不是用户对象?

引用 11 楼 mujiok2003 的回复:内核对象在整个系统内可以访问,用户对象只在本进程内可以访问。 GDI句柄不是内核对象。


我认为就分两种:用户对象和内涵对象,非此即彼。这个没有标准吧。

#14


说是一物即不中。
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》

#15


这本书我粗略看过,好像没有提及什么是GDI对象啊。

引用 14 楼 zhao4zhong1 的回复:
说是一物即不中。
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》

#16


查MSDN是Windows程序员必须掌握的技能之一。
mk:@MSITStore:C:\MSDN98\98VS\2052\vccore.chm::/html/_core_graphic_objects.htm
Graphic Objects
Home |  Overview |  How Do I |  Tutorial

Windows provides a variety of drawing tools to use in device contexts. It provides pens to draw lines, brushes to fill interiors, and fonts to draw text. MFC provides graphic-object classes equivalent to the drawing tools in Windows. The table below shows the available classes and the equivalent Windows graphics device interface (GDI) handle types.

The general literature on programming for the Windows GDI applies to the Microsoft Foundation classes that encapsulate GDI graphic objects. This article explains the use of these graphic-object classes:

Classes for Windows GDI Objects

Class Windows handle type 
CPen HPEN 
CBrush HBRUSH 
CFont HFONT 
CBitmap HBITMAP 
CPalette HPALETTE 
CRgn HRGN 


Each graphic-object class in the class library has a constructor that allows you to create graphic objects of that class, which you must then initialize with the appropriate create function, such as CreatePen.

Each graphic-object class in the class library has a cast operator that will cast an MFC object to the associated Windows handle. The resulting handle is valid until the associated object detaches it. Use the object’s Detach member function to detach the handle. 

The following code casts a CPen object to a Windows handle:

CPen myPen;
myPen.CreateSolidPen( PS_COSMETIC, 1, RGB(255,255,0) );
HPEN hMyPen = (HPEN) myPen;

Process of Creating a Graphic Object in a Device Context
The following four steps are typically used when you need a graphic object for a drawing operation: 

Define a graphic object on the stack frame. Initialize the object with the type-specific create function, such as CreatePen. Alternatively, initialize the object in the constructor. See the discussion of one-stage and two-stage creation, which provides example code.


Select the object into the current device context, saving the old graphic object that was selected before.


When done with the current graphic object, select the old graphic object back into the device context to restore its state.


Allow the frame-allocated graphic object to be deleted automatically when the scope is exited. 
Note   If you will be using a graphic object repeatedly, you can allocate it once and select it into a device context each time it is needed. Be sure to delete such an object when you no longer need it.

What do you want to know more about?
One-stage and two-stage construction of graphic objects


Example of constructing a pen in one and two stages


Example of selecting a pen into a device context


Device contexts 

#17


mk:@MSITStore:C:\MSDN98\98VS\2052\vccore.chm::/html/_core_window_object_topics.htm
Window Object Topics
Home |  Overview |  How Do I |  Tutorial

A C++ window object (whether for a frame window or some other kind of window) is distinct from its corresponding Windows window (the HWND), but the two are tightly linked. A good understanding of the relationship between a C++ window object and an HWND is crucial for effective programming with MFC.

The general literature on programming for Windows is a good resource for learning how to use the CWnd member functions, which typically encapsulate the HWND APIs. See Books That Help You Learn MFC.

Functions for Operating On a CWnd
CWnd and its derived classes provide constructors, destructors, and member functions to initialize the object, create the underlying Windows structures, and access the encapsulated HWND. CWnd also provides member functions that encapsulate Windows APIs for sending messages, accessing the window’s state, converting coordinates, updating, scrolling, accessing the Clipboard, and many other tasks. Most Windows window-management APIs that take an HWND argument are encapsulated as member functions of CWnd. The names of the functions and their parameters are preserved in the CWnd member function. For details about the Windows APIs encapsulated by CWnd, see class CWnd.

CWnd and Windows Messages
One of the primary purposes of CWnd is to provide an interface for handling Windows messages, such as WM_PAINT or WM_MOUSEMOVE. Many of the member functions of CWnd are handlers for standard messages—those beginning with the identifier afx_msg and the prefix “On,” such as OnPaint and OnMouseMove. Message Handling and Mapping Topics covers messages and message handling in detail. The information there applies equally to the framework’s windows and those that you create yourself for special purposes. 

What do you want to know more about?
The relationship between a C++ window object and an HWND


Working with windows of your own


Window classes derived from class CWnd


Registering window “classes” (as in Win32 SDK programming)


General window creation sequence


Destroying window objects


Device contexts: objects that make Windows drawing device independent


Graphic objects: pens, brushes, fonts, bitmaps, palettes, regions


One-stage and two-stage construction of objects such as pens


Selecting a graphic object into a device context 

#18


该回复于2013-03-07 20:16:44被管理员删除

#19


看得真是云里雾里,有答案了没有?

#20


引用 10 楼 zhao4zhong1 的回复:
有人说内核是ring0权限下的代码,
有人说内核是kernel32.dll中的代码,
有人说内核是.sys文件中的代码。
有人说内核是……

参考 那英《雾里看花》


我靠,有这本书?fak 你

#21


总有人拿这个来考别人,闲得无聊啊

喜欢咬文嚼字,看核心编程吧,里面有的

#22


书名号不能用来括住歌名吗?我小学语文不及格啊。 窗口是内核对象吗?

#23


引用 楼主 xingguyuwang 的回复:
我创建一个窗口,获得一个hWnd句柄。

这个窗口,是不是内核对象?应该是吧。

       一些简单的问题回答起来并不容易。内核对象这个概念首先要界定(或者说楼主的本意实际是什么)。内核是指操作系统内核吗?如果是操作系统内核,那么可以明确的是,Windows的内核(不讨论已经完全过时的非NT内核,如Windows 9x)是不包括图形对象的,尽管处于效率考虑,Windows负责图形处理的部分有在内核空间运行的驱动组件)。
       Windows操作系统正如它名称暗示,其基本特征是图形界面。我对微软内部不熟悉,但我的猜想中,微软内部应该有不同的开发小组,对Windows内核开发小组而言,关心的问题应该很多,一个内核同时支持Windows客户版本和服务器版本,服务器版本应用场合重点就不在图形界面上。从MinWin( http://en.wikipedia.org/wiki/MinWin)概念的提出,侧面说明微软的Windows内核开发小组的独立性意识也在加强。
       另外,前面赵老师给出工具也不是查看内核对象的,内核对象查看工具是这个: http://technet.microsoft.com/en-us/sysinternals/bb896657