前言
程序开发中经常遇到需要这些情况:辅助线程正在等待内核对象的触发,主线程需要强制终止辅助线程。我们常常做的就是使用:TerminateThread来强制终止线程。这样做当然是不太好的,强制终止线程后系统不会销毁此线程的堆栈,长久下去内存泄露问题就会很严重了。线程最安全的退出方式当然还是让它自己返回了。本文主要介绍windows核心编程中介绍的一种安全退出线程方式:使用可等待API等待内核对象...
分类:
编程语言 时间:
2015-03-16 12:53:41
阅读次数:
239
1、内核对象同步与用户模式下同步对比
使用内核对象的唯一缺点就是性能,调用内核对象函数时,调用线程必须从用户模式切换到内核模式,这种切换是相当
耗时的。
内核对象(进程、线程、作业)要么处于触发态,要么处于未触发状态。进程内核对象在创建时总是处于未触发状态,
当进程终止时,操作系统会自动使进程内核对象变成触发状态。当进程内核对象处于触发状态后,将永远保持这种状态,
再也不能变回未触发状态...
分类:
编程语言 时间:
2015-03-01 10:32:56
阅读次数:
344
创建可等待定时器是Windows内部线程同步的方式之一,本文简单讲述如何使用这一内核对象进行线程同步。
创建对象:
//创建事件内核对象,默认未触发状态
HANDLE hTimer = CreateWaitableTimer(NULL, TRUE, NULL);
设置对象属性:
CreateWaitableTimer创建完成后内核对象处于未触发状态,需要使用API
BOOL WIN...
从今天開始,对C++经常使用技术做个总结。參考书籍:《C++Primer》、《C++对象模型》、《设计模式》、《Windows核心编程》、《STL解密》。1.static_cast等四个cast的详细意义C++类型转换:隐式转换和显式转换。显式转换:static_cast、dynamic_cast、...
分类:
编程语言 时间:
2015-02-26 19:53:27
阅读次数:
150
最近有用到全局hook,其实可参考windows核心编程,全局hook也是Dll注入的一种方式。首先,必须是一个Dll,可导出一个接口,在其中设置全局hook,类型为WH_GETMESSAGE(这样,应该是所有进程都会被hook到了),这样成功后,系统会把这个Dll注入到有getmessage的所有进程中,即会为..
异步IO操作与同步操作区别: 在CreateFile里的FILE_FLAG_OVERLAPPED标志 异步操作函数LPOVERLAPPED参数 接收IO请求完成通知 触发设备内核对象 缺点:同一个设备内核对象有可能进行多次读写操作,这样第一个完成这个设备内核对象就会被触发,所以这种方式不可以使用于这...
在从windows核心编程中了解到API劫持(也叫Hook API)这种技术后,我就成了一个投机者,总是拦截其它软件的API函数,来做一些不可告人的目的,
这让我生活在痛苦之中。在我尝试拦截各种API函数来获取我需要的功能过程中,我发现很多人遇到了和我同样困难的问题,所以我在这里发布3个使用API
拦截技术实现的功能,这3个都是在应用层Hook。如没有特殊的说明,全部支持xp及win7系统。
...
===========================================原文地址:点击打开链接最近读到windows核心编程 作者制作的chHANDLE_DLGMSG 对话框消息处理宏#definechHANDLE_DLGMSG(hWnd,message,fn)/case(messag...
分类:
其他好文 时间:
2015-02-02 21:20:47
阅读次数:
174
终止进程的运行
1.主线程的进入点函数返回(最好使用这个方法)。
2.进程中的一个线程调用ExitProcess函数(应该避免使用这种方法)。
3.另一个进程中的线程调用TerminateProcess函数(应该避免使用这种方法)。
4.进程中的所有线程自行终止运行(这种情况几乎从未发生)。
主线程的进入点函数返回
始终都应该这样来设计应用程序,即只有当主线程的...
CreateProcess函数原型如下:
[cpp] view
plaincopy
BOOL CreateProcess(
PCTSTR pszApplicationName,
PTSTR pszCommandLine,
PSECURITY_ATTRIBUTES psaProcess,...