20170607Windows09_04_进程复习

来源:互联网 发布:python经典视频教程 编辑:程序博客网 时间:2024/06/01 22:56

进程复习:

1:进程的启动:
    进程在启动之后,必然会产生两个对象:进程内核对象是HHANDLE类型而非HINSTANCE类型,HINSTANCE可以代表进程对象但是不可以代表进程内核对象,HINSTANCE本质为内核对象的基地址,CreateProcess后,会在父进程留下一个结构体梦里面的hProcess就是HANDLE类型,就是代表的子进程的内核对象。
    在进程内核对象里面有一个非常重要的参数——使用计数,他会因为线程的启动而+1,因为线程的关闭而-1,当使用计数为0时,操作系统会回收这个内核对象的地址空间,如果使用技术不为0,其内核对象就会一直保留,就说内核对象泄漏了。
    双击打开进程,资源管理器会CreateProcess这个进程,如果我们手动关闭资源管理器,他还是会再次被操作系统启动。资源管理器创建线程后,就会CloseHandle,之后,两个进程就是独立的关系,如果A进程创建了B进程,而A进程没有关闭B进程 的句柄,B进程的使用计数就为2,如果A进程要使用WaitForSingleObject等待B进程结束,此时A进程可以用GetExitCodeProcess()获取B进程的退出代码等东西,并且B进程的使用计数还为1,并不能被关闭,可能造成内核对象泄漏。
2:权限管理系统:
    Windwos的权限使用机制:windows下有多种用户账户,包括:
        超级管理员(Admin):无法重命名,使用这个系统唯一的账户登陆系统,可以做任何事情,任何权限都可以(除了与windows核心打交道)。
        管理员:可以做大部分的操作,

        用户级:可以做基础的操作,如果电脑里面有很多软件,光靠用户的权限是不够的,需要管理员身份执行程序,这种做法会非常麻烦,每次都需要输入密码,所以,我们常使用或基本都使用管理员身份登录系统,用户权限通常很少使用。

3:权限讲解:
    1:通常,我们使用普通管理员身份登陆系统,此时我们双击打开任何软件,都是默认拥有管理员权限,所以微软设计了UAC,为了解决管理员权限继承的关系,目的是为了不让完全的管理员权限被继承(但是考虑到兼容以前的软件,所以不能设计成阻止所有权限继承,需要权限自己提取这种方式)。
    2:以普通管理员登录系统,打开的普通软件就是拥有UAC过滤后的权限,如果提示需要提权的信息,再次提权就是获取的管理员所有权限。
    3:如果以普通用户账户登录系统,正常的程序可以启动成功,但是只拥有用户的权限。需要管理员运行的程序就需要登录管理员帐号后才可以打开,并且打开后拥有管理员权限。
    4:使用CreateProcess启动子进程,情况分别如下:
        已拥有管理员权限的进程启动需要提权的子进程,此时会触发UAC,用户确定后就拥有所有的权限,如果启动的是普通软件,那么他就继承了父进程,拥有UAC过滤后的权限。
        正常程序启动需要提权的程序,会启动失败,如果启动正常的程序,会启动成功。如果非要启动一个需要管理员权限的程序,可以使用ShellExecuteEx()来启动,相当于是通知资源管理器来启动,启动的子进程已经到资源管理器这个层级来运行的了,此时会提示是否允许授权,是否要登陆等。


UAC就是用户账户控制,可以在控制面板里面设置其通知的安全层级。




原创粉丝点击