自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (4)
  • 收藏
  • 关注

原创 Windows核心编程--事件内核对象

事件的触发表示一个操作已经完成,有两种不同类型的事件对象,手动重置事件和自动重置事件。当一个手动重置事件被触发的时候,正在等待该事件的所有线程都将变成可调度的。当一个自动重置事件触发的时候,只有一个正在等待该事件的线程会变成可调度状态。下面是事件内核对象的简单应用。//事件内核对象 HANDLE g_hEvent;UINT WINAPI WordCount(PVOID pvParam)

2018-01-30 19:59:28 189

原创 Windows核心编程--线程同步--读写锁

SRWLOCK的目的和关键段相同,对一个资源进行保护,不让其他线程进行访问。与关键段不同的是,SRWLOCK允许我们区分那些想要读取资源的值的线程和想要更新资源的值的线程。       和关键段一样,想用读写锁首先需要分配一个SRWLOCK结构并用InitializeSRWLock函数对它进行初始化,VOID  InitializeSRWLock( PSRWLOCK SRWLock );

2018-01-30 19:48:05 832

原创 Windows核心编程--线程同步--关键段

InterLocked系列函数对变量进行原子操作,执行得几块,通常只占用几个CPU周期(小于50),不需要再用户模式和内核模式之间切换,这个切换通常需要占用1000个周期以上。InterLockedExchangeAdd既可以做加法也可以做减法。LONG InerLockedExchange( PLONG volatile plTarget, LONG lValue )该函数会把第一个

2018-01-29 13:25:05 194

原创 Windows核心编程--线程调度1

每个线程内核对象都有一个CONTEXT上下文结构体,该结构体用来记住线程的运行状态,这样在下一次获得CPU的时间片时,就可以从上次停止处继续运行。CONTEXT分别是以下几部分:1、CONTEXT_CONTROL  CPU的控制寄存器,比如指令指针、栈指针、标志以及函数返回地址。2、CONTEXT_INTEGER 标识CPU的整数寄存器;3、CONTEXT_FLOATING_POI

2018-01-28 17:14:58 164

原创 Windows核心编程-线程基础

Windows创建的线程的函数是:HANDLE CreateThread(PSECURITY_ATTRIBUTES  psa,DOWRD  cbStackSize,PTHREAD_START_ROUTINE pfnStartAddr,PVOID  pvParam,DWORD  dwCreateFlag,PDWORD  pdwThreadID);psa是指向结构体SE

2018-01-28 15:41:16 145

原创 Windows核心编程-作业

Windows提供了作业内核对象,允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么,最好将作业对象想象成一个进程容器。作业的创建过程如下:VOID StartRestrictedProcess(VOID){BOOL bInJob = FALSE;IsProcessInJob(GetCurrentProcess(), NULL, &bInJob);//判断当前的进程是否

2018-01-28 14:41:48 947

原创 Windows核心编程--进程创建与进程退出

CreateProcess函数的原型如下:BOOL CreateProcess ( PCTSTR pszApplicationName,PTSTR pszCommandLine,PSECURITY_ATTRIBUTES psaProcess,PSECURITY_ATTRIBUTES psaThread,BOOL bInheritHandles,DWORD fdwCrea

2018-01-27 19:33:40 1859

原创 Windows核心编程 --进程环境变量

进程一般可定义为:一个内核对象,操作系统用它来管理进程;一个地址空间,包含dll、exe以及动态分配的内存。GetModuleHandle(PCTSTR pszModule)函数可以知道一个可执行文件或者DLL被加载到进程地址空间的什么位置,pszModule字符串需要以0为终止符,该参数指定了已在主调进程的地址空间中加载的一个可执行文件或DLL文件的名称,如果找到,返回基地址,没有找到的话返

2018-01-27 17:28:14 594

原创 Windows核心编程--内核对象

1、安全描述符的结构体,创建内核对象的函数通常都需要初始化该结构体。typedef struct  _SECURITY_ATTRIBUTES{DWORD  dwLength;LPVOID  lpSecurityDescriptor;BOOL   bInheritHandle;}SECURITY_ATTRIBUTES;2、创建内核对象的函数不是全部都返回NULL或者I

2018-01-26 17:14:26 158

原创 Windows核心编程--字符编码

1、UTF-16将每个字符编码为2个字节,UTF-16能改进性能和减少内存消耗,Windows默认采用UTF-16编码;2、UTF-8 值在0x0080以下的字符压缩为1个字节,0x0080和0x07FF之间的字符转换为2个字节,0x0800以上的都转换为3个字节,对0x0800以上的字符编码时,不如UTF-16高效;3、UTF-32将每个字符都编码为4个字节。4、typedef   

2018-01-26 16:02:38 226

原创 Windows核心编程 -- 错误处理

DWORD GetLastError( )函数是用来返回由上一个函数调用设置的线程32位错误代码,WinError.h头文件里包含了Microsoft定义的错误代码,如下所示:#define ERROR_SUCCESS 0L#define NO_ERROR 0L

2018-01-26 14:49:19 375

原创 Linux内核源代码循环链表移植windows

最近,在看linux的源代码,其中,发现Linux的链表设计地非常漂亮,把数据和结构分离,从而能支持一个链表的节点可以放任意类型的数据结构。该文件可以是list.h头文件。#ifndef LIST_H#define LIST_H#define LIST_POISON1 ((void *) 0x00100100)#define LIST_POISON2 ((void *) 0x00200...

2018-01-17 16:43:01 185

原创 初识Makefile:学习笔记

IDE用的多了,对于Makefile为何物,真是一知半解,对于Linux或者Unix上的开发,Makefile是必须用到的,今天对Makefile初步学习了一下,并且写了一个helloword程序。这是我工程目录下的文件列表,每个文件里面的内容很简短。cmain.c main函数里PrintSeg都是根据参数选择打印出多少的helloword,运行结果如下:讲到这里,全是铺垫,现在我们看看我自己的...

2018-01-08 11:29:04 179

valgrind调试教程

valgrind里有很多工具,常用的有memcheck工具,能够帮助我们检查程序的内存泄漏问题,还有一些变量未初始化的问题等等。

2018-03-20

TCP/IP卷3:TCP事务协议、HTTP、NNTP 带书签高清版

《TCP.IP详解(卷3):TCP事务协议.HTTP.NNTP和UNIX域协议》是“TCP/IP详解系列”的延续。主要内容包括:TCP事务协议是对TCP的扩展,使客户-服务器事务更快、更高效和更可靠;TCP/IP应用,主要是HTTP和NNTP;UNIX域协议,这些协议提供了进程之间通信的一种手段。当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍。《TCP.IP详解(卷3):TCP事务协议.HTTPP.NNTP和UNIX域协议》同样采用了大量的实例和实现细节,并参考引用了卷2中的大量源程序。适用于希望理解TCP/IP如何工作的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员

2018-01-08

TCP/IP卷2:实现

用代码描述了TCP/IP四层模型中各个协议的实现细节,网络编程相关工作需要用到。

2018-01-07

TCP/IP卷一:协议

描述TCP四层模型 链路层 网络层 传输层 及应用层中各个协议怎么协调工作的。

2018-01-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除