依据名称检测进程是否存在
来源:互联网 发布:单片机应用系统设计 编辑:程序博客网 时间:2024/05/16 07:29
借鉴于网上。
#include <psapi.h >
#pragma comment(lib,"psapi.lib")
DWORD ProcessToPID(const char *InputProcessName);
int AddPrivilege(const char *Name);
const char DESTPROC[19] = "client.exe";
const char DESTPROCDebug[19] = "clientd.exe";
部分函数:
void CWatingDlg::OnTimer(UINT nIDEvent)
{
static int Value = 1;
m_Wait+= Value ;
if (m_Wait > 3100)
{
//KillTimer(nIDEvent);
Value = 0;
}
else
{
if (m_Wait%50 == 0 )
{
m_Pro_Waiting.GetRange(m_low,m_up);
m_Pro_Waiting.SetRange(0, m_up*2.0);
m_Wait *=2.0;
}
}
m_Pro_Waiting.SetPos(m_Wait);
static int nTime = 0;
DWORD pid = ProcessToPID(DESTPROC);
DWORD pidDebug = ProcessToPID(DESTPROCDebug);
nTime++;
if (nTime % 10 == 0)
{
if (pid != 0 || pidDebug != 0)
{
return;
}
else
{
exit(1);
}
}
if (nTime > 1200)
{
exit(1);
}
}
DWORD ProcessToPID(const char *InputProcessName)
{
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
HANDLE hProcess = NULL;
HMODULE hMod = NULL;
char szProcessName[MAX_PATH] = "UnknownProcess ";
AddPrivilege(SE_DEBUG_NAME);
// 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs
if (!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
{
return 0;
}
cProcesses = cbNeeded / sizeof(DWORD);
// 按有效的PID遍历所有的进程
for ( i = 0; i < cProcesses; i++ )
{
// 打开特定PID的进程
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, aProcesses[i]);
// 取得特定PID的进程名
if ( hProcess )
{
if(EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( hProcess, hMod,
szProcessName, sizeof(szProcessName) );
//将取得的进程名与输入的进程名比较,如相同则返回进程PID
if(!stricmp(szProcessName, InputProcessName))
{
CloseHandle( hProcess );
return aProcesses[i];
}
}
}//end of if ( hProcess )
}//end of for
//没有找到相应的进程名,返回0
CloseHandle( hProcess );
return 0;
}
int AddPrivilege(const char *Name)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID Luid;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
&hToken))
{
return 1;
}
if (!LookupPrivilegeValue(NULL,Name,&Luid))
{
return 1;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid = Luid;
if (!AdjustTokenPrivileges(hToken,
0,
&tp,
sizeof(TOKEN_PRIVILEGES),
NULL,
NULL))
{
return 1;
}
return 0;
}
- 依据名称检测进程是否存在
- 检测进程是否存在
- vb 检测进程是否存在
- java 检测进程是否存在
- 检测该进程是否存在?
- Linux下检测进程是否存在
- Linux下检测进程是否存在
- Linux下检测进程是否存在
- Linux下检测进程是否存在
- 检测当前进程是否存在硬件断点
- VB-检测指定的进程是否存在
- Visual Basic 中判断指定名称的进程是否存在
- Android检测系统中是否存在某进程
- 循环10秒检测是否存在某进程
- 检测进程是否存在的小函数&&检测命令是否执行成功的小函数
- 检测文件是否存在
- 检测文件是否存在
- 检测文件是否存在
- CTabCtrl 标签相关设置
- URL通信与socket通信的区别及各自特点
- ARCGIS基础数据类型
- LDAP是什么?
- C可变参数
- 依据名称检测进程是否存在
- scanner读文件两例
- 彩票抽奖机模拟器(祝君早中大奖)
- cmd命令
- 物理地址-线性地址-逻辑地址
- c语言拾遗3
- 如何反编译APK文件
- 企业信息化,你在哪一层?
- Ext 3 - Dwr 数据交互 DWRTreeLoader