摘要:
《Windows驱动开发技术详解 》331页, 在将IRP发送给底层驱动或其他驱动之前,可以对IRP设置一个完成例程,一旦底层驱动将IRP完成后,IRP完成例程立刻被处罚,通过设置完成例程可以方便地使程序员了解其他驱动对IRP进行的处理, 不管是调用自己的底层驱动或是调用其他驱动,都是使用内核函数I 阅读全文
摘要:
手动创建IRP有以下几个步骤: 1,先得到设备的指针,一种方法是用IoGetDeviceObjectPointer内核函数得到设备对象指针,另外一种方法是用zwCreateFile内核函数先得到设备句柄,然后调用ObReferenceObjectByHandle内核方法通过设备句柄得到设备对象指针; 阅读全文
摘要:
IRP被送到底层驱动程序以后,由于硬件设备的问题,IRP不能得到及时处理,甚至有可能永远不会被处理,这时候需要对IRP超时情况进行处理,一旦在规定时间内,IRP没有被处理,操作系统就会进入到IRP的处理函数种 阅读全文
摘要:
DCP是一种使用更加灵活的定时器,可以对任意间隔时间进行定时。DPC定时器的内部使用了一个定时器对象KTIMER,当你设定了定时器之后,从设定开始起经过这个时间之后操作系统会将一个DPC定时器的例程插入到DPC的队列,操作系统读取DPC队列的时候定时器例程就能够被执行。这里的DPC定时器例程就相当于 阅读全文
摘要:
驱动程序代码 #pragma once #define IO_CONTROL_TRANSMIT_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN,0x8080,METHOD_BUFFERED,FILE_ANY_ACCESS) typedef struct _DEVICE_EXTE 阅读全文
摘要:
互斥+有序 线程同步是线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应该等待,知道消息到达时才被唤醒 阅读全文
摘要:
相关函数 1,CreateEvent HANDLE WINAPI CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, //表示安全控制,一般直接传入NULL,表示不能被子进程继承 BOOL bManualReset, //参数确定事件是手动置位 阅读全文
摘要:
内核版的令牌 相关函数 HANDLE CreateMutexA( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner,//FALSE的时候,互斥体创建出来就可以用 LPCSTR lpName ); 示例代码,下面是两个程序,代表两个 阅读全文
摘要:
多个线程有对同一个全局变量进行写的操作时,会出现线程安全问题。 1,临界区 / 临界资源 临界资源时一次只允许一个线程使用的资源。 访问临界资源的那段代码称为临界区。 临界区实现之线程锁 如图 1,创建全局变量,一个全局令牌 CRITICAL_SECTION cs;//相当于一个令牌,让线程去拿,谁 阅读全文
摘要:
线程切换的时候,要保存当前运行状态,以便后续切换回来 CONTEXT结构体保存的是一堆寄存器 两个函数 //You cannot get a valid context for a running thread. Use the SuspendThread function to suspend t 阅读全文