如何修改线程的Access Token
来源:互联网 发布:将多列数据合并为一列 编辑:程序博客网 时间:2024/05/04 17:20
原文出处http://blog.sina.com.cn/s/blog_539a66320100mwvb.html
如何修改线程的access token
这篇文章是我几个月之前写的,当时是为了解决vista下面,system用户的进程无法枚举网上邻居,所以我开一个新的线程,将新的线程的access token修改成当前登陆用户的explorer.exe进程的acess token。
如何修改线程的Access Token
1.
Access Token用来标识一个用户,其中包括用户的SID和用户所属组的SID,还包括这个用户和所属用户组的所拥有的权限列表。
当用户输入用户名和密码登陆到Windows之后,Windows会创建一个Acess Token,用来标识这个用户。 在这个用户下创建的进程都将得到一份这个Access Token的备份。当进程需要访问一个可以加密的对象(如文件,事件等)时,windows利用这个Access Token来跟对象的Security Descriptor进行比较,以确认这个进程是否有权限来访问这个对象。(关于SID和Security Descriptor请参阅其他资料)
2.
进程被创建时,从系统中得到Access Token是属于进程,线程刚开始创建的时候并没有Access Token。我们可以通过一个叫Impersonate的方法赋予线程一个Access Token,这样就使得线程具有跟进程不同的Access Token,用来完成一些使用进程的Access Token无法完成的任务。
Impersonate一般用于Client/Server模式中,Client发送一个请求访问服务期内的资源,如果Server接到请求后直接去访问资源的话,可能会导致Server无法控制Client可以访问哪些资源。Windows提供了Impersonate这种解决方案,Server的一个线程可以Impersonate Client,这样这个线程就将以Client的身份来访问资源,从而可以直接控制Client是否可以访问资源。
3.
有以下几个函数可以实现Impersonate
a)
b)
c)
d)
e)
f)
g)
4.
其他的一些Impersonate的方法大都是使用在特定的环境下,ImpersonateLoggedOnUser则仅需要有用户的Access Token就可以。
获取用户的Access Token有两种方法
a)
b)
5.
下面一个利用ImpersonateLoggedOnUser来实现Impersonate的例子。BOOL Impersonate(LPCSTR szFileName)函数中,输入参数为需要Impersonate的进程名,比如说explorer.exe
Int main()
{
OSVERSIONINFO os = {sizeof(OSVERSIONINFO)};
GetVersionEx(&os);
if(os.dwMajorVersion >= 6 ){//Only Impersonate when it is vista and later
}
}
BOOL Impersonate(LPCSTR szFileName)
{
BOOL bResult = FALSE;
HANDLE hProcess = NULL;
HANDLE hToken = NULL;
for(DWORD dw=0; dw<0xFFFFFF; Sleep((++dw)*100)){//loop until success
}
return bResult;
}
DWORD GetActiveConsoleSessionI
{
DWORD dwResult = 0;
HINSTANCE hKernal32 = NULL;
do {
} while(FALSE);
if(hKernal32 != NULL)
return dwResult;
}
DWORD GetPIDOFSpecifiedSession
{
DWORD dwRet = 0;
PWTS_PROCESS_INFO lpProcessInfo = NULL;
do {
}while(FALSE);
if(lpProcessName != NULL){
}
return dwRet;
}
- 如何修改服务线程的Access Token
- 如何修改线程的Access Token
- 如何获取永久性的facebook page access token
- ACCESS TOKEN
- ACCESS TOKEN
- ACCESS TOKEN
- Access Token访问令牌的操作
- 新版接口access token的有效期
- 获取新浪开放平台的Access token
- 如何获取OAuth2.0 Access Token(新浪微博)
- [ADO]如何修改ADO的线程模型
- [ADO]如何修改ADO的线程模型
- [ADO]如何修改ADO的线程模型
- [ADO]如何修改ADO的线程模型
- [ADO]如何修改ADO的线程模型
- 获得UAA access token
- 访问令牌(access token)
- OAuth2.0使用access Token时要注意的地方
- lucene3.6分页、自定义查询的数据库实现
- GUI素材-FLASH模板集
- CSS3 :nth-child()伪类选择器
- s2sh pom.xml
- PHPUnit单元测试系列二 -- 如何开展单测
- 如何修改线程的Access Token
- 2013华科计算机机试
- jeecgv2.0中文件的管理与使用
- 策略(strategy)模式
- c++不能建立引用数组,可以建立数组的引用
- 8、使用JavaScript与Servlet实现客户端与服务器端验证
- js 火狐下取本地路径
- android开发 常用技巧
- tcpdump长时间抓包