1. #include <Windows.h>
  2. #include <stdio.h>
  3. int WinMain(
  4. HINSTANCE hInstance,
  5. HINSTANCE hPrevInstance,
  6. LPSTR lpCmdLine,
  7. int nCmdShow
  8. ) {
  9. LPSTR szstring = "windows data type ,.string"; // 字符串,字符指针
  10. CHAR lpstr[120]; //字符
  11. DWORD dwMax = 0xFFFFFFFF; // 32 位无符号整数
  12. DWORD dwOne = 0x1;
  13. INT iMax = 0xffffffff;
  14. INT iMin = 0x1;
  15. MessageBox(NULL, szstring, "lpstr", MB_OK);
  16. CopyMemory(lpstr, szstring, lstrlen(szstring) + 1);
  17. MessageBox(NULL, lpstr, "char", MB_OK);
  18. if (dwMax > dwOne)
  19. {
  20. MessageBox(NULL, "dwmax > dwone", "dword", MB_OK);
  21. }
  22. if (iMax < iMin)
  23. {
  24. MessageBox(NULL, "imax > imin", "int", MB_OK);
  25. }
  26. return 0;
  27. }

防止乱码 使用TEXT()
image.png

基本数据类型

BOOL
BYTE
CHAR
CONST
DWORD
DWORD32
DWORD64
FLOAT
HANDLE
HICON
HINSTANCE
HKEY
HMODLE
HWND
INT
INT_PTR
INT_32
INT_64
LOGN
LOGNLOGN
LOGN32
LOGN64
LPARAM 消息的L参数
WPARAM 消息的W参数
LPCSTR windows (ANSI) 字符串常量
LPCTSTR 根据环境配置,如果定义了UNICODE宏,则是LPCWSTR 类型,否则是LPCTSTR
LPCWSTR UNICODE 字符串常量
LPDWORD 指向DWORD类型数据指针
LPSTR windows (ANSI) 字符串变量
LPTSTR 根据环境配置,如果定义了UNICODE宏,则是LPWSTR 类型,否则是LPSTR
LPWSTR UNICODE 字符串变量
SHORT
SIZE_T
TCAHR
UCHAR
UINT
ULONG
VOID
WCHAR
WINAPI
WORD

命名规律

  • 基本数据类型包括:BYTE、CHAR、WORD、SHORT、INT等。
  • 指针类型的命令方式一般是在其指向的数据类型前加“LP”“P”,比如指向DWORD的指针类型为“LPDWORD”和“PDWORD”
  • 各种句柄类型的命名方式一般都是在对象名前加“H”,比如位图(BITMAP)对应的句柄类型为“HBITMAP”。
  • 无符号类型一般是以“U”开头,比如“INT”是符号类型,“UINT”是无符号类型
  • 根据这些命名规律以及自己的经验看到一些没见过的数据类型也就能知道它的代表的意思

    Windows参数简写

  • b 布尔

  • by BYTE

  • c chr 或WCHAR TCHAR

  • n short

  • i int

  • x、y 分别表示x 坐标,y 坐标

  • cx、cy 分别表示x 方向长度和y 方向长度

  • b 或f BOOL(int),f 代表“flag”

  • w WORD(无符号short)

  • l LONG 长整数

  • dw DWORD 无符号长整数

  • fn function 函数

  • s string 字符串

  • sz 以0 字节结尾的字符串

  • h 句柄

  • p 指针

  • lpfn 指向函数的长指针

  • cb 字节数

  • lpsz 指向以0 结尾的字符串的长指针

  • g_ 全局变量

  • c_ 常量

  • m_ 类数据成员

  • s_ 静态变量

  • CS_ 类风格选项

  • CW_ 创建窗口选项

  • DT_ 绘制文本选项

  • IDI_ 图标ID 号

  • IDC_ 光标ID 号

  • MB_ 消息框选项


  • SND_ 声音选项

  • WM_ 窗口消息

  • WS_ 窗口风格

  • rc 矩形

Windows数据类型与标准C数据类型的关系

查看Windows数据类型的定义可以看到,所有的windows数据类型都是由C数据类型经过类型重定义得到的。

  • DWORD实质上就是 unsigned long 数据类型,32位无符号整型。

  • HANDLE类型实质上是void,HANDLE定义为:

typedof PVOID HANDLE;
HANDLE实际上就是一个PVOID,那PVOID又是什么呢?
typeof void *PVOID;
PVOID就是指向void的指针。
所有的Windows数据类型都是通过这种方式在SDK的头文件中进行定义的,它们都是来源于标准c的

windows数据类型于api

windows api函数的参数 ,返回值或者一些重要的数据类型都是使用的Windows的数据类型
比如 messageBox 函数

  1. int MessageBox(
  2. HWND hWnd,
  3. LPCTSTR lpText,
  4. LPCTSTR lpCaption,
  5. UINT uType
  6. );

函数命名规则

Ex 执行体函数,进程,线程,链表,对象属性,赋值,取值,加锁
Ke 内核函数,部分导出
Ki 微内核函数,进程,线程CPU,调度,不导出
Ps 执行体,进程,线程
Mm 内存相关,导出
Mi 内存相关函数Mm函数底层调用Mi,不导出
Io 文件,io,设备,导出
CC 文件缓存
Rtl 运行库,字符串,执行体
Zw SSDT,但是Zw不改变线程模式
Nt Zw函数会调用到Nt,Zw本身不实现功能
Cm 注册表
Hal 硬件函数
Ob 对象管理器,句柄,创建查询内核对象
Pnp 电源管理
Psp 执行体函数,使用ps 实现复杂功能