内核对象
别人的
内核对象是内核分配的一个内存块,只能由改内核访问;
内核对象由内核所拥有,进程创建了一个内核对象,然后进程终止运行,那么内核对象不一定被撤销,在大多数情况下,内核对象将被撤销,如果另一个进程正在使用你的进程创建的内核对象,那么在另一个进程停止前,内核对象不撤销。内核对象存在的时间可比创建该对象的进程长。
每个内核对象都包含一个使用计数,当一个内核对象创建时,他的使用计数被置为1,然后另一个进程访问内核对象时,使用计数就增加1,当进程终止时,内核检测该进程创建的内核对象的计数,若为0 则撤销该对象,否则不撤销。
调用一个函数创建内核对象时,如果调用失败通常返回0,CreateFile函数调用失败,返回INVILID_HANDLE_VALUE.
closehandle()关闭内核对象,系统会查看该内核对象的计数器,若为0 ,则撤销该内核对象。
将一个无效的句柄传递给CloseHanle(),如果进程运行正常则返回false,调用getlasterror返回ERROR_INVALID_HANDLE,
跨越进程边界共享内核对象:
1 文件映射对象使你能够在同一台机器上不同进程间共享数据块
2 邮箱和指定的管道使应用程序能够在联网的不同机器上进程间发送数据块
3 互斥对象 使线程同步
父进程创建的内核对象,如果要让子进程继承,需向系统声明希望创建的句柄是一个可继承的句柄。要创建能继承的句柄,必须制定一个SECURITY_ATTRIBUTES 结构并对他进行初始化,然后把该结构体的地址传递给create函数。系统会复制父进程句柄表里创建的能够被继承的对象到子进程。
DuplicateHandle() 函数复制对象句柄
、
别人的
内核对象是内核分配的一个内存块,只能由改内核访问;
内核对象由内核所拥有,进程创建了一个内核对象,然后进程终止运行,那么内核对象不一定被撤销,在大多数情况下,内核对象将被撤销,如果另一个进程正在使用你的进程创建的内核对象,那么在另一个进程停止前,内核对象不撤销。内核对象存在的时间可比创建该对象的进程长。
每个内核对象都包含一个使用计数,当一个内核对象创建时,他的使用计数被置为1,然后另一个进程访问内核对象时,使用计数就增加1,当进程终止时,内核检测该进程创建的内核对象的计数,若为0 则撤销该对象,否则不撤销。
调用一个函数创建内核对象时,如果调用失败通常返回0,CreateFile函数调用失败,返回INVILID_HANDLE_VALUE.
closehandle()关闭内核对象,系统会查看该内核对象的计数器,若为0 ,则撤销该内核对象。
将一个无效的句柄传递给CloseHanle(),如果进程运行正常则返回false,调用getlasterror返回ERROR_INVALID_HANDLE,
跨越进程边界共享内核对象:
1 文件映射对象使你能够在同一台机器上不同进程间共享数据块
2 邮箱和指定的管道使应用程序能够在联网的不同机器上进程间发送数据块
3 互斥对象 使线程同步
父进程创建的内核对象,如果要让子进程继承,需向系统声明希望创建的句柄是一个可继承的句柄。要创建能继承的句柄,必须制定一个SECURITY_ATTRIBUTES 结构并对他进行初始化,然后把该结构体的地址传递给create函数。系统会复制父进程句柄表里创建的能够被继承的对象到子进程。
DuplicateHandle() 函数复制对象句柄
、