plpnuaa
驱动牛犊
驱动牛犊
  • 注册日期2004-09-03
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1587回复:2

请问如何得到进程用户SID以及用户名?

楼主#
更多 发布于:2004-10-08 22:21
我参考sysinternals的fundelete,但是执行到NtQueryInformationToken函数时返回的状态总是0xC0000005L(STATUS_ACCESS_VIOLATION),我把第一个NtQueryInformationToken屏蔽掉,给requiredLength 赋值sizeof(TOKEN_USER),也产生同样错误:

相关代码如下:
PVOID pToken=PsReferencePrimaryToken(curproc);
HANDLE tokenHandle;
NTSTATUS ntStatus=ObOpenObjectByPointer( pToken, 0, NULL, TOKEN_QUERY, NULL, KernelMode, &tokenHandle );
ObDereferenceObject(pToken);

if(!NT_SUCCESS(ntStatus))
{
   pProcInfo->userSID[0]=0;
   return false;
}

ULONG requiredLength=0;
ntStatus = NtQueryInformationToken( tokenHandle, TokenUser, NULL, 0, &requiredLength );
if(  ntStatus != STATUS_BUFFER_TOO_SMALL ) {
  ZwClose( tokenHandle );
  pProcInfo->userSID[0]=0;
  return false;
}

PTOKEN_USER tokenInfoBuffer = (PTOKEN_USER) ExAllocatePool( NonPagedPool, requiredLength );
if( tokenInfoBuffer) {
  ntStatus = NtQueryInformationToken( tokenHandle, TokenUser, tokenInfoBuffer, requiredLength, &requiredLength );
}


请各位不吝赐教


[编辑 -  10/8/04 by  plpnuaa]

最新喜欢:

agchenagchen
潘龙平
plpnuaa
驱动牛犊
驱动牛犊
  • 注册日期2004-09-03
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-09 10:18
原因已经找到了,将NtQueryInformationToken换成ZwQueryInformationToken就可以了
潘龙平
Odyssey
驱动小牛
驱动小牛
  • 注册日期2004-12-15
  • 最后登录2008-03-29
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望115点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-24 12:53
我在DriverEntry里面调用为什么得到的SID=S-1-5-18?
如何得到用户的SID?
游客

返回顶部