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 核心编程 笔记之 进程

发表时间:2013.5.18 内容:windows进程(process) 作者:郑金玮   如上图所示,windows任务管理器中的进程Tab列中列出了系统管理的所有进程,我们经常利用任务...

Windows核心编程学习笔记--进程和线程的优先级

线程调度、优先级和关联性  From:http://blog.csdn.net/drecik__/article/details/8095467     每个线程都有一个CONTEXT结构,保存在线...

基于visual c++之windows核心编程代码分析(63)无模块dll进程注射

我们在信息安全编程的时候经常需要进行dll进程注入,我们在编程中如何实现呢。需要引用Psapi.Lib,具体可以百度下载之。其头文件如下,odule Name: psapi.h Abstr...

Windows核心编程学习笔记(15)--进程和线程与CPU的关联性

Drecik学习经验分享 转载请注明出处:http://blog.csdn.net/drecik__/article/details/8096253   默认情况下,Windows Vist或以...

《windows核心编程系列》四谈谈进程的建立和终止

http://blog.csdn.net/ithzhang/article/details/7927682转载请注明出处! 第二部分:工作机理 第一章:进程 上一章介...

Windows核心编程学习笔记(12)--线程与进程运行的时间

Drecik学习经验分享 转载请注明出处:http://blog.csdn.net/drecik__/article/details/8093724   如果是一般精度要求可以使用GetThre...

Windows核心编程 第4章 进程

Windows核心编程 第4章 进程 进程由两部分组成: 操作系统管理进程的内核对象。存放该进程 的统计信息的地方。 地址空间,包含可执行模块和DLL模块的代码和...

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

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

Windows核心编程学习五:进程的环境变量

注:源码为学习《Windows核心编程》的一些尝试,非原创。若能有助于一二访客,幸甚。 1.进程的环境变量 每个进程都有一个与它关联的环境块(environment block),这是...

《Windows核心编程》进程

《Windows程序设计》先放下了,不知道为什么,看不下去了,后面的感觉不是那么重要。 开始了《Windows核心编程》。 《Windows核心编程》进程 可以说是读书笔记吧,怎么样从书...
  • l0g1n
  • l0g1n
  • 2012-06-03 12:20
  • 722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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