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
基本限额JobObjectBasicLimitInformation

JOBOBJECT_BASIC_LIMIT_INFORMATION

扩展后的

基本限额

JobObjectBasicLimitInformation

JOBOBJECT_BASIC_LIMIT_INFORMATION

基本的UI

限制

JobObjectBasicUIRestrictionsJOBOBJECT_BASIC_UI_RESTRICTIONS
安全限额安全限额JOBOBJECT_SECURITY_LIMIT_INFORMATION

相关推荐