windows核心编程—进程初步

原创 2016年06月01日 13:26:11

进程

  1. 什么是进程,系统如何创建一个内核对象来管理进程。
  2. 如何通过进程内核对象来操作一个进程。
  3. 进程的属性,以及查询和修改进程属性的函数。
  4. 进程的结束。

 

一个进程,就是一个正在运行的程序!一个程序,可以产生多个进程。

  • 一个内核对象,被系统用来管理这个进程,这个内核对象中,还包含了进程的一些策略信息。
  • 一个地址空间,这个地址空间中包含了可执行代码,动态链接库模块代码,数据,程序动态内存分配获取的内存,也在这个内存地址空间中。

 

进程是死的,进程必须有一个线程!!

primary thread!!如果进程内所有线程退出,那么进程自动销毁!

调用ExitProcess函数,也可以结束进程。

 

第一个windows程序CUIGUI

我们所编写的windows程序中,真正第一个被执行的函数是:

图像界面的入口函数是:_tWinMain,控制台程序的入口函数是_tmain

WinMainCRTStartup//GUI_ASCII字符类型的C运行时库中的入口函数

wWinMainCRTStartup// GUI_UNICODE字符类型的C运行时库中的入口函数

mainCRTStartup// CUI_ASCII字符类型的C运行时库中的入口函数

wmainCRTStartup// CUI_UNICODE字符类型的C运行时库中的入口函数

 

这些C运行时库函数,主要完成以下任务:

  1. 获取进程命令行指针;
  2. 获取进程环境变量指针;
  3. 初始化C/C++运行时库的全局变量,如果你包含了头Stdlib.h,那么你就可以访问这些变量!//errno这就是一个全局变量。_enrion这是环境变量指针
  4. 初始化malloc函数的内存堆;
  5. C++全局类,调用构造函数。

malloc 函数,不要轻易使用?因为这个函数一般来说,最终会调用windows API函数,我们直接调用virtualAlloc windowsAPI函数,效率会高!

Kenerl 调用XXXCRTStartup函数;

XXXCRTStartup函数调用main函数;

main函数退出;

exit函数被调用(真正调用的是crt0dat.c中的)

static void __cdecldoexit (

        intcode,

        intquick,

        intretcaller

        )

这个函数主要做以下事情:

  1. 调用_onexit函数注册的所有函数;
  2. 调用C++销毁函数销毁所有的全局和静态类对象;
  3. 如果_CRTDBG_LEAK_CHECK_DF标志被设置,那么调用CrtDumpMemoryLeaks函数,列出泄露内存。
  4. 调用ExitProcess函数,系统杀死当前进程!

 

获取当前操作系统版本信息:GetVersion函数

DWORDWINAPI GetVersion(void);

void main()

{

    DWORD dwVersion = 0;

    DWORD dwMajorVersion = 0;

    DWORD dwMinorVersion = 0;

    DWORD dwBuild = 0;

 

    dwVersion = GetVersion();

 

    printf("%0x\n",dwVersion);

 

    // Get the Windows version.

    //一个子就是WORD

    WORD Version=LOWORD(dwVersion);

    //dwVersion中,其地位字,

    dwMajorVersion = (DWORD)(LOBYTE(Version));

    //Version字的低字节代表大版本号

    dwMinorVersion = (DWORD)(HIBYTE(Version));

    //Version字的高字节代表小版本号

    // Get the build number.

    if (dwVersion < 0x80000000)             

        dwBuild = (DWORD)(HIWORD(dwVersion));

    //dwVersion的高位字,表示build号。

    printf("Version is %d.%d (%d)\n",

                dwMajorVersion,

                dwMinorVersion,

                dwBuild);

 

    getchar();

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

《Windows核心编程》——四 进程

前言     一般将进程定义为一个正在运行的程序的一个实例,它由两部分组成:     ①一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方     ②一个地址空间,其中...
  • andylauhuang2012
  • andylauhuang2012
  • 2015年01月05日 17:11
  • 434

Windows核心编程 第四章 进程(下)

Windows核心编程 第四章 进程(下)
  • u013761036
  • u013761036
  • 2016年08月28日 18:33
  • 452

《Windows核心编程》读书笔记

这篇笔记是我在读《Windows核心编程》第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理...
  • u010984552
  • u010984552
  • 2016年07月05日 19:11
  • 1265

《Windows核心编程》之“Windows挂钩”(一)

《Windows核心编程》一书中介绍了一种针对带窗口的Windows应用程序的“DLL注入”的方法——Windows Hook(窗口挂钩)。本系列文章将探讨这种技术的原理和分享我的实验心得。...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年08月11日 15:27
  • 808

Windows核心编程 第五章 作业(上)

Windows核心编程 第五章 作业(上)
  • u013761036
  • u013761036
  • 2016年09月04日 20:31
  • 369

《windows核心编程系列》十八谈谈windows钩子

windows应用程序是基于消息驱动的。各种应用程序对各种消息作出响应从而实现各种功能。       windows钩子是windows消息处理机制的一个监视点,通过安装钩子可以达到监视指定窗口某种类...
  • fanhenghui
  • fanhenghui
  • 2017年01月06日 14:54
  • 714

Windows核心编程笔记(二十) 窗口与消息

线程的消息队列 (1)Windows用户对象(User Object)   ①类型:图标、光标、窗口类、菜单、加速键表等   ②当一个线程创建某个对象时,则该对象归这个线程的进程所有...
  • wangpengk7788
  • wangpengk7788
  • 2017年02月13日 19:50
  • 249

《Windows核心编程》之“进程”

本文我尝试用一张思维导图来总结我对《Windows核心编程》关于进程这一章内容的理解。如下:...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年08月22日 14:08
  • 755

chHANDLE_DLGMSG(windows核心编程)讲解

看完《Windows程序设计》后开始看《windows核心编程》, 结果看第一个案例的时候就很惊人的发现,Jeffery大牛的代码很深奥。乍一看好像没有包含《windows.h》。 看看包含的...
  • whatday
  • whatday
  • 2013年03月13日 13:38
  • 1575

《Windows核心编程》学习笔记(9)– 在win7或者vista系统下提升一个进程的运行权限

 win7或者vista默认运行程序是在受限制的环境下运行的,以减轻病毒对于系统的破坏。那么我们怎样才能提升一个进程的权限以至让它在 管理员模式下运行。当然CreateProcess函数没有提...
  • xiliang_pan
  • xiliang_pan
  • 2014年05月23日 15:17
  • 880
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows核心编程—进程初步
举报原因:
原因补充:

(最多只允许输入30个字)