网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VB > 正文

Visual Basic获取系统服务描述表入口地址方法

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/07/10

文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学的各位小编整理了VB-Visual Basic获取系统服务描述表入口地址方法的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!

  在《自动获取 NT 系统服务描述表与函数名映射表》一文中我使用MS提供的DbgHelp库,从符号库文件中查找KeServiceDescriptorTable和KeServiceDescriptorTableShadow符号,以获取系统服务描述表入口地址。这种方法逻辑简单,但是对不同操作系统版本的调试符号文件有依赖性,不适用于作为工具被散发出去的程序。因此这儿给出另外一种从线程本身的特性着手获取系统服务描述表入口地址的方法。

  我们所说的线程,实际上分为核心态和用户态两部分。Win32下这两者基本上是1对1的关系,其他平台如Solaris或Linux 2.6以前的版本则使用不同的映射模型。而Win32系统中核心态的线程,实际上也分为两类:工作线程和GUI线程。前者是建立核心线程的缺省类型,后者在线程第一次使用Win32k.sys系统服务时自动转换,或者使用PsConvertToGuiThread函数(ntos\ps\psquery.c:3247)显式转换。两者之间的区别主要在于使用的资源缺省大小不同,以及使用的系统服务描述表不同。这也是为什么系统服务描述表要分为KeServiceDescriptorTable和KeServiceDescriptorTableShadow的原因之一,后者包括前者没有的对GDI服务的入口函数地址,一般在Win32k.sys中实现。核心线程对象的ETHREAD::KTHREAD::ServiceTable字段保存了此线程适用的系统调用服务表地址,此字段也被PsConvertToGuiThread函数用于判断线程类型。功能与windows xp/2003提供的IsGUIThread函数类型。

使用上我们可以创建一个线程,此线程不做任何实际工作,只是根据我们要取哪个系统服务描述表来决定是否调用GDI函数,如

以下为引用:

class TGuiThread : public TThread

{

public:

TGuiThread(void) : TThread(false)

{

FreeOnTerminate = false;

}

void __fastcall Execute(void)

{

::GetDesktopWindow();

}

};

在需要获取地址时,我们可以创建一个此线程的实例,然后通过其句柄获取内核对象地址。

以下为引用:

DWORD TServiceTableApplication::GetpKeServiceDescriptorTableAddress(void) const

{

std::auto_ptr GuiThread(new TGuiThread());

GuiThread->WaitFor();

::THandleTable tblHandles;

PVOID pObj = NULL;

TSystemHandleList& handles = tblHandles.HandleByProcessID[::GetCurrentProcessId()];

for(TSystemHandleCPtr itHandle = handles.begin();

itHandle != handles.end(); itHandle++)

{

if((HANDLE)itHandle->Handle == (HANDLE)GuiThread->Handle)

{

pObj = itHandle->Object;

break;

}

}

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号