摘要: 1.事件对象可以使用事件对象同步完成IRP,或者驱动线程间同步执行某些操作。首先调用KeInitializeEvent IoCreateNotificationEvent或IoCreateSynchronizationEvent初始化事件。流程:驱动的一个线程调用KeWaitForSingleObj... 阅读全文
posted @ 2015-01-22 22:57 银河彼岸 阅读(1490) 评论(0) 推荐(0) 编辑
摘要: 1.Ring3到Ring0 Event的处理用户层创建Event:HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); //手动复位, 初始无法信号用户层等待Event:WaitForSingleObject(hEvent, INFINIT... 阅读全文
posted @ 2015-01-22 22:52 银河彼岸 阅读(510) 评论(0) 推荐(0) 编辑
摘要: 1.1 使用字符串结构常常使用传统C语言的程序员比较喜欢用如下的方法定义和使用字符串:char *str = { “my first string” }; // ansi字符串wchar_t *wstr = { L”my first string” }; // unicode字符... 阅读全文
posted @ 2015-01-22 17:34 银河彼岸 阅读(860) 评论(0) 推荐(0) 编辑
摘要: 设备读写的第三种方式是Neither方式,在PDevObj中不设置Flags.这种方式很少被用到。1.在Neither方式中,派遣函数直接读写应用程序提 供的缓冲区地址。你很可能看到有人这样说过:决不(或几乎从不)直接引用用户模式的内存地址。因为缓冲区内存是用户模式的内存地址,驱动程序如果直接引用 ... 阅读全文
posted @ 2015-01-22 17:13 银河彼岸 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 上一节介绍了缓冲区方式读写,这一节咱们来看看直接方式读写设备。1.直接方式读写设备,操作系统会将用户模式下的缓冲区锁住,然后操作系统将这段缓冲区在内核模式地址再次映射一遍。这样,用户模式的缓冲区和内核模式的缓冲区指向的是同一区域的物理内存。无论操作系统如何切换进程,内核模式地址都保持不变。创建好设备... 阅读全文
posted @ 2015-01-22 16:59 银河彼岸 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 1.设备对象一共有三种读写方式:缓冲区方式读写(Buffered方式);直接方式读写(Direct方式);Neither方式。这三种方式的Flags分别对应DO_BUFFERED_IO,DO_DIRECT_IO,0在buffered方式中,I/O管理器先创建一个与用户模式数据缓冲区大小相等的系统缓冲... 阅读全文
posted @ 2015-01-22 16:58 银河彼岸 阅读(1114) 评论(0) 推荐(0) 编辑
摘要: 在系统初始化的时候,决定驱动程序在什么时候被载入的信息保存在注册表中。最早的一批驱动是由ntldr载入内存的(仅仅是载入)第二批是由IO管理器载入内存的第三批是由 SCM(Service Control Manager) 载入的一个驱动在第几批中被载入是由 HKLM/SYSTEM/CurrentCo... 阅读全文
posted @ 2015-01-22 16:46 银河彼岸 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 1.readfile和writefile可以实现应用程序与驱动程序通信,另外一个Win32 API 是DeviceIoControl。应用程序自定义一中IO控制码,然后调用 DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTRO... 阅读全文
posted @ 2015-01-22 16:38 银河彼岸 阅读(551) 评论(0) 推荐(0) 编辑
摘要: 设备对象类型#define FILE_DEVICE_8042_PORT 0x00000027#define FILE_DEVICE_ACPI 0x00000032#define FILE_DEVICE_BATTERY 0x00... 阅读全文
posted @ 2015-01-22 16:31 银河彼岸 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 在win32内核程序开发中,我们常常需要取得某进程的pid或句柄,或者需要检索进程的eprocess结构,很多API函数需要的参数也不同,所以掌握pidhandleeprocess相互转换的方法会大大提高我们的开发效率。以下就是我自己在实际开发中总结出来的转换方法,在此记录下来,以供需要的朋友参考。... 阅读全文
posted @ 2015-01-22 16:09 银河彼岸 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 在驱动程序中常常需要与用户层程序进行同步,但是由于ring0与ring3之间的天然壁障,导致它们不能使用通常的方法。比如在用户层CreateEvent得到的句柄无法在内核之中使用。然而EVENT对象生来就是为了进行同步使用的,只不过要想在内核层和用户层之间共享同一个EVENT对象的话,需要一点小小的... 阅读全文
posted @ 2015-01-22 16:00 银河彼岸 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 如果在自己的程序中,即包含ntddk.h和ntifs.h的时候,编译的时候会出现如下编译错误:7600.16385.0\inc\ddk\ntifs.h(85) : error C2371: 'PEPROCESS' : redefinition; different basic types,7600.... 阅读全文
posted @ 2015-01-22 13:29 银河彼岸 阅读(557) 评论(0) 推荐(0) 编辑