C/win32API
文章平均质量分 67
QQ276592716
这个作者很懒,什么都没留下…
展开
-
关于bind函数~
MSDN中的bind int bind ( SOCKET s, const struct sockaddr FAR* name, int namelen );关注第二个参数The SOCKADDR structure varies depending on the pr原创 2011-06-18 00:24:00 · 9665 阅读 · 5 评论 -
VS与Win7共舞:系统服务的Session 0隔离
隔离,是为了更好的保护。但是,众所周知的,隔离也会给我们的生活带来一些不便。在Windows 7中,操作系统服务的Session 0隔离,阻断了系统服务和用户桌面进程之间进行交互和通信的桥梁。通过Session 0隔离,虽然可以让操作系统更加安全,但是也给系统服务带来了不少兼容性的问题。 系统服务在Windows 7上遇到的问题 操作系统服务是Windows操作系统转载 2012-09-14 21:44:54 · 1178 阅读 · 0 评论 -
替代goto的代码~
以前一直支持goto语句的,因为它的单一出口,使得程序在执行的过程中如果出现意外情况可以直接跳到某个地方进行统一的资源释放。最近看cocosd-x代码中,发现了一种写法,也证明了之前教科书上面说的不要用goto语句的言论。do{//BREAK_IF(XXX) BREAK_IF 为某个跳出while的宏}while(0)总结:代替goto语句的方法:巧妙的利用while的特性原创 2013-05-06 22:26:49 · 1791 阅读 · 0 评论 -
WRK-NtOpenProcess 的流程草图~
NTSTATUSNtOpenProcess ( __out PHANDLE ProcessHandle, __in ACCESS_MASK DesiredAccess, __in POBJECT_ATTRIBUTES ObjectAttributes, __in_opt PCLIENT_ID ClientId ) /*++ Routin原创 2013-07-08 00:22:31 · 880 阅读 · 0 评论 -
SPFA算法
【算法流程】算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了每个点不会更新次数太多的特点发明的此算法SPFA——Shortest Path Faster Algorithm,它可以在转载 2013-08-22 11:30:16 · 724 阅读 · 0 评论 -
Linux下的I/O
Linux的I/O机制经历了一下几个阶段的演进:(1)同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。(2)同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。(3)异步阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数转载 2014-02-21 16:50:18 · 762 阅读 · 0 评论 -
使用异步过程调用(APC)实现模块注入
摘自:windows编程循序渐进 异步过程调用是一种能在特定线程环境中异步执行的系统机制。往线程APC队列添加APC,系统会产生一个软中断。在线程下一次被调度的时候,就会执行APC函数,APC有两种形式,由系统产生的APC称为内核模式APC,由应用程序产生的APC被称为用户模式APC。 每个线程都拥有自己的APC队列。应用程序可以使用函数把APC添加到指转载 2014-02-13 19:40:07 · 767 阅读 · 0 评论 -
windows下捕获dump
一般要捕获异常只需要两个函数:SetUnhandledExceptionFilter截获异常;MiniDumpWriteDump写dump文件。但是由于CRT函数可能会在内部调用SetUnhandledExceptionFilter(NULL),解除我们程序设置的异常处理,这导致我们的程序无法完整捕获崩溃。另外,还有一部分非异常的CRT错误,不属于SEH异常捕获的范畴,需要通过_set_inval转载 2014-08-10 19:48:18 · 810 阅读 · 0 评论 -
Coroutines in C
by Simon TathamIntroductionStructuring a large program is always a difficult job. One of the particular problems that often comes up is this: if you have a piece of code producing data, and anothe转载 2014-12-20 21:26:24 · 883 阅读 · 0 评论 -
分析memcached源代码
本文针对memcached 1.21 for windows(主要原因是Linux实在缺乏一种简单易用的C++ IDE,使用gdb调试我会发疯的,code::block挺不错的,但是感觉还是不如VC,我非常喜欢VC/VS的调试功能,其中几个特性包括随便拖变量到watch窗口,在watch窗口可以编辑被观察的变量,鼠标悬停时显示变量的值。这几个特性是我希望一个调试器所应该必备的),其源代码可在htt转载 2012-03-22 17:04:09 · 2064 阅读 · 0 评论 -
算法导论中的快速排序C源码~
看了网上很多的快速排序代码,都是前后扫描改分割位的。看了算法导论,顺其思路的C代码~#include int a[8]={3,5,4,8,1,2,0,7};void quicksort(int* a,int p,int r){ int q; if (p<r) { q=partition(a,p,r); quicksort(a,p,原创 2012-03-12 21:02:45 · 964 阅读 · 1 评论 -
Invalidate与UpdateWindow
void Invalidate( BOOL bErase = TRUE ); 该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。转载 2011-06-19 18:40:00 · 823 阅读 · 0 评论 -
数据对齐与poppack.h~
1. 为什么要对齐?以32位的CPU为例(16,64位同 ),它一次可以对一个32位的数进行运算,它的数据总线的宽度是32位,它从内存中一次可以存取的最大数为32位,这个数叫CPU的字(word)长。在进行硬件设计时,将存储体组织成32位宽,如每个存储体的宽度是8位,可用四块存储转载 2011-07-13 15:12:43 · 1735 阅读 · 0 评论 -
printf的实现原理~(猜测)
printf的实现原理应该是这样的:(猜测)常用类型的switch语句,对应%d等,获取指定大小,到堆栈取数,获取数值进行参数%+字符的替换,最后将替换后的字符显示出来。原创 2011-09-07 22:55:52 · 944 阅读 · 0 评论 -
关于WSADuplicateSocket的理解~(整理)
WSADuplicateSocket这个函数网上有少部分人问它的用法,其实它就是Copyint WSADuplicateSocket( __in SOCKET s, __in DWORD dwProcessId, __out原创 2011-09-08 15:07:32 · 6232 阅读 · 3 评论 -
PostMessage函数和SendMessage函数的使用
这两个函数可以用于不同应用程序之间互发消息,PostMessage函数是把一个消息放到其他程序等的消息队列中,目标程序收到了这条消息就把它放入该程序的消息队列中去处理;而SendMessage函数则越过消息队列直接调用目标程序的窗口过程,窗口过程返回后才从SendMessage函转载 2011-09-11 12:32:50 · 1168 阅读 · 0 评论 -
关于fflush(stdin)的误区
1. 为什么fflush(stdin) 是错的首先请看以下程序: #include int main( void ){ int i; for (;;) { fputs("Plea转载 2011-08-18 11:49:16 · 2346 阅读 · 1 评论 -
stdarg.h中三个宏va_start ,va_arg和va_end
#include #include const int N=5;using namespace std; void Stdarg(int a1,...){ va_list argp; int i; int ary[N]; va_start(argp,a1); ary[0]=a1; for(i=1;i转载 2011-12-19 16:03:18 · 654 阅读 · 1 评论 -
关于C/C++运行库编译出来的程序的运行过程~
今天看了一个软件,逆向了它的流程,里面的算法部分很复杂,跟了几个就跟不下去了,很多需要动态调试才行。根据里面的API已经自己对启动过程的了解,总结了这一类型(带C/C++运行库的)的软件的执行过程~1.创建堆2.获取CPU信息3.格式化时间4.分配堆,初始化I/O,其中完成一些必要的句柄的操作5.获取命令行参数6.获取环境变量7.全局变量的构造函数调用8.main函原创 2011-12-27 20:46:42 · 594 阅读 · 0 评论 -
redis时间处理的bug
redis 3.0int aeProcessEvents(aeEventLoop *eventLoop, int flags)中以最小时间阻塞在 // 处理文件事件,阻塞时间由 tvp 决定 numevents = aeApiPoll(eventLoop, tvp);但是aeCreateTimeEvent中在添加时间事件的时候并没有做任何的处理如原创 2015-11-29 00:00:02 · 1158 阅读 · 0 评论