Windows內(nèi)核對(duì)象、用戶對(duì)象、GDI對(duì)象
內(nèi)核對(duì)象
介紹
內(nèi)核對(duì)象是系統(tǒng)地址空間中的一個(gè)內(nèi)存塊,由系統(tǒng)創(chuàng)建并維護(hù)。內(nèi)核對(duì)象為內(nèi)核所擁有,而不為進(jìn)程所擁有,所以不同進(jìn)程可以訪問同一個(gè)內(nèi)核對(duì)象。
內(nèi)核對(duì)象的創(chuàng)建函數(shù)匯總必須有安全描述符(PSECURITY_ATTRIBUTES),安全描述符描述了誰創(chuàng)建該內(nèi)核對(duì)象,誰能夠訪問,誰無權(quán)訪問等信息。
結(jié)構(gòu)
對(duì)象頭,對(duì)象體(OBJECT_HEADER+OBJECT)。所有類型的對(duì)象頭結(jié)構(gòu)都是相同的,而結(jié)構(gòu)體部分卻各不相同的。
指向?qū)ο蟮闹羔樦赶驅(qū)ο篌wOBJECT部分,若要訪問OBJECT_HEADER,需要減去0X18、
OBJECT_HEADER的結(jié)構(gòu)如下:
typedef struct _OBJECT_HEADER
{
DWORD PointerCount; // 指針引用的數(shù)目
DWORD HandleCount; // 打開句柄的數(shù)目
POBJECT_TYPE ObjectType; //指向類型對(duì)象的指針
BYTE NameOffset; //對(duì)象名的偏移
BYTE HandleDBOffset; // HANDLE DB的偏移
BYTE QuotaChargesOffset; //QUOTA CHARGES的偏移
BYTE ObjectFlags; // 對(duì)象標(biāo)志
union
{ // 對(duì)象標(biāo)志中OB_FLAG_CREATE_INFO ? ObjectCreateInfo : QuotaBlock
PQUOTA_BLOCK QuotaBlock;
POBJECT_CREATE_INFO ObjectCreateInfo;
};
PSECURITY_DESCRIPTOR SecurityDescriptor;
}OBJECT_HEADER, *POBJECT_HEADER;
| 核心對(duì)象 | 產(chǎn)生方法 |
|---|---|
| 事件對(duì)象 | HANDLE CreateEvent(); |
| 文件對(duì)象 | HANDLE CreateFile(); |
| 文件映射對(duì)象 | HANDLE CreateFileMapping(); |
| I/O完成對(duì)象 | HANDLE CreateloCompletionPort(); |
| 作業(yè)對(duì)象 | HANDLE CreateJobObject(); |
| 信箱對(duì)象 | HANDLE CreateMailslot(); |
| 互斥對(duì)象 | HANDLE CreateMutex(); |
| 管道對(duì)象 | BOOL CreatePipe(); |
| 進(jìn)程對(duì)象 | BOOL CreateProcess(); |
| 信號(hào)量對(duì)象 | HANDLE Create Semaphore(); |
| 線程對(duì)象 | HANDLE CreateThread(); |
| 等待及時(shí)將其對(duì)象 | HANDLE CreateWaitableTimer(); |
用戶對(duì)象
用戶創(chuàng)建的對(duì)象,用戶具有使用權(quán)。
| 用戶對(duì)象 | 產(chǎn)生方法 | 銷毀方法 |
|---|---|---|
| 快捷鍵(HACCEL) | CreateAcceleratorTable | DestroyAcceleratorTable |
| 插入標(biāo)記(Caret) | CreateCaret | DestoryCaret |
| 光標(biāo)(HCURSOR) | CreateCursor,LoadCursor,LoadImage | DestroyCursor |
| 鉤子(HHOOK) | SetWindowsHookEx | UnhookWIndowsHookEx |
| 圖標(biāo)(HICON) | CreateIconIndirect,LoadIcon,LoadImage | DestroyIcon |
| 菜單(HMENU) | CreateMenu,CreatePopupMenu,<br />LoadMenu,LoadMenuIndirect | DeleteMenu |
| 窗體(HWND) | CreateWindow,CreateWindowEx,<br />CreateDialogParam,CreateMDIWindow | DestroyWindow |
| 延期窗口位置結(jié)構(gòu)句柄(HDWP) | BeginDeferWindowPos | EndDeferWindowPos |
GDI對(duì)象
圖形對(duì)象,用戶創(chuàng)建,用戶具有使用權(quán)。
| GDI對(duì)象 | 產(chǎn)生方法 | 銷毀方法 |
|---|---|---|
| 位圖(HBITMAP) | CreateBitmap,CreateBitmapIndirect,<br />CreateCompatibleBitmap,CreateDIBitmap,<br />CreateDIBSection,CreateDiscardableBitmap | DeleteObject |
| 畫刷(HBRUSH) | CreateBrushIndirect,CreateDIBPatternBrush,<br />CreateDIBPatternBrushPt,CreateHatchBrush,<br />CreatePatternBrush,CreateSolidBrush | DeleteObject |
| 設(shè)備上下文(HDC) | CreateDC | DeleteDC,ReleaseDC |
| 字體(HFONT) | CreateFont,CreateFontIndirect | DeleteObject |
| 內(nèi)存DC(HDC) | CreateCompatibleDC | DeleteDC |
| 調(diào)色板(HPALETTE) | CreatePalette | DeleteObject |
| 畫筆(HPEN) | CreatePen,CreatePenIndirect | DeleteObject |
| 區(qū)域(HRGN) | CombineRgn,CreateEllipticRgn,<br />CreateEllipticRgnIndirect,CreatePolygonRgn,<br />CreatePolyPolygonRgn,CreateRectRgn,<br />CreateRectRgnIndirect,CreateRoundRectRgn | DeleteObject |