gpt4 book ai didi

delphi - 无法通过 GetModuleFileNameEx() 获取各种系统进程的路径

转载 作者:行者123 更新时间:2023-12-03 15:07:54 30 4
gpt4 key购买 nike

我创建了这个函数来获取各种网络进程的路径,例如 svchost、Firefox 等。代码如下:

function GetProcessPath(var pId:Integer):String;
var
Handle: THandle;

begin
Result := '';
try
Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pID);
if Handle <> 0 then
begin
try
SetLength(Result, MAX_PATH);
if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
SetLength(Result, StrLen(PChar(Result)))
else
Result := '';
finally
CloseHandle(Handle);
end;
end;

except
on E:Exception do
ShowMessage(E.ClassName + ':' + E.Message);
end;
end;

我的问题是我没有获得所有进程的路径。它可以很好地获取 Firefox 和其他类似用户级进程的路径。但对于像alg、Svchost这样的进程,我无法通过这种方法获取路径。我的猜测是我必须使用一些不同的 API。我该如何解决这个问题?

我使用的是 Windows XP,32 位。

最佳答案

您需要设置调试权限。其实现方式如下:

function NTSetPrivilege(sPrivilege: string; bEnabled: Boolean): Boolean;
var
hToken: THandle;
TokenPriv: TOKEN_PRIVILEGES;
PrevTokenPriv: TOKEN_PRIVILEGES;
ReturnLength: Cardinal;
begin
Result := True;

// Only for Windows NT/2000/XP and later.
if not (Win32Platform = VER_PLATFORM_WIN32_NT) then Exit;

Result := False;

// Obtain the processes token
if OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
try
// Get the locally unique identifier (LUID) .
if LookupPrivilegeValue(nil, PChar(sPrivilege),
TokenPriv.Privileges[0].Luid) then
begin
TokenPriv.PrivilegeCount := 1; // One privilege to set

case bEnabled of
True: TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
False: TokenPriv.Privileges[0].Attributes := 0;
end;

ReturnLength := 0; // Replaces a var parameter
PrevTokenPriv := TokenPriv;

// Enable or disable the privilege

AdjustTokenPrivileges(hToken, False, TokenPriv, SizeOf(PrevTokenPriv),
PrevTokenPriv, ReturnLength);
end;
finally
CloseHandle(hToken);
end;
end;
end;

NtSetPrivilege('SeDebugPrivilege', TRUE); // Call this on form create

关于delphi - 无法通过 GetModuleFileNameEx() 获取各种系统进程的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771682/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com