怎样取得指定进程的全路径?
当前系统中存在两个同名的进程它们都是EXPLORER.EXE,其中有一个是系统的,而有一个可能是病毒,
我在程序中应该怎样编程让它能识别出来,那个是真,那个是假呢?我初步的想法是检查它们的路径,如果路径是X:\windows\EXPLORER.EXE,
那么它就是真的,其余都是假的现在我想分别得到这两个进程的路径,大虾,请帮助小弟一下吧!
当前系统中存在两个同名的进程它们都是EXPLORER.EXE,其中有一个是系统的,而有一个可能是病毒,
我在程序中应该怎样编程让它能识别出来,那个是真,那个是假呢?我初步的想法是检查它们的路径,如果路径是X:\windows\EXPLORER.EXE,
那么它就是真的,其余都是假的现在我想分别得到这两个进程的路径,大虾,请帮助小弟一下吧!
解决方案 »
- 求Delphi7高手DBGrid第一列显示序号要怎样实现
- 眼睛花 了 帮我看看我的insert 语句
- 在把RealAudio控件放置到窗体上时系统提示出错,想知道大概是哪里的问题
- ADO方式下,怎样在一个数据库里查找一个字段是否与edit1.text值相等?如何返回具体个数?
- 一个小问题耽误了我几天:在SQL2K的表中输入一个公式
- 如何实现这样的窗体,马上给分!!
- 怎样设置系统日期/时间???
- 应该怎么样?
- 如何在Kylix 中開發報表!!!!!沒有人會嗎?
- 哪位高手能解释一下Source和Sender、Drap-and-Drop和Drag-and-Dock的区别,最好有例子!TKS!
- DLL 的问题哦,快来看看。
- 请问SQLConnection 控件怎么连接数据库的?
这样子不行的,它返回的不是进程的路径
function EnabledDebugPrivilege(const bEnabled: Boolean):Boolean;
var
hToken: THandle;
tp: TOKEN_PRIVILEGES;
a: DWORD;
const
SE_DEBUG_NAME = 'SeDebugPrivilege';
begin
Result:=False;
//打开当前Process的令牌
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken)) then
begin
//调整令牌的权限,加上权限(SE_DEBUG_NAME)
tp.PrivilegeCount :=1;
LookupPrivilegeValue(nil,SE_DEBUG_NAME ,tp.Privileges[0].Luid);
if bEnabled then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
a:=0;
AdjustTokenPrivileges(hToken,False,tp,SizeOf(tp),nil,a);
Result:= GetLastError = ERROR_SUCCESS;
CloseHandle(hToken);
end;
end;Function GetProcessFullPath(Name:String):String;
Var
Hd,Hs:THandle;
ParentStr:String;
pLps:PModuleEntry32;
Lps:TModuleEntry32;
Lp:TProcessEntry32;
Hds:THandle;
S,F:Cardinal;
begin
EnabledDebugPrivilege(true);
Try
Lp.dwSize:=sizeof(TProcessEntry32);
Hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if Process32First(Hd,Lp) then
Repeat
Try
ParentStr:=UpperCase(StrPas(Lp.szExeFile));
if ParentStr=UpperCase(Name) then
begin
Hs:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,Lp.th32ProcessID);
Lps.dwSize:=SizeOf(TModuleEntry32);
if Module32First(Hs,Lps) then
begin
Result:=Lps.szExePath;
end
else
Result:='';
CloseHandle(Hs);
break;
end;
Except
end;
Until Process32Next(Hd,Lp)=False;
CloseHandle(Hd);
Finally
EnabledDebugPrivilege(false);
end;
end;