作为管理员,如果不能获得PROCESS_QUERY_INFORMATION(0x400),则可以获得给定进程的PROCESS_QUERY_LIMITED_INFORMATION(0x1000)访问权限。QueryFullProcessImageNameW只需要有限的访问权限。然而,并不是所有情况下都能奏效。例如,上的安全描述符csrss.exe文件只授予对系统帐户的访问权限,不授予管理员权限。另一个例子是服务管理程序,它在System(S-1-16-16384)完整性级别运行,而管理员令牌仅在High(S-1-16-12288)完整性级别运行。在
通常不能打开此类进程的句柄。但是作为一个管理员,你拥有几乎无所不能的SeDebugPrivilege。如果您启用此特权,Windows AccessCheck将突然成为您最好的朋友(但即使是最好的朋友也有其局限性)。在
下面是一些ctypes代码,用于启用和禁用当前进程访问令牌中的权限。该特权必须首先存在于令牌中,因此请确保使用管理员帐户运行此权限,如果使用UAC,请以提升的管理员身份运行此权限。在from ctypes import *
from ctypes.wintypes import *
kernel32 = WinDLL('kernel32', use_last_error=True)
advapi32 = WinDLL('advapi32', use_last_error=True)
SE_PRIVILEGE_ENABLED = 0x00000002
TOKEN_ALL_ACCESS = 0x000F0000 | 0x01FF
class LUID(Structure):
_fields_ = (('LowP