随笔分类 - Windows编程笔记
摘要:# 017 系统内存信息 内存大小 空闲内存 5 GetSystemInfo 函数 函数原型: 参数1:lpSystemInfo [out] 返回一个 SYSTEM_INFO 结构体指针信息 结构体原型: SYSTEM_INFO结构体参数说明: wProcessorArchitecture: Wor
阅读全文
摘要:● VirtualQueryEx 函数 功能:检索在指定进程的虚拟地址空间内的一系列页面的信息。 函数参数 参数1:hProcess [in] 进程句柄 参数2:lpAddress [in, optional] 查询虚拟内存地址 参数3:lpBuffer [out] MEMORY_BASIC_INF
阅读全文
摘要:# 64位及内存对其 ● 内存对齐 ○ 内存取%页面大小 ○ 如果内存没有对齐 CPU无法正常读取数据 CPU会使用错位的方式读取数据 延缓我们对数据的操作性 ● 获取页面大小 ○ AMD INTER CPU x64 x86 的CPU 页面大小 4kb ○ IA64 英特尔 的服务器平台 至强CPU
阅读全文
摘要:用户地址空间 ● 内存的分配 ○ 当进程被创建并赋予它的地址空间时,该可用地址空间的主体是空闲的,即未被分配的。 若要使用该地址空间的各个部分,必须通过调用 VirtualAlloc函数来分配它里边的各个区域。 每当你保留地址空间的一个区域时,系统要确保该区域从一个分配颗度的边界开始。 当你保留地址
阅读全文
摘要:# 内存 ● 物理内存 ○ 电脑上面的内存条 ○ 4G 8G 16G 32G 物理内存是死的,不会增长的 ○ 物理内存可以跟CPU进行通信,所以电脑上面必须有物理内存 ○ 应用程序开发的时候,我们根本无法接触到物理内存。 ● 虚拟内存 ○ 多个进程 每个都分配虚拟地址空间 ○ 模拟所有物理内存的功能
阅读全文
摘要:实现限制程序多开 测试代码 创建第一个程序ProcessMutexDemo.exe 创建第二个程序ProcessMutexDemoB.exe 测试结果 单个的实现方法
阅读全文
摘要:● CreateMutex 函数原型 ○ 参数1:lpMutexAttributes [in, optional] 指向SECURITY_ATTRIBUTES结构的指针。如果此参数为NULL,则处理不能由子进程继承。 ○ 参数2:bInitialOwner [in] 如果此值为真,且调用者创建互斥对
阅读全文
摘要:信号量 ● CreateSemaphore 函数原型 ○ 参数1:lpSemaphoreAttributes [in, optional] 指向SECURITY_ATTRIBUTES结构的指针。如果此参数为NULL,则处理不能由子进程继承。 ○ 参数2:llInitialCount [in] 这个信
阅读全文
摘要:可等待计时器对象. ● CreateWaitableTimer 函数原型 ○ 参数1:lpSemaphoreAttributes SECURITY_ATTRIBUTES,指定一个结构,用于设置对象的安全特性。如将参数声明为ByVal As Long,并传递零值,就可使用对象的默认安全设置。 ○ 参数
阅读全文
摘要:小项目 ● 拖拽控件 ● 设置编辑框属性 ● 程序逻辑 ● 获取焦点的事件 ● 启动以后会不停的弹 下消息框 ● 解决办法多拖动一个按钮即可 初始化代码 实现代码
阅读全文
摘要:示例 无法正常显示 使用事件内核对象 ● CreateEvent ○ CreateEvent是一个Windows API函数。它用来创建或打开一个命名的或无名的事件对象。如果想为对象指定一个访问掩码,应当使用CreateEventEx函数。 ● 函数原型 ○ 参数1:lpEventAttribute
阅读全文
摘要:Signal ● Signal = FALSE 相当于标志 ● 进程 初始化FALSE 运行完成 设置位 TURE ● 线程 ● 标准输入输出流 ● 互斥体 ● 信号 ● 可等待计时器 ● 作业 ● WaitForSingleObject() 句柄,时间 ○ 当前正在执行的线程,变成不可调度的状态,
阅读全文
摘要:● 句柄 ● 句柄内核对象递增数值 ● 进程内核对象 ○ 句柄表 ○ 索引 ○ 指向内核对象的指针 ○ 内存空间 ○ 标志位 ● 句柄是不能够跨进程存在的 ○ File Obj -> 地址 ○ 生成索引 ○ A索引表 R3 -> 拿到索引 -> ● closehandle 可以关闭进程句柄 ○ 改变
阅读全文
摘要:内核对象 ● 内核对象 ● 句柄的本质 ● 下载 WinObj ○ https://technet.microsoft.com/en-us/sysinternals/bb896657/ ● WinObj 主要是用来参看我们系统中的内核对象 ○ 必须用管理员权限启动程序 ○ 内核对象是属于我的系统的内
阅读全文
摘要:● Slim锁: ○ 可区分读写操作, 可上共享锁 ○ 效率比临界区高 ● Slim的劣势: ○ 一旦上了独占锁, 共享锁的线程会被阻塞 ● 线程状态 ○ 线程的挂起, 休眠, 阻塞, 等待状态都会使线程不可调度 ○ 当收到操作系统发送的通知说线程可以恢复运行的时候, 线程就又变成了可调度状态
阅读全文
摘要:● EnterCriticalSection() ○ 多个线程操作相同的数据时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据, 变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。 这样就需要使用EnterCriticalSection和LeaveCritic
阅读全文
摘要:线程优先级 ● 线程优先级 ○ Windows的每一个可调度的线程分配了一个优先级(0-31),当系统准备去执行一条线程时,会首先看优先级为31的行程,并以循环的方式来进行 调度,只要有优先级为31的线程,操作系统将永远不会调用30以下的线程,这样看起来好像优先级较低的线 程永远得不到被执行的机会,
阅读全文
摘要:● 对全局变量进行 volatile 可以阻止编译器对变量的优化 ● lparam 线程函数的传参 1 #include <windows.h> ● (void*)i, 临时变量i 强制转换位 void* 然后在 线程函数内 再转换回int ● 另外一种传参的方法 ● 执行结果黑诡异 ● 线程是同时
阅读全文
摘要:以下代码个别情况下会出错 导致值为1 出错的原因 下面是加硬件锁代码
阅读全文
摘要:#define UNICODE #include <stdio.h> #include <tchar.h> #include <windows.h> #include <process.h> BOOL bUseing = FALSE; unsigned int __stdcall ThreadRun
阅读全文