一、窗体创建过程

在文章《Windows消息机制的逆向分析》中详细分析了Windows的消息机制以及窗体的创建过程,文章中表述Windows窗体的创建分为三步:声明WNDCLASS实例、窗体注册、创建窗体。如果继续细分可以分为四步:声明WNDCLASS实例、窗体注册、创建窗体、显示窗体

其中窗体注册函数是RegisterClass()或RegisterClassEx(),创建窗体则是CreateWindow()或CreatewindowEx()函数,显示窗体则是利用ShowWindow()函数。

本文重点描述ShowWindow()函数。

二、ShowWindow函数

CreateWindowEx 建立窗口以后,这时候,窗口虽已建立,但还没有在屏幕上显示出来。

    ShowWindow函数

函数功能:该函数设置指定窗口的显示状态。

函数原型:BOOL ShowWindow(HWND hWnd, int nCmdShow

其中hWnd指窗口句柄;nCmdShow指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:

预定义值 等 效 值 nCmdShow值
SW_FORCEMINIMIZE 在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数 11
 SW_HIDE  隐藏窗口,大小不变,激活状态不变 0
 SW_MAXIMIZE  最大化窗口,显示状态不变,激活状态不变 3
 SW_MINIMIZE  最小化指定的窗口并且激活在Z序中的下一个顶层窗口 6
 SW_RESTORE  激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志 9
 SW_SHOW 在窗口原来的位置以原来的尺寸激活和显示窗口 5
 SW_SHOWMAXIMIZED  显示并激活窗口,以最大化显示 3
 SW_SHOWMINIMIZED  显示并激活窗口,以最小化显示 2
 SW_SHOWMINNOACTIVE  显示窗口并最小化,激活窗口仍然维持激活状态 7
 SW_SHOWNA  以窗口原来的状态显示窗口。激活窗口仍然维持激活状态 8
 SW_SHOWNOACTIVATE  以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态 4
SW_SHOWDEFAULT 依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的 10
 SW_SHOWNORMAL  激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志 1

三、函数过程分析

本次分析样本仍以https://blog.csdn.net/weixin_39768541/article/details/85010183 文章中的CM。在RegisterClass、CreateWindow以及NtUserShowWindow(模块间调用无ShowWindow函数)处下断点。

可以观察到函数执行流程是先将所有的窗体注册与创建完成后,再逐一执行NtUserShowWindow函数

那么现在来搜索ShowWindow函数何处调用。利用RUN跟踪:

调用函数即为NtUserShowWindow外层函数,其中标红位置即为nCmdShow值。

Windows窗体之ShowWindow函数分析相关推荐

  1. Windows事件等待学习笔记(三)—— WaitForSingleObject函数分析

    Windows事件等待学习笔记(三)-- WaitForSingleObject函数分析 要点回顾 WaitForSingleObject NtWaitForSingleObject KeWaitFo ...

  2. Windows窗体和常用控件的事件处理函数

    Windows窗体  WM_NULL = $0000;  WM_CREATE = $0001; 应用程序创建一个窗口  WM_DESTROY = $0002; 一个窗口被销毁  WM_MOVE = $ ...

  3. VS2010 win32项目windows窗体程序 向导生成代码解析

    目录: 1.Win32项目的windows窗体程序的向导生成了如下代码 2.手工生成代码如下 3.当消息队列中没有消息需要处理,我们可以利用这段时间处理我们自己的任务 1.Win32项目的window ...

  4. Windows.h 常用API函数【转】

    转自:https://blog.csdn.net/farmwang/article/details/50603608 http://www.vbgood.com/api.html http://hi. ...

  5. vb.net的windows窗体实现dos命令

    Imports System.Threading Imports System.Runtime.CompilerServices Public Class frmCmdExcute Inherits ...

  6. C++ Windows 窗体程序入门 - 1.你的第亿个窗体程序

    〇.前言-------------------- + 学Windows窗体已经有一段时日了,奈何没有什么浅显易懂(&便宜!!)的书籍 , 就想来 , 算是记笔记吧 , 顺便还能给你们总结一些经 ...

  7. 列举窗体控制台应用程序中的3中控件_今天来点枯燥的,Visual C#的Windows窗体运行过程...

    我们上一期只是在windows窗体上放了三个控件,并编写了一段小程序,实现了触发窗体上的按钮,使得标签上的内容改变,并能够结束运行当中的程序: 然而,我们在编写代码窗口时,windows窗体自动嵌入了 ...

  8. Windows窗体的所有菜单

    简介仅仅使用一行简单的程序,你就能够使你的Windows窗体的所有菜单和上下文菜单具有office2003的菜单外观.同样地,你也可以只用一行程序,就能为你的菜单加上漂亮的图标.本文实现的是一个具有该 ...

  9. windows窗体继承问题

    窗体继承什么时候用的到呢?当我们使用三层架构来编写我们的cs程序时,我们的U层大部分是windows窗体.这个时候如果我们有一些公共变量,或者是一个窗体需要使用另一个窗体的数据.或者是有一些用于判断的 ...

  10. 【Android 逆向】Android 逆向通用工具开发 ( adb forward 网络端口重定向命令 | PC 端逆向程序主函数分析 )

    文章目录 前言 一.adb forward 网络端口重定向命令 二.PC 端逆向程序主函数分析 前言 本篇博客重点分析 PC 端 hacktool 模块 ; 一.adb forward 网络端口重定向 ...

最新文章

  1. mac上使用crontab周期性执行python脚本
  2. SB Admin 2 学习笔记1
  3. linux之xargs命令用途
  4. matlab 列表 剪切,利用Matlab进行文件批量复制、剪切和修改文件名
  5. hdu 2570 贪心
  6. hibernate 使用别名查询
  7. python中迭代器和可迭代对象的区别_Python 可迭代对象迭代器生成器的区别
  8. 小明滚出---响应对象HttpServletResponse和请求对象HttpServletRequest实例
  9. 安装配置rabbitmq
  10. nodejs(koajs)设置中文cookie无效
  11. 一台服务器上使用docker安装redis6.0.10一主两从以及哨兵模式
  12. 2018-01-03 烂尾工程: Java实现的汇编语言编译器
  13. 【数据挖掘】PCA 主成分分析算法过程及原理讲解
  14. centos安装pecl
  15. 3. Kubernetes资源-概述
  16. HOW TO LEECH USING IRC
  17. HCL_H3CNE综合实验
  18. VTL(Velocity Templates Language,即Velocity模板语言)初识语法总结
  19. [一起学Hive]之十二-Hive SQL的优化
  20. 仿凡科,微企点建站功能预览

热门文章

  1. 叩丁狼培训实战教程之Java的动态代理
  2. JZ2440.jflash配置
  3. 梦幻西游手游服务器维护公告,《梦幻西游手游》10月5日维护公告 部分区服合并...
  4. 手游渠道SDK建议标准
  5. 基于色彩调和的专题图自动生成系统
  6. 第一章 古代东方文明
  7. QQ等级:QQ在线等级说明
  8. 大厂的人自带光环,但光环是从哪儿来的呢?
  9. Hadoop3.2.1 【 HDFS 】源码分析 : Secondary Namenode解析
  10. 双网卡共享上网的完全解决方案