系统线程: 在驱动中生成的线程一般是系统线程,系统线程所在的进程名为“System”,用到的内核API函数是: NTSTATUS PsCreateSystemThread( OUT PHANDLE ThreadHandle, IN ULONG DesiredAccess, IN POBJECT_ATTRIBUTES objectAttributes OPTIONAL, IN HANDLE ProcessHandle OPTIONAL, OUT PCLIENT_ID ClientId OPTION…
转载请注明来源: enjoy5512的博客 : http://blog.csdn.net/enjoy5512 GitHub : https://github.com/whu-enjoy .1. 使用系统线程 PsCreateSystemThread NTSTATUS PsCreateSystemThread( _Out_PHANDLE ThreadHandle, _In_ULONG DesiredAccess, //所需访问权限 _In_opt_POBJECT_ATTRIBUTES Object…
Java并发编程:线程的同步 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} Java并发编程:线程的同步 Table of Contents 1. synchronized 修饰方法 2. synchronized 修饰代码块 3. synchronized 修饰static方法 线程的同步是通过锁来实现的.在我们使用Concurrent包的锁之前,我们先来了解Java原生的同步锁…
1)驱动中使用到的线程是系统线程,在system进程中.创建线程API函数:PsCreateSystemThread:结束线程(线程内自行调用)API函数:PsTerminateSystemThread:关闭线程句柄API函数:ZwClose.以下代码忽略同步问题 线程函数: void MyThreadProc(PVOID context) { PUNICODE_STRING str = (PUNICODE_STRING)context; //打印字符串 KdPrint(("PrintInMyT…
基于同步对象的等待.唤醒机制: 一个线程可以等待一个对象或多个对象而进入等待状态(也叫睡眠状态),另一个线程可以触发那个等待对象,唤醒在那个对象上等待的所有线程. 一个线程可以等待一个对象或多个对象,而一个对象也可以同时被N个线程等待.这样,线程与等待对象之间是多对多的关系.他们之间的等待关系由一个队列和一个'等待块'来控制,等待块就是线程与等待目标对象之间的纽带. WaitForSingleObject可以等待那些"可等待对象",哪些对象是'可等待'的呢?进程.线程.作业.文件对象.…
1)跳入到基础篇的内核编程第7章,驱动入口函数DriverEnter的返回值决定驱动程序是否加载成功,当打算反汇编阅读驱动内核程序时,可寻找该位置. 2)DRIVER_OBJECT下的派遣函数(分发函数)指针的个数为:IRP_MJ_MAXINUM_FUNCTION,保存在一个数组中,编写驱动程序,实质上就是自己编写处理I/O请求IRP包的派遣函数,可以使用for循环将所有的派遣函数注册到同一个派遣函数.分发函数类似MFC消息机制中的回调函数,它的名字也是程序员自定义的,但是参数确定.卸载函数通过…
1.返回状态 绝大部分的内核api返回值都是一个返回状态,也就是一个错误代码.这个类型为NTSTATUS.我们自己写的函数也大部分这样做. NTSTATUS MyFunction() { NTSTATUS status; -. return status; } 如果碰到一个函数返回了奇特的NTSTATUS值,正确的方法是在WDK的头文件比如(NTSTATUS.h)中去寻找答案. 2.字符串 驱动里的字符串一般用这个结构来容纳. typedef struct _UNICODE_STRING{ US…
1)Windows运用程序的文件与注册表操作进入R0层之后,都有对应的内核函数实现.在windows内核中,无论打开的是文件.注册表或者设备,都需要使用InitializeObjectAttributes来初始化一个OBJECT_ATTRIBUTES结构体: VOID InitializeObjectAttributes( [out] POBJECT_ATTRIBUTES InitializedAttributes, //OBJECT_ATTRIBUTES的指针 [in] PUNICODE_ST…
(原书)所有内核空间共享,DriverEntery是内核程序入口,在内核程序被加载时,这个函数被调用,加载入的进程为system进程,xp下它的pid是4.内核程序的编写有一定的规则: 不能调用windows运用层API函数 很多C标准函数失去意义,如printf,fopen,fwrite等,它们有专门的内核函数 很多单纯的C标准,如string.h(不涉及I/O及网络等)等还是适用 可以使用标准C语言,但是用浮点数之前要特殊处理 WDK提供大量System Routine以供调用,相当于运用层…
将线程.事件.状态等包装成流的源. 核心:解决线程的消耗和锁的效率问题. Java和Node.js可以说分别是基于线程和基于事件的两个并发编程代表,它们互相指责瞧不起对方,让我们看看各种阵营的声音: 基于事件的粉丝认为线程是一个坏主意,原因有是: 1. 你得显式的协调共享数据的锁,如果你忘记加锁,你就会得到中断坏的数据. 2. 依赖锁导致死锁. 3. 它们难以调试 4. 回调并没有锁 5. 多线程在多核上的性能并不会比每个单核一个线程性能更好. 你应当尽可能地避免线程,对于GUI和分布式系统或低…