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 |