内核对象
发布日期:2021-06-30 12:12:23 浏览次数:2 分类:技术文章

本文共 1024 字,大约阅读时间需要 3 分钟。

1.内核对象用句柄来标识

   每个内核对象其实就是一块内存块,这个内存块位于操作系统的内核地址空间,因此应用程序不能直接操作内核对象,需要用系统给定的函数来操作,不同的内核对象由不同的函数窗口。

2.内核对象有哪些

Ø  令牌对象token

Ø  事件对象Event

Ø  文件对象File

Ø  文件映射对象Mapping_File

Ø  线程对象Thread

Ø  时钟对象Timer

Ø  线程池对象ThreadPool

Ø  I/o完成端口对象,Completion port

Ø  工作对象Job

Ø  邮槽对象mailslot

Ø  互斥对象Mutex

Ø  管道对象pipe

Ø  进程对象process

Ø  信号灯对象semaphore

3.进程内核对象列表

由上图可以分析出不同进程之间的句柄不可以互相引用,引用会出问题,一般进程句柄相当于进程句柄对象列表中的索引位置,所以不同进程之间不可以用。

4.创建内核对象

   需要用到相关的系统API,举例

HANDLE CreateThread(   PSECURITY_ATTRIBUTES psa,   size_t dwStackSize,   LPTHREAD_START_ROUTINE pfnStartAddress,   PVOID pvParam,   DWORD dwCreationFlags,   PDWORD pdwThreadId);

5.关闭内核对象

BOOL CloseHandle(HANDLE hObject);
参数:

hObject:代表一个已打开的对象handle

返回值:

TRUE::代表成功

FALSE:代表失败,可以用GetLastError函数获取错误码

 

   内核对象使用引用计数技术,可以增加和减少引用计数来确定内核对象有效和无效

6.设置和获取内核对象的信息

BOOL SetHandleInformation(   HANDLE hObject,   DWORD dwMask,   DWORD dwFlags);
BOOL WINAPI GetHandleInformation(  _In_ HANDLE hObject,  _Out_ LPDWORD lpdwFlags);
7.命名内核对象

  创建内核对象的函数中,如果有pszName参数,说明这个内核对象可以被命名,可以机床及命名内核对象。命名内核对象可以在不同进程中使用。

  匿名内核对象不能在进程间共享。

转载地址:https://jadeshu.blog.csdn.net/article/details/71837384 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:static
下一篇:总结《二》MFC中WinMain和CALLBACK

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月04日 04时42分04秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章