- 博客(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
TCP/IP卷3:TCP事务协议、HTTP、NNTP 带书签高清版
2018-01-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人