阅读:1586回复:2
请问如何得到进程用户SID以及用户名?
我参考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] |
|
最新喜欢:![]()
|
沙发#
发布于:2004-10-09 10:18
原因已经找到了,将NtQueryInformationToken换成ZwQueryInformationToken就可以了
|
|
|
板凳#
发布于:2005-02-24 12:53
我在DriverEntry里面调用为什么得到的SID=S-1-5-18?
如何得到用户的SID? |
|