用Visual studio11在Windows8上开发内核枚举注册表
来源:互联网 发布:数据光端机使用说明 编辑:程序博客网 时间:2024/05/16 09:51
在Windows NT中,80386保护模式的“保护”比Windows 95中更坚固,这个“镀金的笼子”更加结实,更加难以打破。在Windows 95中,至少应用程序I/O操作是不受限制的,而在Windows NT中,我们的应用程序连这点权限都被剥夺了。在NT中几乎不太可能进入真正的ring0层。
在Windows NT中,存在三种Device Driver:
1.“Virtual device Driver” (VDD)。通过VDD,16位应用程序,如DOS 和Win16应用程序可以访问特定的I/O端口(注意,不是直接访问,而是要通过VDD来实现访问)。
2.“GDI Driver”,提供显示和打印所需的GDI函数。
3.“Kernel Mode Driver”,实现对特定硬件的操作,比如说CreateFile, CloseHandle (对于文件对象而言), ReadFile, WriteFile, DeviceIoControl 等操作。“Kernel Mode Driver”还是Windows NT中唯一可以对硬件中断和DMA进行操作的Driver。SCSI 小端口驱动和 网卡NDIS 驱动都是Kernel Mode Driver的一种特殊形式。
Visual studio11与Windows8带来格外不同的新体验
1.启动Vs11
2.看见满目的驱动开发模板
3.选择一个驱动模式,有内核模式与用户模式两种的驱动
4.创建一个驱动程序,KMDF DriverMVP
5.我们选择的是内核模式的驱动程序,下面是创建成功后的界面,分别是驱动程序本身,与驱动安装包
6.按下F5,选择驱动编译,
插入下列代码实现ring0层枚举注册表,请见代码分析
#include <ntddk.h>VOID DriverUnload(IN PDRIVER_OBJECT DriverObject){DbgPrint("Driver Unload");}//自定义枚举注册表键值函数NTSTATUSMyRegEnumSubValue() {UNICODE_STRING RegUnicodeString;HANDLE hRegister;ULONG ulSize;NTSTATUS ntStatus;UNICODE_STRING uniKeyName;PKEY_VALUE_FULL_INFORMATION pvbi;PKEY_FULL_INFORMATION pfi;ULONG i;OBJECT_ATTRIBUTES objectAttributes;//初始化UNICODE_STRING字符串RtlInitUnicodeString( &RegUnicodeString,L"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN");//初始化objectAttributesInitializeObjectAttributes(&objectAttributes, &RegUnicodeString, OBJ_CASE_INSENSITIVE,//对大小写敏感 NULL, NULL );//打开注册表 ntStatus = ZwOpenKey( &hRegister, KEY_ALL_ACCESS, &objectAttributes);if (NT_SUCCESS(ntStatus)){KdPrint(("Open register successfully\n"));}ZwQueryKey(hRegister,KeyFullInformation,NULL,0,&ulSize);pfi=(PKEY_FULL_INFORMATION)ExAllocatePool(PagedPool,ulSize);//查询注册表ZwQueryKey(hRegister,KeyFullInformation,pfi,ulSize,&ulSize);//开始循环枚举注册表for(i=0;i<pfi->Values;i++){ZwEnumerateValueKey(hRegister,i,KeyValueFullInformation,NULL,0,&ulSize);pvbi =(PKEY_VALUE_FULL_INFORMATION )ExAllocatePool(PagedPool,ulSize);ZwEnumerateValueKey(hRegister,i,KeyValueFullInformation,pvbi,ulSize,&ulSize);uniKeyName.Length = uniKeyName.MaximumLength =(USHORT)pvbi->NameLength;uniKeyName.Buffer = pvbi->Name;//将键值输出DbgPrint("第%d个键值名称是:%wZ\n",i,&uniKeyName);//判断键值的类型if (pvbi->Type==REG_SZ){DbgPrint("键值的类型是:REG_SZ\n");}else if (pvbi->Type==REG_MULTI_SZ){DbgPrint("键值的类型是:REG_MULTI_SZ\n");}else if (pvbi->Type==REG_DWORD){KdPrint(("键值的类型是:REG_DWORD\n"));}else if (pvbi->Type==REG_BINARY){KdPrint(("键值的类型是:REG_BINARY\n"));}ExFreePool(pvbi);}ExFreePool(pfi);ZwClose(hRegister);return STATUS_SUCCESS;}NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ){MyRegEnumSubValue();DriverObject->DriverUnload = DriverUnload;return STATUS_SUCCESS;}
- 用Visual studio11在Windows8上开发内核枚举注册表
- 用Visual studio11在Windows8上开发内核驱动隐藏注册表
- 用Visual studio11在Windows8上开发驱动实现注册表监控和过滤
- 用Visual studio11在Windows8上开发驱动实现注册表监控和过滤
- 用Visual studio11在Windows8上开发驱动实现注册表监控和过滤
- 用Visual studio11在Windows8上开发驱动实现注册表监控和过滤
- 用Visual studio11在Windows8上开发驱动实现内存填0杀进程
- 用Visual studio11在Windows8上开发驱动实现内存填0杀进程
- 基于Windows8与Visual Studio11开发第一个内核驱动程序
- 基于Windows8与Visual Studio11开发第一个USB内核驱动程序
- 基于Windows8与Visual Studio11开发第一个USB内核驱动程序
- 用Visual studio2012在Windows8上开发内核驱动监视线程创建
- 用Visual studio2012在Windows8上开发内核驱动监视进程创建
- 用Visual studio2012在Windows8上开发内核中隐藏进程
- 基于Windows8与Visual Studio11开发第一个ring3驱动程序
- 基于Windows8与Visual Studio11开发第一个Wdm驱动程序
- 基于Windows8与Visual Studio11开发第一个ring3驱动程序
- 基于Windows8与Visual Studio2012开发内核隐藏注册表
- RsOA电子会议室模块设计小结
- HttpHandler生成随机码、验证码
- 找到问题的真正原因:20121021服务器故障处理经历
- Flex读取外部XML中文乱码解决办法(转)
- JS中slice方法
- 用Visual studio11在Windows8上开发内核枚举注册表
- openssl ocsp
- 伤感的QQ空间日志_爱情的动漫是你我的最爱
- kmp的next数组值的求法
- HandlerSocket使用经验
- ActiveMQ 消息的发送和接收
- 派生类和基类之间的特殊关系
- 用Visual studio11在Windows8上开发内核驱动隐藏注册表
- 求二叉树中两个节点p,q的最低公共祖先节点