WINDOWS核心编程——进程
看完了内核对象,现在看进程。都知道进程是通过内核对象被操作系统管理的。它由内核对象和地址空间组成。
?
下面看看CreateProcess函数:创建进程。需要说明的是,在进程完全初始化之前该函数就会返回true。这意味着操作系统j加载程序尚未进行定位所有所必要的dll。如果某个dll找不到或者未能正确初始化,进程就会终止。因为CreateProcess返回TRUE,所以父进程不会注意到任何初始化的问题。
?
1.pszCommandLine参数。
表示创建的进程的命令行参数,操作系统会修改我们传的命令行参数,但是在函数返回之前还原为原来的形式。它是PTSTR类型,表示传入的是一个“非常量字符串”的指针。如果传入常量字符串指针,会引起访问违规。
CreateProcess(NULL,TEXT("XXX"),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); //第二个参数传入的是常量指针
在使用时应该先将常量复制到一个缓冲区中:
TCHAR szCommandLine[] = TEXT("XXX");//然后传入szCommandLine
2.psaProcess、psaThread和bInheritHanles
前两个参数分别为进程对象和线程对象指定安全性。为NULL时,系统为其分配默认的安全描述符。两个都是SECURITY_ATTRIBUTES的结构。bInheritHanles参数是该结构的一个参数,用于指示
?
?
有关的其他参数,就不再详细讲。
作业内核对象 。可以想象成一个进程容器。用于把一组进程装起来,这样就可以对进程施加限制。
/**创建一个作业内核对象*@PSECURITY_ATTRIBUTES psa*@PCTSTR pszname*/HANDLE hjob = CreateJobObject(NULL, TEXT("KDDKKKK"));/**将进程添加到作业中*@HANDLE hjob*@HANDLE hProcess*/AssinProcessToJobObject(hjob, GetCurrentProcess());?
对作业中的进程施加限制
BOOL SetInformationJobObject(HANDLE hJob,JOBOBJECTINFOCLASS JobObjectInformationClass,PVOID pJobObjectInformation,DWORD cbJobObjectInformationSize);/**@hJob 指定要限制的作业*@JobObjectInformationClass 是一个枚举类型,指定要施加限制的类型*@pJobObjectInformation 指向包含具体限制设置的数据结构的地址*@cbJobObjectInformationSize 指定该数据结构的大小*/
限制类型的总结:
?
限制类型JobObjectInformationClass pJobObjectInformation基本限额JobObjectBasicLimitInformationJOBOBJECT_BASIC_LIMIT_INFORMATION
扩展后的
基本限额
JobObjectBasicLimitInformationJOBOBJECT_BASIC_LIMIT_INFORMATION
基本的UI
限制
JobObjectBasicUIRestrictionsJOBOBJECT_BASIC_UI_RESTRICTIONS安全限额安全限额JOBOBJECT_SECURITY_LIMIT_INFORMATION?
?
?
?
?
?
?
?
?
?
?
?
?
?