枚举内核模块
2014-04-24 15:21
561 查看
NTSTATUS MyEnumKernelModule(IN CHAR* str,OUT ULONG *moduleadd,OUT ULONG *modulesie) { NTSTATUS status = STATUS_SUCCESS; ULONG n = 0; ULONG i = 0; PSYSTEM_MODULE_INFORMATION_ENTRY module = NULL; PVOID pbuftmp = NULL; ANSI_STRING ModuleName1,ModuleName2; BOOLEAN tlgstst= FALSE; //如果找到了指定模块则设置为TRUE //利用11号功能枚举内核模块 status = ZwQuerySystemInformation(11, &n, 0, &n); //申请内存 pbuftmp = ExAllocatePool(NonPagedPool, n); //再次执行,将枚举结果放到指定的内存区域 status = ZwQuerySystemInformation(11, pbuftmp, n, NULL); module = (PSYSTEM_MODULE_INFORMATION_ENTRY)((PULONG )pbuftmp + 1 ); //初始化字符串 RtlInitAnsiString(&ModuleName1,str); n = *((PULONG)pbuftmp ); for ( i = 0; i < n; i++ ) { RtlInitAnsiString(&ModuleName2,&module[i].ImageName); //DbgPrint("%d\t0x%08X 0x%08X %s\n",module[i].LoadOrderIndex,module[i].Base,module[i].Size,module[i].ImageName); if (RtlCompareString(&ModuleName1,&ModuleName2,TRUE) == 0) { DbgPrint("MyEnumKernelModule:%s:%0X \n",ModuleName2.Buffer,module[i].Base); *moduleadd = module[i].Base; *modulesie = module[i].Size; tlgstst = TRUE; break; } } ExFreePool(pbuftmp); if tlgstst == FALSE) { return FAILED_TO_OBTAIN_FUNCTION_ADDRESSES; } return status; } |
转至:http://bbs.pediy.com/showthread.php?t=185057&highlight=%E6%9E%9A%E4%B8%BE+%E4%B8%BE%E9%A9%B1+%E9%A9%B1%E5%8A%A8 |
相关文章推荐
- 深入学习Make命令和Makefile(上)(2)
- 摘录:Jetty 的工作原理以及与 Tomcat 的比较
- 【dynamic】简化反射简单尝试
- FLEX 树形菜单例子之即时搜索(四)
- Linux 系统运维学习方法汇总
- UVa 10315 Poker Hands
- Egnyte CmdLine 批量下载
- 应采儿吐槽孕期不适 细数准妈妈的5道坎儿
- 不使用插件在eclipse中集成weblogic
- 在线外贸交易安全进一步得到保障 PayPal推出亚太区卖家保障政策
- Java程序代码记录一
- 在O(1)时间删除链表结点
- HDU 1087 Super Jumping! Jumping! Jumping!
- AJAX组件-dwr 的部署与实现
- MFC中文档/视图类结构内的相互调用方法总结
- android std::string(NULL) crash
- objective-c语法
- 【新技术】笔记本无线充电
- 美工与程序员的Web工作如何做到相对分离?
- 设计推荐系统