Windows内核对象、用户对象、GDI对象
内核对象
介绍
内核对象是系统地址空间中的一个内存块,由系统创建并维护。内核对象为内核所拥有,而不为进程所拥有,所以不同进程可以访问同一个内核对象。
内核对象的创建函数汇总必须有安全描述符(PSECURITY_ATTRIBUTES),安全描述符描述了谁创建该内核对象,谁能够访问,谁无权访问等信息。
结构
对象头,对象体(OBJECT_HEADER+OBJECT)。所有类型的对象头结构都是相同的,而结构体部分却各不相同的。
指向对象的指针指向对象体OBJECT部分,若要访问OBJECT_HEADER,需要减去0X18、
OBJECT_HEADER的结构如下:
typedef struct _OBJECT_HEADER
{
DWORD PointerCount; // 指针引用的数目
DWORD HandleCount; // 打开句柄的数目
POBJECT_TYPE ObjectType; //指向类型对象的指针
BYTE NameOffset; //对象名的偏移
BYTE HandleDBOffset; // HANDLE DB的偏移
BYTE QuotaChargesOffset; //QUOTA CHARGES的偏移
BYTE ObjectFlags; // 对象标志
union
{ // 对象标志中OB_FLAG_CREATE_INFO ? ObjectCreateInfo : QuotaBlock
PQUOTA_BLOCK QuotaBlock;
POBJECT_CREATE_INFO ObjectCreateInfo;
};
PSECURITY_DESCRIPTOR SecurityDescriptor;
}OBJECT_HEADER, *POBJECT_HEADER;
核心对象 | 产生方法 |
---|---|
事件对象 | HANDLE CreateEvent(); |
文件对象 | HANDLE CreateFile(); |
文件映射对象 | HANDLE CreateFileMapping(); |
I/O完成对象 | HANDLE CreateloCompletionPort(); |
作业对象 | HANDLE CreateJobObject(); |
信箱对象 | HANDLE CreateMailslot(); |
互斥对象 | HANDLE CreateMutex(); |
管道对象 | BOOL CreatePipe(); |
进程对象 | BOOL CreateProcess(); |
信号量对象 | HANDLE Create Semaphore(); |
线程对象 | HANDLE CreateThread(); |
等待及时将其对象 | HANDLE CreateWaitableTimer(); |
用户对象
用户创建的对象,用户具有使用权。
用户对象 | 产生方法 | 销毁方法 |
---|---|---|
快捷键(HACCEL) | CreateAcceleratorTable | DestroyAcceleratorTable |
插入标记(Caret) | CreateCaret | DestoryCaret |
光标(HCURSOR) | CreateCursor,LoadCursor,LoadImage | DestroyCursor |
钩子(HHOOK) | SetWindowsHookEx | UnhookWIndowsHookEx |
图标(HICON) | CreateIconIndirect,LoadIcon,LoadImage | DestroyIcon |
菜单(HMENU) | CreateMenu,CreatePopupMenu,<br />LoadMenu,LoadMenuIndirect | DeleteMenu |
窗体(HWND) | CreateWindow,CreateWindowEx,<br />CreateDialogParam,CreateMDIWindow | DestroyWindow |
延期窗口位置结构句柄(HDWP) | BeginDeferWindowPos | EndDeferWindowPos |
GDI对象
图形对象,用户创建,用户具有使用权。
GDI对象 | 产生方法 | 销毁方法 |
---|---|---|
位图(HBITMAP) | CreateBitmap,CreateBitmapIndirect,<br />CreateCompatibleBitmap,CreateDIBitmap,<br />CreateDIBSection,CreateDiscardableBitmap | DeleteObject |
画刷(HBRUSH) | CreateBrushIndirect,CreateDIBPatternBrush,<br />CreateDIBPatternBrushPt,CreateHatchBrush,<br />CreatePatternBrush,CreateSolidBrush | DeleteObject |
设备上下文(HDC) | CreateDC | DeleteDC,ReleaseDC |
字体(HFONT) | CreateFont,CreateFontIndirect | DeleteObject |
内存DC(HDC) | CreateCompatibleDC | DeleteDC |
调色板(HPALETTE) | CreatePalette | DeleteObject |
画笔(HPEN) | CreatePen,CreatePenIndirect | DeleteObject |
区域(HRGN) | CombineRgn,CreateEllipticRgn,<br />CreateEllipticRgnIndirect,CreatePolygonRgn,<br />CreatePolyPolygonRgn,CreateRectRgn,<br />CreateRectRgnIndirect,CreateRoundRectRgn | DeleteObject |