上一页 1 ··· 64 65 66 67 68 69 70 71 72 ··· 75 下一页
摘要: 对设备的任何操作都会转化为IRP请求,而IRP一般都是由操作系统异步发送的。但是有时需要同步来避免逻辑错误。同步方法有:StartIO例程,使用中断服务例程等。1、应用程序对设备的同步异步操作1)同步操作原理大部分IRP是由应用程序的Win32 API发起。这些函数本身就支持同步异步操作。如ReadFile,WriteFile,DeviceIoControl等。 图示 IRP同步操作示意图P250... 阅读全文
posted @ 2010-11-08 23:21 浪里飞 阅读(2293) 评论(0) 推荐(0) 编辑
摘要: 4、内核模式下的同步对象用户模式下用句柄来操作同步对象,而内核模式下可以获得同步对象的指针。每种同步对象在内核中均对应一种数据结构。1)等待KeWaitForMultipleObjectsKeWaitForSingleObject如果超时则返回STATUS_TIMEOUT。如果是因为数组中其一个同步对象变为激发态,则函数的返回值减去STATUS_WAIT_0,就是激发的同步对象在数组中的索引号。2... 阅读全文
posted @ 2010-11-07 17:29 浪里飞 阅读(3628) 评论(0) 推荐(2) 编辑
摘要: 驱动程序的同步处理可重入,是指函数的执行结果不和执行顺序有关。同步机制很大程度上依赖于中断请求级。IRQ编号设备名称用途IRQ0Tine计算机系统计时器IRQ1KeyBoard键盘IRQ2RedirectI RQ9与IRQ9相接,MPU-401 MDI使用该IRQIRQ3COM2串口设备IRQ4COM1串口设备IRQ5LPT2建议声卡使用该IRQIRQ6FDD软驱传输控制用IRQ7LPT1打印机传... 阅读全文
posted @ 2010-11-07 11:28 浪里飞 阅读(1932) 评论(0) 推荐(0) 编辑
摘要: 今天我在实践中,需要将一个项目运行在另外一个项目的基础之上。于是在VS2005中,将需要依存的项目依赖于被依存的项目。由于被依存的项目导出的是dll,依存的项目导出是exe,所以在被依存的项目的类前面加如下一句:class __declspec(dllexport) OSManager这样就可以了。 阅读全文
posted @ 2010-11-07 10:30 浪里飞 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 1、直接读写方式操作系统将用户模式下的缓冲区锁住,然后操作系统将这段缓冲区在内核模式地址再映射一遍。这样,用户模式的缓冲区和内核模式的缓冲区指向的是同一区域的物理地址。操作系统将用户模式的地址锁定后,用内存描述符MDL记录这段内存。MDL 示意图比如mdl->ByteCount就是记录的虚拟内存的大小。可以用几个宏来得到其值。The MmGetMdlByteCount macro retur... 阅读全文
posted @ 2010-11-02 00:56 浪里飞 阅读(1421) 评论(0) 推荐(0) 编辑
摘要: 驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同的派遣函数(Dispatch Function)中。1、IRPIRP(I/O request packet)有两个属性,一个是MajorFunction,另外一个是MinorF... 阅读全文
posted @ 2010-10-29 23:14 浪里飞 阅读(1940) 评论(0) 推荐(0) 编辑
摘要: 注册表项相当于文件夹,注册表子项子文件夹(类似目录)。1、创建关闭ZwCreateKey示例代码代码2、打开ZwOpenKey3、添加、修改、注册表键值ZwSetValueKey示例代码代码4、查询ZwQueryValueKey来查询注册表项。1)用ZwQueryValueKey获取数据结构的长度。2)分配如此长度的内存。3)再次调用ZwQueryValueKey查询。4)回收内存。示例代码代码5... 阅读全文
posted @ 2010-10-29 00:20 浪里飞 阅读(3786) 评论(0) 推荐(0) 编辑
摘要: 1、创建ZwCreateFile注意CreateDisposition参数。代码2、打开ZwOpenFile代码3、获取或修改文件属性ZwSetInformationFileZwQueryInformationFile4、文件的写、读操作ZwWriteFileZwReadFile代码参考:[1] Windows驱动开发详解[2] MSDN 阅读全文
posted @ 2010-10-28 23:57 浪里飞 阅读(1902) 评论(1) 推荐(0) 编辑
摘要: 1、字符串 1)两种字符串,一种是char型,记录ansi字符集。每个字符一个字节。以0标志结束。在KdPrint中用%s输出。 宽字符型,wchar_t,描述unicode字符集的字符串,每个字符两个字节,以0标志结束。通过L来体现。在KdPrint中用%S输出。 如CHAR *string = "Hello"; WCHAR *string2 = L"hello"; KdPrint("%s\n"... 阅读全文
posted @ 2010-10-28 23:33 浪里飞 阅读(3670) 评论(4) 推荐(0) 编辑
摘要: 1、虚拟地址 Windows的所有程序(ring0,ring3),可以操作的都是虚拟内存。CPU中寄存器CR0一个位PG位来告诉系统是否分页的。1为允许分页。DDK中宏PAGE_SIZE记录着分页大小,一般为4K,4GB的虚拟内存会被分割成1M个单元。 图 物理内存的映射 P120 2、两种模式 4G虚拟地址中,低2G为用户模式,高2G为内核模式。Windows规定用户态程序只能访问用户模式地址... 阅读全文
posted @ 2010-10-27 23:13 浪里飞 阅读(3460) 评论(0) 推荐(0) 编辑
上一页 1 ··· 64 65 66 67 68 69 70 71 72 ··· 75 下一页