Windows编程
文章平均质量分 63
WXF明
哈哈哈
展开
-
互斥量内核对象
互斥量对象有许多用途,它是使用最为频繁的内核对象之一,一般用来对多个进程访问同一块内存进行同步。同一进程中的线程同步用关键段或者Slim读写锁就行,比互斥量要快。HADNLE CreateMutex(PSECURITY_ATTRIBUTES psa,BOOL bInitialOwner,PCTSTR pszName);bInitialOwner:FALSE:互斥量线程ID和递...原创 2020-02-05 14:45:15 · 459 阅读 · 0 评论 -
Slim读写锁
和关键段不同的是区分读入者线程和写入者线程。读和写共用一个锁,后边的条件变量触发条件也是一个锁占用锁的时间越少越好,如果被长时间占用,那么其他线程总是在被等待的状态,对程序性能有影响。SRWLOCK结构体 包含于头文件 <Windows.h>VOID InitializeSRWLock(PSRELOCK SRWLock); ...原创 2020-02-04 22:33:25 · 319 阅读 · 0 评论 -
Windows线程池函数
Windows提供给了一个与 完成端口 相配套的线程池机制。1.以异步的方式调用函数 //工作项2.每隔一段时间调用一个函数 //计时项3.在内核对象触发的时候调用一个函数 //等待项4.在异步I/O请求完成的时候调用一个函数 //I/O项1.以异步的方式调用函数创建一个工作项,分多次提交任务。...原创 2020-02-04 19:07:42 · 637 阅读 · 0 评论 -
Windows作业内核对象
微软提供了一个作业内核对象,它能够使我们对一组进程进行一些限制,同时创建一个只包含一个进程的作业也非常有用,因为能对该进程添加平时不能施加的作用。例如设计一个服务器时,也许客户端会请求服务器的一些应用程序处理一些数据并返回,因为许多的客户端都可能连接到这个服务器,所以服务器应该限制客户端能请求的东西,避免客户端的独占许多的资源。这些限制包括分配给客户端请求的最大CPU时间、最小工作集最大工作集大...原创 2020-01-29 16:46:40 · 603 阅读 · 0 评论 -
APC机制
当系统创建一个线程的时候,会同时创建一个与线程相关的队列。这个队列被叫做异步过程调用(APC)队列。为了对线程中的APC队列中的项进行处理,线程必须 将自己设置为可提醒状态,只不过意味着我们的线程在执行的时候已经到达了一个点,在这个点上它能够处理被中断的情况,下边的六个函数能将线程设置为可提醒状态:BOOL SleepEx();DWORD WaitForSingleObjectEx();...原创 2020-01-26 20:57:49 · 617 阅读 · 0 评论 -
原子锁操作(全部)
注:当时笔记收录有遗录,后三个函数回值都是原来的值。volatil限定符告诉编译器不要对这个变量进行任何形式的优化,而是始终的从变量的内存中读取变量的值。该变量可能被应用程序以外 的代码所修改,比如操作系统、硬件、或者一个并发执行的线程对其的值进行修改,就要使这个限定符。volatil BOOL V1=NULL;如果有的时候不给BOOL(假如)加上volatil限定,编译器可能...原创 2020-01-25 18:56:51 · 1387 阅读 · 0 评论 -
Windows等待函数的值得注意的地方
之前在用到等待函数的时候,总是认为等待一个事件、信号量等等,但是忽视了进程线程对象也是一个可以等待的内核对象。进程或者线程内核对象(其中有一个BOOL类型)在创建的时候总是处于未触发状态,当进程线程终止的时候,操作系统会将其设置为触发状态,而且决回不到未触发的状态,但是如果等待的是事件,事件可是可以回到未触发的状态。DWORD WaitForSingleObject(HANDLE hOBj...原创 2020-01-25 18:48:39 · 194 阅读 · 0 评论 -
伪句柄转化为真句柄的方法
线程和进程是一个道理。 GetCurrentThread()函数其实返回的是无穷大,对于该线程来说就是伪句柄,在该线程中可以用这个值操作作用于本线。当把GetCurrent()的值传给子线程的时候,实际上传的是伪句柄,那么在子线程中对父线程的操作实际上是对自己子线程的操作,因为子线程中也是自己的伪句柄。 1.所以先GetCurrentThreadId(...原创 2020-01-09 11:45:22 · 256 阅读 · 0 评论 -
屏蔽键盘信息(低级键盘钩子)
我以介绍如何屏蔽PrtSc(PrintScreen)截屏键为例,标题中说的低级键盘钩子(WH_KEYBOARD_LL)是因为普通键盘钩子(WH_KEYBOARD)是无法过滤像截屏键这样的系统按键,屏蔽系统按键回了其余的自然不在话下。在低级键盘钩子函数里判断这个消息是否属于PrintScreen按键,如果是,就直接返回TRUE之前在介绍Windows钩子函数的时候说过,想屏蔽消息的话就直接返回一...原创 2019-12-31 11:12:25 · 2156 阅读 · 0 评论 -
全局键盘钩子
这是在系统的范围内截获键盘消息,所以需要全局键盘钩子,全局键盘钩子需要DLL文件的支持,这样系统才能把DLL强行的加载到进程中去。建立一个新的DLL文件,在DllMain()函数所在的CPP中添加:定义两个全局变量:钩子句柄和DLL模块句柄。HHOOK g_Hook = NULL;HINSTANCE g_Instance = NULL;在DllMain函数中保存DLL模块句柄,安装...原创 2019-12-31 10:39:23 · 1997 阅读 · 0 评论 -
Windows钩子原理及钩子函数
钩子大概原理:Windows下的应用程序大部分是基于消息模式机制的,一些CUI程序(CUI是基于文本的,它一般不会创建窗口或者进程消息而且不需要GUi)不是基于消息的。Windows下的应用程序都有一个消息过程函数,通过GetMessage()函数在消息队列中得到不同的消息来完成不同的功能。Windows操作系统提供的钩子机制的作用是来截取、监视系统的消息。Windows操作系统提供了很多不同...原创 2019-12-31 09:56:52 · 2164 阅读 · 0 评论 -
PE文件结构-导入表详解
当PE文件运行时,PE文件将被系统加载进入内存中,此时Windows加载器会定位所有的导入的函数或者将定位到的内容填写到可执行文件的某个位置供使用,这个定位是需要借助于可执行文件的导入表来实现的。导入表中存放了所使用的DLL模块名称及导入函数的名称或者函数序列。在PE文件中定位到PE头部的可选头的位置,可选头IMAGE_OPTIONAL_HEADER中最后一个成员:IMAGE_DATA_DI...原创 2019-12-30 20:10:36 · 1623 阅读 · 0 评论 -
PE文件结构
PE,即移植的执行体。在Windows平台下,所有的可执行文件(包括EXE文件、DLL文件、SYS文件、COM文件)均使用PE文件结构。使用PE文件结构的可执行文件也成为PE文件。Windows系统下的可执行文件中包含着各种数据,包括代码、数据、资源等。虽然windows系统下的可执行文件包含如此众多的类型数据,但其存放都是有序的、结构化的、完全依赖于PE文件结构对各种数据的管理。1.MZ...原创 2019-12-25 22:15:37 · 317 阅读 · 0 评论 -
远程线程注入
声明一下:这里的技术在Win10中对于系统的应用例如自带的计算器、记事本已经不起作用(有反注入技术)了。当初一直在想如何向计算器中注入一直没有成功,然而对自己写的应用程序进程仍然可以使用。当然过程中的系统快照等知识还是必要的,只能说是了解一下并关注一下关于系统快照等知识就行了。这里的 远程线程,并不是指跨计算机的,而是跨进程的,简单地说就是进程A要在进程B中创建一个线程。无论是木马或...原创 2019-12-15 14:35:55 · 911 阅读 · 1 评论 -
DLL程序的创建和调用方法
DLL(动态链接库),是一种可以被其他应用程序调用的程序模块,其中封装了可以调用的资源或函数,一个DLL文件可以被多个进程调用。动态链接库是在exe文件运行的时候被加载执行的,动态链接库可以减少可执行文件的体积,在需要的时候进入内存,将软件划分为多个模块,可以按照模块进行开发,当然在网络安全方面可以进行对某个特定进程的DLL注入。DLL程序的入口函数不是main()或者WinMain()函数,...原创 2019-12-14 23:05:06 · 952 阅读 · 1 评论 -
简单的多线程编程
相关API函数介绍:函数:HANDLE OpenThread( DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwThreadId)作用:利用线程ID获得线程句柄dwDesiredAcess:打开进程欲获得大的权限,一般PROCESS_ALL_ACCESSbInheritHandle:获得的句柄是否可以继承,一般不:FALSEdwT...原创 2019-08-10 21:44:56 · 248 阅读 · 0 评论