ProcessOwner(PID) { ;-- 返回给定进程ID的所有者
/* DESCRIPTION OF FUNCTION: -- ProcessOwner() --
-------------------------------------------------------------------------------------
Description : Returns the Owner for a given Process ID. To make it fully functional, one needs to call SetDebugPrivilege() prior to ProcessOwner()
Link : https://autohotkey.com/board/topic/7984-ahk-functions-incache-cache-list-of-recent-items/page-8
http://www.autohotkey.com/forum/viewtopic.php?p=232199#232199
Author : SKAN
Sincere thanks to Sean, for pointing out the method and for providing half the code
- http://www.autohotkey.com/forum/viewtopic.php?p=232247#232247
- http://www.autohotkey.com/forum/viewtopic.php?t=18438
Nibu Thomas : How to get name of owner of a process?
- https://nibuthomas.wordpress.com/2008/01/08/how-to-get-name-of-owner-of-a-process/
Date : --
AHK-Version : AHK_L
License : --
Syntax : ProcessOwner(ProcessID)
Parameter(s) : --
Return value : string with name of the owner
Reference : * CodeProject: How To Get Process Owner ID and Current User SID
- http://www.codeproject.com/KB/cs/processownersid.aspx
* MSDN: GetTokenInformation(), LookupAccountSid()
- https://msdn.microsoft.com/en-us/library/aa446671%28VS.85%29.aspx
- https://msdn.microsoft.com/en-us/library/aa379166%28VS.85%29.aspx
Remark(s) :
Dependencies : none
KeyWords : string,formatting
-------------------------------------------------------------------------------------
| EXAMPLE(s)
-------------------------------------------------------------------------------------
; SetDebugPrivilege() ; www.autohotkey.com/forum/viewtopic.php?p=232199#232199
Process Exist, svchost.exe
PID := ErrorLevel
MsgBox, % ProcessOwner( PID )
*/
; PROCESS_QUERY_INFORMATION=0x400, TOKEN_READ:=0x20008, TokenUser:=0x1
hProcess := DllCall( "OpenProcess", UInt,0x400,Int,0,UInt,PID )
DllCall( "Advapi32.dll\OpenProcessToken", UInt,hProcess, UInt,0x20008, UIntP,Tok )
DllCall( "Advapi32.dll\GetTokenInformation", UInt,Tok, UInt,0x1, Int,0, Int,0, UIntP,RL )
VarSetCapacity( TI,RL,0 )
DllCall( "Advapi32.dll\GetTokenInformation"
, UInt,Tok, UInt,0x1, UInt,&TI, Int,RL, UIntP,RL ), pSid := NumGet(TI)
DllCall( "CloseHandle", UInt,hProcess ), DllCall( "CloseHandle", UInt,Tok )
; following code taken from www.autohotkey.com/forum/viewtopic.php?p=116487 - Author Sean
DllCall( "Advapi32\LookupAccountSidA"
, Str,"", UInt,pSid, UInt,0, UIntP,nSizeNM, UInt,0, UIntP,nSizeRD, UIntP,eUser )
VarSetCapacity( sName,nSizeNM,0 ), VarSetCapacity( sRDmn,nSizeRD,0 )
DllCall( "Advapi32\LookupAccountSidA"
, Str,"", UInt,pSid, Str,sName, UIntP,nSizeNM, Str,sRDmn, UIntP,nSizeRD, UIntP,eUser )
DllCall( "LocalFree", UInt,pSid )
Return sName
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)