发现在IDE中运行的程序读取系统进程,能够完全读取,但是运行exe文件就不能完全读取,了解到是提权的问题。
function EnablePrivilege(const PrivilegeName: string): Boolean;
var
TokenHandle: THandle;
TokenPrivileges: TTokenPrivileges;
begin
Result := False;
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle) then
begin
if LookupPrivilegeValue(nil, PChar(PrivilegeName), TokenPrivileges.Privileges[0].Luid) then
begin
TokenPrivileges.PrivilegeCount := 1;
TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(TokenHandle, False, TokenPrivileges, SizeOf(TokenPrivileges), nil, Pdword(nil)^) then
begin
Result := GetLastError = ERROR_SUCCESS;
end;
end;
CloseHandle(TokenHandle);
end;
end;
其中参数包括
SeDebugPrivilege
:允许程序调试其他程序以及访问受保护的进程空间。SeShutdownPrivilege
:允许程序关闭系统。SeLoadDriverPrivilege
:允许程序安装驱动程序。SeBackupPrivilege
:允许程序备份文件和目录。SeRestorePrivilege
:允许程序还原文件和目录。