Windows核心编程笔记之作业】的更多相关文章

创建作业,并加以限制 HANDLE WINAPI CreateJob() { BOOL IsInJob = FALSE; DWORD ErrorCode = NULL; // 不能将已经在作业中的进程及子进程放入其他作业中,IsProcessInJob 用于判断进程是否在作业中 IsProcessInJob(GetCurrentProcess(), NULL, &IsInJob); if (IsInJob == TRUE) { // 返回错误代码 ErrorCode = GetLastError…
0x01 ANSI 和宽字符定义 // ANSI 字符定义 CHAR varChar_1 = 'a'; // #typedef char CHAR CHAR varChar_2[] = "ABCDEFG"; CHAR varChar_3[20] = "ABCDEFG"; // 宽字符定义 WCHAR varWChar_1 = L'a'; // #typedef wchar_t WCHAR WCHAR varWChar_2[] = L"ABCDEFG&quo…
改变进程基址,获取进程基址 #include <Windows.h> #include <iostream> #include <strsafe.h> #include <STDLIB.H> using namespace std; #pragma comment(linker, "/BASE:0x400000") // 改变进程加载机地址 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE…
0x01 子进程继承父进程内核对象句柄 父进程 #include <Windows.h> #include <iostream> #include <strsafe.h> using namespace std; /* 父进程用于模拟子进程通讯,向子进程传递内核对象 */ int main(int argc, char *argv[]) { /* 创建一个内核对象 */ SECURITY_ATTRIBUTES KerObjSec = { 0 }; KerObjSec.b…
0x01 GetLastError() 函数用于获取上一个操作的错误代码 #include <Windows.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { HANDLE nFile = CreateFile(TEXT("D:\\noknow.txt"), 0, 0, NULL, OPEN_EXISTING, 0, NULL); DWORD error…
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的.开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯. 海量细节. 第1章    错误处理 1.         GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖. 2.         GetLas…
转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔记":   关键词:c++windows 核心 编程 读书笔记   这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和windows实际机制可能有出入,但应该是合理的.开头几章由于我…
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入,但应该是合理的.开头几章由于我追求简洁,往往是很多单独的字句,后面的内容更为连贯. 海量细节. 第1章    错误处理 1.         GetLastError返回的是最后的错误码,即更早的错误码可能被覆盖. 2.         GetLastError可能用于描述成功的原因(CreatEvent)…
小续 这是我11年看<windows核心编程>时所作的一些笔记,现整理出来共享给大家 windows核心编程整理(上) windows核心编程整理(下) 线程的基础知识 进程是不活泼的,进程从来不执行任何东西,进程只是线程的容器 线程用于描绘进程中的运行路径 每个进程必须拥有一个进入点函数,线程从这个进入点开始运行 线程的退出代码在线程的内核对象中维护 进程由进程内核对象和地址空间组成 线程由线程内核对象和线程堆栈组成 大多数线程拥有的所有用户对象是由包含创建这些对象的线程的进程拥有的,但是,…
使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步也存在缺点.如InterLocked系列函数只能对一个值进行操作.关键段虽然可以对一段代码进行操作,但是只能对同一个进程内的线程进行同步.为了解决上述问题,我们将会讨论使用内核对象进行线程同步. 与用户模式下的速度快相比较,使用内核对象进行线程同步性能很低.原因就是:在创建或清除内核对象时调用线程必…
storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 发布 GPLv3 许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html 本文档根据GNU Free Documentation License 1.3发布 GFDL1.3许可证的副本可以在这里获得:http:/…
看<windows 核心编程> 第五版到纤程了,下一章节即将介绍内存体系编程.如果做window平台下的开发,我感觉此书一定要读.记得开始讲解了window的基础,然后讲解内核对象.内核对象包括,进程,作业,线程,事件,临界点,互斥体等.个人认为还是比较详细,里面的内容无法详细的说出,强烈window下开发的读完次数,今天晚上开启内存体系阅读,希望自己认认真真的读完此书,可能以后不做window平台的开发,但也能有增长只是.只是读书读的太慢,从七月份到12月份,才读了一半,可能最近比忙的原故吧…
学习资源:<Windows核心编程>第5版 知识基础支持: 本书与<Windows程序设计>第5版珍藏版结合很好,二者重叠内容不多,二者互补性强,而且相关方面的优秀书籍 跳过的内容: 1. 知识要点: 1:第189页的的实例程序SchedLab很不错,设计ComboBox.ListBox.控件的操作函数,窗口句柄与控件句柄的获取与查找,伪句柄的转换.消息循环.高精度记时.64位数字的合成.数字转换成(无需释放的)指针资源.字符串格式化.Sleep以及判断一个数是否在某个范围内的宏,…
Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核对象,操作系统用它管理线程.系统还用内核对象来存储线程统计信息 ②    一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量. 线程 == 内核对象 + 线程栈; 进程是有惰性的,CPU调度是线程,进程永远不会被调度,进程好比一个公司,线程就是每个干活的业务部门. 进程可以看作是线程的容器(…
python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗余输出(导入语句详细追踪) 1.5 –m mod 将一个模块以脚本形式运行 1.6 –Q opt 除法选项(参阅文档) 1.7 –c cmd 运行以命令行字符串心事提交的python脚本 1.8 file   以给定的文件运行python脚本 2 _在解释器中表示最后…
看到windows核心编程 第5章的最后一节,发现job lab例子程序不能在我的系统(win8下)正常运行,总是提示“进程在一个作业里”         用process explorer程序查看 于是我找到   例子程序源码的这段判断程序,注释后编译运行   终于进了程序的界面   可是我认为这不是一个好的解决方案   于是去看书的123页下面到124页上的那段话   果然在程序已经关联了作业对象   但是最后,书上说到,一个简单的解决方案是从命令行而不是windows资源管理器中启动调试器…
线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTimer).信标内核对象(Semaphore).互斥内核对象(Mutex). 一.用户模式: 1.1.原子操作 原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它是最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念. 原子操作需要硬件的…
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很好的一种方式. 线程是我们开发高性能.响应性好的一个必不可少的工具.这样在多处理器上就可以同时执行多个操作,从而提高吞吐量.当线程发出一个同步设备IO请求的时候,它会被临时挂起,直到设备完成IO请求为止.但线程阻塞会损害性能,这里有个问题是我们如何让线程不被挂起. 让线程始终进行有用的工作就需要它们…
    使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也就是说每个字符编码为两个字节.65535个字符可以表示世界上大部分的语言.为了软件使国际化大家再编程时应该使用unicode字符集.由于原来学过c语言,不习惯使用Unicode,为了省事而直接在配置属性里调为多字节字符集,这是个不好的习惯.C语言的字符串,以及对这些字符串操作的函数都是不安全的.很容易导致缓冲…
Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ①    需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ②    一个线程需要通知其他线程某项任务已经完成 2. 原子访问 所谓原子访问就是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源. CPU一个最小操作单位并不是一条编程语言指令,所以即使在线程中只有一行赋值语句,在CPU看来却不是一条语句,所以如果两个线程中有同样的一行赋值语句,那么也可能会发生不可预料的…
线程同步的方式主要有:临界区.互斥区.事件.信号量四种方式. 前边讲过了互斥器线程同步-----windows核心编程-互斥器(Mutexes),这章我来介绍一下信号量(semaphore)线程同步. 理论上说,mutex是semaphore的一种退化.如果你产生一个semaphore并令最大值为1,那就是一个mutex.也因此,mutex又常被称为binary semaphore.如果某个线程拥有一个binary semaphore,那么就没有其他线程能够获得其拥有权.但是在win32中,这两…
http://blog.csdn.net/ithzhang/article/details/7916732转载请注明出处!! 第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也就是说每个字符编码为两个字节.65535个字符可以表示世界上大部分的语言.为了软件使国际化大家再编程时应该使用unicode字符集.由于原来学过c语言,不习惯使用Un…
一个Windows函数通常都有一个有意义的返回值类型,它标志着这个函数的运行状态,即函数运行成功与否.windows常用的函数类型如下图: 从系统内部来讲,当一个Windows函数检测到一个错误时,它会使用一个成为线程本地存储器(thread-local storage)的机制,将相应的错误代码号码与调用的线程关联起来.因此线程之间能够相互独立地运行,而不会影响各自的错误代码.若要确定函数返回值指明的错误,可以调用GetLastError函数.然而该函数只返回线程的32位错误代码.因为该函数得到…
windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功能.所谓的指定窗体并不局限于当前进程的窗体,也能够是其它进程的窗体.当监视的某一消息到达指定的窗体时,在指定的窗体处理消息之前,钩子函数将截获此消息,钩子函数既能够加工处理该消息,也能够不作不论什么处理继续传递该消息.使用钩子是实现dll注入的方法之中的一个.其它经常使用的方法有:注冊表注入,远程线…
注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <tchar.h> #include <windowsx.h> #include <StrSafe.h> #include <process.h> #include "resource.h" /*****************************…
目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 Unicode标准包含的对照表. 2.Ansi字符与Unicode字符的字符串数据类型 2.1.Ansi 与 Unicode数据类型 2.2添加的新的数据类型 2.3 TEXT()宏的使用 3.Windows中的Unicode与Ansi函数 3.1 对于Com接口的移植 4.C 运行库中的Unicod…
Windows核心编程第一章,错误处理. 一丶错误处理 1.核心编程学习总结 不管是做逆向,开始做开发.在Windows下.你都需要看一下核心编程这本书.这本书确实写得很好.所以自己在学习这本书的同时,也把自己所学的知识进行 总结,以及巩固. 2.常见的Windows函数返回类型总结 数据类型 作用 VOID 如果是Void表示函数不可能失败.极少数windows函数会返回void BOOL 表示这个函数会有失败情况.0失败.否则就是非0.但是一般都会使用TRUE FALSE来判断. HANDL…
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…
线程同步的方式主要有:临界区.互斥区.事件.信号量四种方式. 前边讲过了临界区线程同步-----windows核心编程-关键段(临界区)线程同步,这章我来介绍一下互斥器(Mutexes)在线程同步中的使用. 互斥器(Mutexes)的用途和临界区(critical section)的用途非常相似,如:一个时间内只能够有一个线程拥有mutex,就好像同一时间内只能够有一个线程进入同一个critical section一样.但是mutex通过牺牲速度,提高了灵活性,功能变得更加强大了. 虽然mute…
windows核心编程整理(上) windows核心编程整理(下) 线程的堆栈 每当创建一个线程时,系统就会为线程的堆栈(每个线程有他自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个以保留的区域 当创建一个线程的堆栈时,系统将会保留一个链接程序的/STACK开关指明的地址空间区域 堆栈区域的最后一个页面始终被保留这,这样做的目地是为了防止不小心改写进程使用的其他数据 内存映射文件 与虚拟内存一样,内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域,他们之间的差别…