C3、内核对象

一、引用计数

二、安全性:客户端一般传递NULL,为默认的安全属性。

n         如果在WIN98上开发、运行良好,而在WIN2000出错,可以把安全属性改为:KEY_QUERY_VALUE

n         如何区分内核对象还是GDI或用户对象?区别在于创建函数是否有安全属性。

三、跨进程边界共享内核对象(方法)

a)         (对象句柄的)继承性:

n         创建子进程时,bInheritHnadles=1,将继承父进程中可继承的内核对象(创建时使用了可继承标志)。

n         只有在子进程创建之前的可继承对象才能被继承。

n         传递方法:

1.命令行参数,用sscanf分析

2.进程间通信,WaitForInputIdle

3.环境变量,GetEnvironmentVariable

n         改变句柄标志:SetHandleInformation, GetHandleInformation

b)        命名对象(部分),eg

n         CreateMutex, CreateEvent, CreateSemaphore, CreateWaitableTimer, CreateFileMapping, CreateJobObject。所有这些函数有一个共同的最后参数pszName,如果=NULL,则为匿名内核对象(可通过可继承性或DuplicateHandle共享);如果=0结尾的字符串(长<MAX_PATH)则为命名对象(但是,可以因为名称冲突而创建失败,GetLastError返回ERROR_INVALID_HANDLE)。

n         不必为可继承句柄。

n         第二个进程可以用相同的名称创建对象(实际上是对原对象的引用,可以用GetLastError()== ERROR_ALREADY_EXISTS判别)

n         显式共享的方法(使用Open*函数):OpenMutexOpenEvent, OpenSemaphore, OpenWaitableTimer, OpenFileMapping, OpenJobObject。其最后的参数pszName必须指明内核对象的名称。如果不存在,GetLastError返回ERROR_FILE_NOT_FOUND。如果有访问权,则句柄表跟新。如果bInheritHandle=TRUE,则可继承。

c)        终端服务器的名字空间

n         显式进入全局名称空间方法,用“Global/”,eg

HANDLE h = CreateEvent(NULL, FALSE, FALSE, “Global//MyName”);

n         显式进入会话的名字空间方法,用“Local/”,eg

HANDLE h = CreateEvent(NULL, FALSE, FALSE, “Local//MyName”);

n         Global, Local, SessionWindows保留关键字,区分大小写。

d)        复制对象句柄(DuplicateHandle

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值