
win32
z4ky
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
APC机制两个问题
一、特定情况下WaitForSingleObjectEx返回值的问题等待内核对象处于激活状态 (下面是hEvent)线程处于警觉状态,且APC队列中有函数(APCProc)两个条件同时满足的时候,WaitForSingleObjectEx这个函数的返回值是什么?代码:#include <stdio.h>#include <windows.h>VOID ...原创 2019-04-01 20:05:23 · 477 阅读 · 0 评论 -
窗口的本质-----------画出来的
1. 窗口的本质kernel32.dlluser32.dll ------------------------>GUI编程gdi32.dll里面是接口------------>GDI编程针对窗口的句柄表(HWND)是全局的2. GDI 图形设备接口 (Graphics Device Interface)<1>设备对象(HWND) 画在哪...原创 2019-06-04 16:08:52 · 212 阅读 · 0 评论 -
事件
1. 事件创建事件函数CreateEventHANDLE WINAPI CreateEvent( __in_opt LPSECURITY_ATTRIBUTES lpEventAttributes,//SD __in BOOL bManualReset, //是否手动重新设置标志位,如果为TRUE,即用来互斥,如果为FALSE,即用来通知 __in BOO...原创 2019-06-04 16:04:33 · 159 阅读 · 0 评论 -
句柄表
1. 什么是内核对象?像进程,线程,文件,互斥体,事件等在内核都有一个对应的结构体,这些结构体由内核负责管理。我们管这样的对象叫做内核对象。2. 如何管理内核对象?通过一个叫 "句柄" 的东西3. 每个进程都有一个句柄表不是每个内核对象都有句柄表,只有进程内核对象才有句柄表,即句柄表是进程内核对象中的一个成员4. 多进程共享一个内核对象句柄表是一个私有的值,句柄...原创 2019-05-18 17:58:49 · 192 阅读 · 0 评论 -
进程的创建过程
所有的进程都是由别的进程创建出来的,用鼠标双击运行一个程序的时候,实际上是由explorer.exe这个进程创建出来的那么这个时候有人可能会问,所有的进程都是由其他进程创建出来的,那么第一个进程呢?第一个进程其实是由操作系统内核进行创建的进程的创建过程:映射EXE文件创建内核对象EPROCESS(一个进程对应一个EPROCESS)映射系统DLL(ntdll.dll)创建线程内核对象ET...原创 2019-05-18 17:47:47 · 4188 阅读 · 0 评论 -
字符编码问题
1、ASCII编码0 - 7F,0000 0000-----0111 1111标准ASCII码80 - FF 1000 0000 -------1111 1111扩展ASCII码2、GB2312或GB2312-80(针对自己国家)基于扩展ASCII码单独看每一个字节,都是扩展ASCII码表中的数据,2个表示一个汉字,这就是GB2312编码,但是GB2312存在很大的弊端,例...原创 2019-05-17 22:37:47 · 231 阅读 · 0 评论 -
互斥体
互斥体与线程锁的区别1. 线程锁只能用于单个进程间的线程控制2. 互斥体可以设定等待超时,但线程锁不能3. 线程意外终结时,Mutex可以避免无限等待------------互斥锁的abandon问题4. Mutex效率没有线程锁高多次释放互斥对象的问题在调用了WaitForSingleObject函数来获得了互斥内核对象的所有权之后,在本线程当中,若再次调用Wait...原创 2019-05-24 17:25:53 · 248 阅读 · 0 评论 -
临界区
1、线程安全问题每个线程都有自己的栈,而局部变量是存储在栈中的,这就意味着每个线程都有一份自己的“局部变量”,如果线程仅仅使用"局部变量"那么就不存在线程安全问题。那如果多个线程共用一个全局变量呢?比如看如下代码:·运行结果:2、临界区实现之线程锁运行结果:临界区的代码在同一时刻是只允许一个线程执行的,这样的话就不会出现问题了这样的话就不会...原创 2019-05-24 17:15:51 · 322 阅读 · 0 评论 -
创建线程需注意的一个问题
代码:就是在线程ThreadProc11中用到了线程ThreadProc这个线程的局部变量,所以这个局部变量的存活时间必须得比ThreadProc11这个线程存活时间长才可以,显然上面代码并没有做到这一点,,,,,因为线程ThreadProc比ThreadProc11结束的早,所以出现非法内存访问另外列举一些控制线程的API暂停线程恢复线程SuspendThread()...原创 2019-05-24 17:10:37 · 264 阅读 · 0 评论 -
工作路径与模块路径的区别
在Win32API中工作路径是用GetCurrentDirectory()获得;而模块路径是由GetModuleFileName()获得下面通过一段简单的代码来解释一下工作路径与模块路径的区别运行结果:当前模块路径是不变的,文件放在哪,他就是啥但是工作路径的话就不同了,工作路径是父进程通过CreateProcess这个API传给他的,通过参数 __in_opt LPCT...原创 2019-05-19 22:59:09 · 1254 阅读 · 2 评论 -
PID与进程句柄的关系
在操作系统内核区维护着一张全局句柄表,全局句柄表里面存放着所有进程内核对象,而全局句柄表的索引就是PID当前进程的 进程句柄 是当前进程句柄表的索引,它只在本进程有效但是PID是全局句柄表的索引,所以它对所有的进程都有效...原创 2019-05-19 22:50:04 · 2760 阅读 · 0 评论 -
第一个Windows程序
int WINAPI WinMain( HINSTANCE hInstance, //当前模块的地址 HINSTANCE hPrevInstance, //永远为NULL,不用管它 LPSTR lpCmdLine, /...原创 2019-06-04 16:15:15 · 267 阅读 · 0 评论