如何得到一个进程的用户名? ( 积分: 20 )

  • 主题发起人 主题发起人 sy0116
  • 开始时间 开始时间
S

sy0116

Unregistered / Unconfirmed
GUEST, unregistred user!
就像任务管理器中那样,可以显示一个进程后面的用户名是SYSTEM/sy0116之类的,用到哪些API?
 
来自:&nbsp;lichengbin,&nbsp;时间:&nbsp;2005-05-13&nbsp;12:18:49,&nbsp;ID:&nbsp;3072366&nbsp;&nbsp;<br>好象漏了点,PTOKEN_USER的定义没有。[:D]&nbsp;<br>type&nbsp;<br>&nbsp;PTOKEN_USER&nbsp;=&nbsp;^TOKEN_USER;&nbsp;<br>&nbsp;_TOKEN_USER&nbsp;=&nbsp;record&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User:&nbsp;TSidAndAttributes;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<br>&nbsp;TOKEN_USER&nbsp;=&nbsp;_TOKEN_USER;&nbsp;<br><br>借花献佛,改动一点点。&nbsp;<br>function&nbsp;GetUserAndDomainFromPID(ProcessId:&nbsp;DWORD;&nbsp;<br>&nbsp;var&nbsp;User,&nbsp;Domain:&nbsp;string):&nbsp;Boolean;&nbsp;<br>var&nbsp;<br>&nbsp;hToken:&nbsp;THandle;&nbsp;<br>&nbsp;cbBuf:&nbsp;Cardinal;&nbsp;<br>&nbsp;ptiUser:&nbsp;PSIDAndAttributes;&nbsp;<br>&nbsp;snu:&nbsp;SID_NAME_USE;&nbsp;<br>&nbsp;ProcessHandle:&nbsp;THandle;&nbsp;<br>&nbsp;UserSize,&nbsp;DomainSize:&nbsp;DWORD;&nbsp;<br>&nbsp;bSuccess:&nbsp;Boolean;&nbsp;<br>begin&nbsp;<br>&nbsp;Result&nbsp;:=&nbsp;False;&nbsp;<br>&nbsp;ProcessHandle&nbsp;:=&nbsp;OpenProcess(PROCESS_QUERY_INFORMATION,&nbsp;False,&nbsp;ProcessId);&nbsp;<br>&nbsp;if&nbsp;ProcessHandle&nbsp;&lt;&gt;&nbsp;0&nbsp;then&nbsp;<br>&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;if&nbsp;OpenProcessToken(ProcessHandle,&nbsp;TOKEN_QUERY,&nbsp;hToken)&nbsp;then&nbsp;<br>&nbsp;&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bSuccess&nbsp;:=&nbsp;GetTokenInformation(hToken,&nbsp;TokenUser,&nbsp;nil,&nbsp;0,&nbsp;cbBuf);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptiUser&nbsp;&nbsp;:=&nbsp;nil;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(not&nbsp;bSuccess)&nbsp;and&nbsp;(GetLastError&nbsp;=&nbsp;ERROR_INSUFFICIENT_BUFFER)&nbsp;do&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReallocMem(ptiUser,&nbsp;cbBuf);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bSuccess&nbsp;:=&nbsp;GetTokenInformation(hToken,&nbsp;TokenUser,&nbsp;ptiUser,&nbsp;cbBuf,&nbsp;cbBuf);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hToken);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;bSuccess&nbsp;then&nbsp;Exit;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserSize&nbsp;:=&nbsp;0;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DomainSize&nbsp;:=&nbsp;0;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LookupAccountSid(nil,&nbsp;ptiUser.Sid,&nbsp;nil,&nbsp;UserSize,&nbsp;nil,&nbsp;DomainSize,&nbsp;snu);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(UserSize&nbsp;&lt;&gt;&nbsp;0)&nbsp;and&nbsp;(DomainSize&nbsp;&lt;&gt;&nbsp;0)&nbsp;then&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetLength(User,&nbsp;UserSize);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetLength(Domain,&nbsp;DomainSize);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;LookupAccountSid(nil,&nbsp;ptiUser.Sid,&nbsp;PChar(User),&nbsp;UserSize,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PChar(Domain),&nbsp;DomainSize,&nbsp;snu)&nbsp;then&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;True;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;:=&nbsp;StrPas(PChar(User));&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Domain&nbsp;:=&nbsp;StrPas(PChar(Domain));&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FreeMem(ptiUser);&nbsp;<br>&nbsp;&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;&nbsp;CloseHandle(ProcessHandle);&nbsp;<br>&nbsp;end;&nbsp;<br>end;&nbsp;<br>&nbsp;<br>参见ID:&nbsp;3071393&nbsp;为贴子
 
接受答案了.
 
后退
顶部