随笔分类 -  Windows编程

摘要:本文分两种情况讨论,即在CreateThread之后是否调用WaitForSingleObject. 先看: static DWORD WINAPI ThreadCreateInDllMain(LPVOID) { printf("ThreadCreateInDllMain start"); retu 阅读全文
posted @ 2022-02-04 23:21 _No.47 阅读(1081) 评论(1) 推荐(2)
摘要:1、首先写个简单的DLL,用来验证 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCE 阅读全文
posted @ 2019-09-03 11:48 _No.47 阅读(2935) 评论(0) 推荐(0)
摘要:隐式使用工作项 通过结果观察发现,利用了线程池,输出并非有序: 显式地控制工作项 如果改为下面这样,则会报错: 因为据书上说,只能取消或等待本线程中的工作项。 阅读全文
posted @ 2018-05-28 09:07 _No.47 阅读(338) 评论(0) 推荐(0)
摘要:先举一个有bug的例子: 起初,我想要设置一个事件——g_hStop来通知线程,使得ThreadServer线程能够被主线程停止,但是这里出现了一个问题,如果我刻意让主线程Sleep2秒再去SetEvent,那么等待g_hStop的wait函数就会超时,从而往下继续执行等待Input,而此时主线程已 阅读全文
posted @ 2018-04-27 06:01 _No.47 阅读(302) 评论(0) 推荐(0)
摘要:下面起了两个线程,每个对一个全局变量加500次,不假思索进行回答,会认为最后这个全局变量的值会是1000,然而事实并不是这样: 然而运行多次、每次结果都不同,而且,几乎不会等于1000: 造成这种现象的原因很简单,就是g_nCount在进行自增的时候没有实现原子操作,g_nCount的本质其实是: 阅读全文
posted @ 2018-04-22 09:30 _No.47 阅读(240) 评论(0) 推荐(0)
摘要:其实就是做个实验,看看SetPriorityClass是否真的会生效。 设计思路:主线程一直在进行某种操作(这里是写文件操作),以保证有一定的CPU占用率;生成的子线程来接收你的命令,决定将进程改变为什么级别。 代码逻辑如下: 当启动这个线程和它的副本的时候,二者CPU占用率差不多: 现在调低188 阅读全文
posted @ 2018-04-14 09:06 _No.47 阅读(1068) 评论(0) 推荐(0)
摘要:第一次执行GetQueuedCompletionStatus返回6(JOB_OBJECT_MSG_NEW_PROCESS),表示将一个进程添加进一个作业;第二次执行GetQueuedCompletionStatus返回1(JOB_OBJECT_MSG_END_OF_JOB_TIME),表示作业超时; 阅读全文
posted @ 2018-04-02 04:31 _No.47 阅读(413) 评论(0) 推荐(0)
摘要:先写一个程序,用来查看进程的内核对象,这样我们就能比较子进程是否继承了父进程的某个句柄: 然后父进程就随便写一个,主要是为了创建三个命名内核对象,然后让子进程继承其中的两个: 验证结果 父进程创建的三个互斥量句柄: 然后再去查看子进程: 果然之继承了其中的1和3句柄。 阅读全文
posted @ 2018-03-10 08:44 _No.47 阅读(1174) 评论(0) 推荐(0)
摘要:本文借助windbg来理解程序中的函数如何使用handle对句柄表进行查询的。所以先要开启Win7下Windbg的内和调试功能。 解决win7下内核调试的问题 win7下debug默认无法进行内核调试(!process等命令无法使用),除非是双机调试。或改用livekd进行调试。 尝试http:// 阅读全文
posted @ 2018-02-25 08:39 _No.47 阅读(1828) 评论(0) 推荐(0)
摘要:ANSI和UNICODE 计算char和wchar_t的长度都一样,都是5,但是二者在内存中的布局实际上是不同的: 阅读全文
posted @ 2018-02-22 06:18 _No.47 阅读(264) 评论(0) 推荐(0)
摘要:GetLastError: GetLastError返回错误编码,即便出错函数后边跟随一个正确执行了的函数,也不会覆盖原先的错误代码: 考虑多线程的情况。子线程中的错误代码不会被主线程捕获: 但是子函数中发生的错误代码会被主函数捕获: 阅读全文
posted @ 2018-02-22 05:08 _No.47 阅读(367) 评论(0) 推荐(0)
摘要:security descriptor A structure and associated data that contains the security information for a securable object. A security descriptor identifies th 阅读全文
posted @ 2016-01-29 18:16 _No.47 阅读(1436) 评论(0) 推荐(0)
摘要:在StackOverflow中看到一个提问“what's the difference between DLL's and LIB's?” 有如下回复值得参考: 回复一: 回复二: There are static libraries (LIB) and dynamic libraries (DLL 阅读全文
posted @ 2016-01-28 15:04 _No.47 阅读(411) 评论(0) 推荐(0)
摘要:六、动态数据交换(Dynamic Data Exchange)动态数据交换(DDE)是使用共享内存在应用程序之间进行数据交换的一种进程间通信形式。应用程序可以使用DDE进行一次性数据传输,也可以当出现新数据时,通过发送更新值在应用程序间动态交换数据。DDE和剪贴板一样既支持标准数据格式(如文本、位图... 阅读全文
posted @ 2016-01-25 18:40 _No.47 阅读(492) 评论(0) 推荐(0)
摘要:二、文件映射文件映射(Memory-MappedFiles)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。 Win32API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这... 阅读全文
posted @ 2016-01-23 14:34 _No.47 阅读(507) 评论(0) 推荐(0)
摘要:一、管道管道(pipe)是用于进程间通信的共享内存区域。创建管道的进程称为管道服务器,而连接到这个管道的进程称为管道客户端。一个进程向管道写入信息,而另外一个进程从管道读取信息。异步管道是基于字符和半双工的(即单向),一般用于程序输入输出的重定向;命名管道则强大地多,它们是面向消息和全双工的,同时还... 阅读全文
posted @ 2016-01-19 20:42 _No.47 阅读(1177) 评论(0) 推荐(0)
摘要:线程同步三:事件CreateEvent:Creates or opens a named or unnamed event object.HANDLE WINAPI CreateEvent( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, _I... 阅读全文
posted @ 2016-01-15 09:44 _No.47 阅读(544) 评论(0) 推荐(0)
摘要:先介绍一个创建线程的API,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspxCreates a thread to execute within the virtual add... 阅读全文
posted @ 2016-01-12 20:53 _No.47 阅读(380) 评论(0) 推荐(0)
摘要:转载请声明出处:http://www.cnblogs.com/predator-wang/p/5076681.html5. 无DLL注入(远程代码注入)在第三中方法种,我们启动远程线程时,线程函数是我们从Kernel32.dll中取得的LoadLibrary函数的地址为线程函数的地址,其实我们可以直... 阅读全文
posted @ 2015-12-25 18:20 _No.47 阅读(758) 评论(0) 推荐(0)
摘要:转载请声明出处:http://www.cnblogs.com/predator-wang/p/5076279.html3. 利用远程线程注入DLL 1)、取得远程进程的进程ID; 2)、在远程进程空间中分配一段内存用来存放要注入的DLL完整路径; 3)、将要注入的DLL的路径写到刚才分配的远程进程空... 阅读全文
posted @ 2015-12-25 16:21 _No.47 阅读(2747) 评论(0) 推荐(0)