进程;虚拟内存;DLLs;线程;系统架构;windows API
进程
私有地址空间;私有处理表;访问token;线程
虚拟内存
进程只能用虚拟内存
DLLs
映射到进程地址空间中,类似python库,可进程间共享
线程
内核执行代码时,实际用的是线程
CPU寄存器状态
访问模式:用户模式和内核模式
两个stacks:一个用户空间一个内核空间
线程本地存储(TLS)
可选的安全token
可选的线程创建的消息队列和窗口
线程调度优先级
状态:运行,准备,等待
系统架构
用户模式:子系统DLLs(服务进程,用户进程,系统进程),NTDLL.DLLs(子系统DLLs,系统进程,子系统进程)
内核模式:win32k.sys,设备驱动,内核,硬件抽象层
ntdll!NtReadFile: sysenter,syscall
函数调用流程: 用户模式:应用 fread->msvcrt.dll ReadFile ->Kernel32.DLL NtReadFile ->NtDll.DLL sysenter,syscall --> 内核模式:NtOskrnl.exe NtReadFile -> NtOskrnl.exe NtReadFile调用设备 -> driver.sys 设备I/O返回调用
windows API
windows API win32 ,.net,windows runtime
Windows应用程序开发测试调试
Visual Studio 社区版,Desktop development with C++
::
非强制性,C++中表示全局,无法在C中编译,编码习惯,易于识别windows API调用
msdn getnativesysteminfo:https://learn.microsoft.com/zh-tw/windows/win32/api/sysinfoapi/nf-sysinfoapi-getnativesysteminfo
处理错误
- msdn一把梭:全部不需要记,查阅文档一把梭
FALSE(0)表示错误,任何其他值表示成功
GetLastError
@err,FormatMessage
HANDLE
Zero (NULL) and -1(INVALID HANDLE VALUE) indicate failure Call
GetLastError
LRESULT 或 LONG:函数直接返回的错误代码错误,SUCCESS(0)表示成功
HRESULT
COM函数/方法中的典型返回类型S OK(0)表示成功,负值表示错误
msdn openprocess:https://learn.microsoft.com/zh-tw/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess
32-bit vs. 64-bit Systems
wow64转换层
windows API 演进向后兼容:指针和处理的数据类型扩展到了64
增加了更多类型:DWORD PTR,INT PTR,SIZE T等
字符串
Windows内核使用UTF-16(Unicode)来表示字符串;Windows APl也使用Unicode;兼容性原因还存在ANSI(ASCII)函数,以“W”(Unicode)和“A”(ANSI)结尾;函数名实际上是一个宏
WCHAR,wchar t(Unicode字符)
PWSTR(Unicode字符串指针),PSTR(ASCII字符串手指针)
PCWSTR,PCSTR(常态变量)