什么是进程

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

什么是线程

进程必须有一个线程
primary thread!!如果进程内所有线程退出,那么进程自动销毁!
调用ExitProcess函数,也可以结束进程。

第一个被执行的函数(C运行库函数)

第一个windows程序CUI和GUI。
我们所编写的windows程序中,真正第一个被执行的函数是:
图像界面的入口函数是:_tWinMain,
控制台程序的入口函数是_tmain
WinMainCRTStartup//GUI_ASCII字符类型的C运行时库中的入口函数
wWinMainCRTStartup// GUI_UNICODE字符类型的C运行时库中的入口函数
mainCRTStartup// CUI_ASCII字符类型的C运行时库中的入口函数
wmainCRTStartup// CUI_UNICODE字符类型的C运行时库中的入口函数

该函数主要完成以下任务

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

函数退出

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

  1. static void __cdecl doexit (
  2. int code,
  3. int quick,
  4. int retcaller
  5. )

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

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

获取操作系统版本

获取当前操作系统版本信息:GetVersion函数
DWORD WINAPI GetVersion(void);
返回操作系统的版本号。
官方链接 https://docs.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version?redirectedfrom=MSDN

windows进程基本概念 - 图1

代码实现

  1. #include <windows.h>
  2. #include <stdio.h>
  3. void main()
  4. {
  5. DWORD dwVersion = 0;
  6. DWORD dwMajorVersion = 0;
  7. DWORD dwMinorVersion = 0;
  8. DWORD dwBuild = 0;
  9. dwVersion = GetVersion();
  10. printf("%0x\n",dwVersion);
  11. // Get the Windows version.
  12. //一个子就是WORD;
  13. WORD Version=LOWORD(dwVersion);
  14. //dwVersion中,其地位字,
  15. dwMajorVersion = (DWORD)(LOBYTE(Version));
  16. //Version字的低字节代表大版本号
  17. dwMinorVersion = (DWORD)(HIBYTE(Version));
  18. //Version字的高字节代表小版本号
  19. // Get the build number.
  20. if (dwVersion < 0x80000000)
  21. dwBuild = (DWORD)(HIWORD(dwVersion));
  22. //dwVersion的高位字,表示build号。
  23. printf("Version is %d.%d (%d)\n",
  24. dwMajorVersion,
  25. dwMinorVersion,
  26. dwBuild);
  27. getchar();
  28. }