Windows核心编程 第十二章 纤程】的更多相关文章

第1 2章 纤 程 M i c r o s o f t公司给Wi n d o w s添加了一种纤程,以便能够非常容易地将现有的 U N I X服务器应用程序移植到Wi n d o w s中.U N I X服务器应用程序属于单线程应用程序(由 Wi n d o w s定义) ,但是它能够为多个客户程序提供服务.换句话说, U N I X应用程序的开发人员已经创建了他们自己的线程结构库,他们能够使用这种线程结构库来仿真纯线程.该线程包能够创建多个堆栈, 保存某些C P U寄存器,并且在它们之间进行切…
Github https://github.com/gongluck/Windows-Core-Program.git //第12章 纤程.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第12章 纤程.h" LPVOID g_Covert = nullptr; DWORD g_index = 0; VOID WINAPI FiberFun(LPVOID lpFiberParameter) { //纤程参数 LPV…
第1 5章 在应用程序中使用虚拟内存 Wi n d o w s提供了3种进行内存管理的方法,它们是: • 虚拟内存,最适合用来管理大型对象或结构数组. • 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据. • 内存堆栈,最适合用来管理大量的小对象. 本章将要介绍第一种方法,即虚拟内存.内存映射文件和堆栈分别在第 1 7章和第1 8章介绍.用于管理虚拟内存的函数可以用来直接保留一个地址空间区域,将物理存储器(来自页文件)提交给该区域,并且可以设置…
第1 9章 D L L基础 这章是介绍基本dll,我就记录一些简单应用,dll的坑点以及扩展后面两章会说,到时候在总结. 自从M i c r o s o f t公司推出第一个版本的Wi n d o w s操作系统以来,动态链接库(D L L)一直是这个操作系统的基础. Windows API中的所有函数都包含在 D L L中.3个最重要的 D L L是K e r n e l 3 2 . d l l,它包含用于管理内存.进程和线程的各个函数: U s e r 3 2 . d l l,它包含用于执行…
第1 4章 虚 拟 内 存 <这一章没啥,是说的几个内存相关的函数 > 14.1 系统信息 许多操作系统的值是根据主机而定的,比如页面的大小,分配粒度的大小等.这些值决不应该用硬编码的形式放入你的源代码.相反,你始终都应该在进程初始化的时候检索这些值,并在你的源代码中使用检索到的值.G e t S y s t e m I n f o函数将用于检索与主机相关的值:VOID WINAPI GetSystemInfo(_Out_ LPSYSTEM_INFO lpSystemInfo); 必须传递S …
本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑定的技术. 第一种将DLL映射到进程地址空间的方式是直接在源代码中引用DLL中所包含的函数或是变量,DLL在程序运行后由加载程序隐式的载入,此种方式被称为隐式链接. 第二种方式是在程序运行时,通过调用API显式的载入所需要的DLL,并显式的链接所想要链接的符号.换句话说,程序在运行时,其中的一个线程能够显式的将该DLL调用到进程地址空间中,并得到DLL中某函数的在进程地址空间的虚拟地址,然后调用该函数.此种方式被称为显式链接. 注意:显…
Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核对象,操作系统用它管理线程.系统还用内核对象来存储线程统计信息 ②    一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量. 线程 == 内核对象 + 线程栈; 进程是有惰性的,CPU调度是线程,进程永远不会被调度,进程好比一个公司,线程就是每个干活的业务部门. 进程可以看作是线程的容器(…
http://blog.csdn.net/ithzhang/article/details/7916732转载请注明出处!! 第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也就是说每个字符编码为两个字节.65535个字符可以表示世界上大部分的语言.为了软件使国际化大家再编程时应该使用unicode字符集.由于原来学过c语言,不习惯使用Un…
Github https://github.com/gongluck/Windows-Core-Program.git //第4章 进程.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第4章 进程.h" #include <shellapi.h> #pragma warning(disable:4996)//GetVersionEx int APIENTRY wWinMain(_In_ HINSTAN…
每个DLL和可执行文件都有一个首选基地址.它表示该模块被映射到进程地址空间时最佳的内存地址.在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000.对于DLL来说,链接器会将它的首选基地址设为0x10000000,然后将该地址以及代码.数据的相关地址都写入它们的PE文件中.当它们被加载时,加载程序读取首选基地址的值,并试图把它们加载到相应位置. 对于可执行文件和DLL中的代码,它们运行的时候所引用的的数据的地址,在链接的时候就已经确定.并且这些都是当exe文件或是DLL被加载…
一个模块的导入段包含一组DLL.为了让模块能够运行,这些DLL是必须的.导入段还包含一个符号表.它列出了该模块从各DLL中导入的符号.当模块调用这些导入符号的时候,系统实际上会调用转换函数,获得导入函数在导入表的地址,然后再跳到相应的位置.如果我们能将导入段中相应导入函数的地址替换成自定义的函数的地址,即可实现对该函数的拦截.在自定义的函数中,我们既可以调用拦截的函数,也可以执行其他工作. 要实现修改导入段来拦截API必须对PE文件格式有很好的了解.网上关于它的资料铺天盖地,自己搜吧.此处不打算…
Github https://github.com/gongluck/Windows-Core-Program.git //第14章 探索虚拟内存.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第14章 探索虚拟内存.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lp…
第1 8章 堆 栈 对内存进行操作的第三个机制是使用堆栈.堆栈可以用来分配许多较小的数据块.例如,若要对链接表和链接树进行管理,最好的方法是使用堆栈,而不是第 1 5章介绍的虚拟内存操作方法或第1 7章介绍的内存映射文件操作方法.堆栈的优点是,可以不考虑分配粒度和页面边界之类的问题,集中精力处理手头的任务.堆栈的缺点是,分配和释放内存块的速度比其他机制要慢,并且无法直接控制物理存储器的提交和回收. 从内部来讲,堆栈是保留的地址空间的一个区域.开始时,保留区域中的大多数页面没有被提交物理存储器.当…
Github https://github.com/gongluck/Windows-Core-Program.git //第11章 Windows线程池.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第11章 Windows线程池.h" VOID NTAPI SimpleCB( _Inout_ PTP_CALLBACK_INSTANCE Instance, _Inout_opt_ PVOID Context )…
Github https://github.com/gongluck/Windows-Core-Program.git //第7章 线程调度.优先级和关联性.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第7章 线程调度.优先级和关联性.h" //线程函数 DWORD WINAPI ThreadProc(PVOID param) { return 0; } int APIENTRY wWinMain(_In_ H…
Github https://github.com/gongluck/Windows-Core-Program.git //第6章 线程基础.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第6章 线程基础.h" #include <process.h> //线程函数 DWORD WINAPI ThreadProc(PVOID param) { return 0; } unsigned __stdcal…
Github https://github.com/gongluck/Windows-Core-Program.git //第5章 作业.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第5章 作业.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _…
未处理异常和C + +异常(上) 前一章讨论了当一个异常过滤器返回 E X C E P T I O N _ C O N T I N U E _ S E A R C H时会发生什么事情.返回EXCEPTION_CONTINUE_SEARCH 是告诉系统继续上溯调用树,去寻找另外的异常过滤器.但是当每个过滤器都返回E X C E P T I O N _ C O N T I N U E _ S E A R C H时会出现什么情况呢?在这种情况下,就出现了所谓的"未处理异常"(Unhandle…
异常处理程序和软件异常 C P U引发的异常,就是所谓的硬件异常(hardware exception).操作系统和应用程序 也可以引发相应的异常,称为软件异常(software exception). 当出现一个硬件或软件异常时,操作系统向应用程序提供机会来考察是什么类型的异常被引发,并能够让应用程序自己来处理异常.下面就是异常处理程序的文法: 注意- - e x c e p t关键字.每当你建立一个t r y块,它必须跟随一个f i n a l l y块或一个e x c e p t块.一个t…
(一)身份验证和授权 安全性的两个基本支柱是身份验证和授权.身份验证是标识用户的过程,授权在验证了所标识用户是否可以访问特性资源之后进行的. 1.标识和Principal 使用标识可以验证运行应用程序的用户.Principal是一个包含用户的标识和用户所属角色的对象. AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); var principal = WindowsPrincipal.Curr…
Github https://github.com/gongluck/Windows-Core-Program.git //第10章 同步设备IO与异步设备IO.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第10章 同步设备IO与异步设备IO.h" //可提醒IO回调 VOID WINAPI funComplete( _In_ DWORD dwErrorCode, _In_ DWORD dwNumberOfBy…
Github https://github.com/gongluck/Windows-Core-Program.git //第1章 错误处理.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第1章 错误处理.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLin…
Github https://github.com/gongluck/Windows-Core-Program.git //第13章 内存体系结构.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第13章 内存体系结构.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lp…
Github https://github.com/gongluck/Windows-Core-Program.git //第9章 用内核对象进行线程同步.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第9章 用内核对象进行线程同步.h" #include <Wct.h> DWORD WINAPI Thread(PVOID param) { Sleep(2000); return 0; } HANDL…
Github https://github.com/gongluck/Windows-Core-Program.git //第8章 用户模式下的线程同步.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第8章 用户模式下的线程同步.h" LONG g_i = 100; LONG g_b = FALSE; CRITICAL_SECTION g_cs; //关键段 SRWLOCK g_rw; //读写锁 CONDITI…
Github https://github.com/gongluck/Windows-Core-Program.git //第3章 内核对象.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第3章 内核对象.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLin…
Github https://github.com/gongluck/Windows-Core-Program.git //第2章 字符和字符串处理.cpp: 定义应用程序的入口点. // #include "stdafx.h" #include "第2章 字符和字符串处理.h" #include "StrSafe.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTA…
隐式使用工作项 #include <iostream> #include <windows.h> ; VOID NTAPI SimpleCallback(PTP_CALLBACK_INSTANCE pInstance, PVOID pvContext) { g_nCount++; printf("test:%d\n", g_nCount); } void main() { ; PTP_SIMPLE_CALLBACK pFunc = SimpleCallback;…
其实就是做个实验,看看SetPriorityClass是否真的会生效. 设计思路:主线程一直在进行某种操作(这里是写文件操作),以保证有一定的CPU占用率:生成的子线程来接收你的命令,决定将进程改变为什么级别. 代码逻辑如下: #include <iostream> #include <windows.h> #include <tchar.h> #include <process.h> #include <fstream> using names…
#include <windows.h> #include<iostream> #include <tchar.h> using namespace std; typedef struct ThreadParam{ HANDLE hIOCP; DWORD dwNumBytesTransferred; ULONG CompletionKey; LPOVERLAPPED pOverlapped; DWORD dwTimeOut; }*pThreadParam; void M…