Windows 系统编程基础

news/2024/11/19 8:29:53/文章来源:https://www.cnblogs.com/sec875/p/18554132

进程;虚拟内存;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(常态变量)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836622.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jfinal框架运行时,端口号被占用

下载完Jfinal后按照启动说明,发现出现端口号被占用的问题 我们只需要去undertow.txt文件里面寻找undertow.port=80将修改成undertow.port=8080就可以运行成功了

Rust 的静态网站生成器「GitHub 热点速览」

如果你做过个人博客网站,那么一定对静态网站生成器不陌生。无论是 Ruby 语言的 Jekyll、Go 语言的 Hugo、还是基于 React 的 Gatsby,这些工具都有庞大的用户群体。对于喜欢的人来说,它们是无可替代的神器,而对于不喜欢的人,则可能难以“下咽”。正如俗话所说,“萝卜青菜,…

Mysql篇-语句执行计划详解(explain)

概述 使用 explain 输出 SELECT 语句执行的详细信息,包括以下信息:表的加载顺序 sql 的查询类型 可能用到哪些索引,实际上用到哪些索引 读取的行数Explain 执行计划包含字段信息如下:分别是 id、select_type、table、partitions、type、possible_keys、key、key_len、ref、…

永宏BI-设置报告全屏自适应

制作报告 - 查看 -自适应设置全屏自适应查看报告 - 演示 - 手动演示 即可全屏展示

Ubuntu-22.04 挂载磁盘

查看系统磁盘情况 fdisk 或者 lsblk -f新建挂载磁盘名称,类似于windows的盘符。例如我们新建一个 data,专门存放生产数据 cd / mkdir data 确保sdb盘新盘或者数据已备份,格式化sdb盘为ext4格式 sudo mkfs -t ext4 /dev/sdb 手动挂载 sudo mount /dev/sdb /data 查看磁盘挂载…

项目UML图(2)

1.用例图2.类图3.时序图

读数据质量管理:数据可靠性与数据质量问题解决之道08扩展异常检测

扩展异常检测1. Python和机器学习扩展异常检测 1.1. 机器学习有助于大规模数据可观测性和数据监控1.1.1. 配备了机器学习的检测器可以更灵活地应用到更多的数据表上,从而消除了随着数据仓库或数据湖的增长进行手动检查和手动操作的需要1.1.2. 机器学习检测器可以实时学习和适应…

笼统的数据处理

通常来说,根据数据类型可以将编程语言分为两类:强类型语言强类型语言(Strongly typed language)不仅强制要求事先声明变量,还要求声明每个变量的数据类型,这样编译器就能准确地知道这个变量中的值的类型。强类型语言在数据类型上要求很严格:必须事先说明变量中存放的数据…

GitLab私有仓库概述及环境部署

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.gitlab概述1.gitlab介绍2.gitlab架构3.gitlab推荐配置二.部署gitlab前准备1.ubuntu系统环境安装前准备1.1 配置Ubuntu主机名1.2 配置Ubuntu远程链接1.3 配置ubuntu仓库1.4 修改终端颜色1.5 重启虚拟机…

RHEL8.10上搭建dhcp-relay服务

日期:2024.11.17 目的:在rhel8上搭建dhcp-relay服务,让搭建在lan网段(10.31.0.0/24)中的DHCP服务器rocky9(10.31.0.1/24),可以给dmz网段(172.31.0.0/24)中的主机提供服务 参照:鸟哥Linux私房菜 https://linux.vbird.org/linux_server/rocky9/0220dhcp_ntp.php#9.3 3…

ROCKY9.4上搭建DHCP服务

日期:2024.11.14 内容:在虚拟的LAN网络中(10.31.0.0/24)的ROCKY9.4(10.31.0.1/24)上搭建DHCP服务器,供LAN网络中其余主机自动获取IP地址 参照:鸟哥Linux私房菜 马哥教育王晓春老师课程安装DHCP服务 [root@ROCKY9 ~]# dnf info dhcp-server Last metadata expiration check:…

dyld: 神秘的 __dso_handle

dyld: 神秘的 __dso_handleiOS动态链接器dyld中有一个神秘的变量__dso_handle: // dyld/dyldMain.cpp static const MachOAnalyzer* getDyldMH() { #if __LP64__// 声明 __dso_handleextern const MachOAnalyzer __dso_handle;return &__dso_handle; #else... #endif // __…