int FIND_PROC_BY_NAME( const char * szToFind )
{
BOOL bResult, bResultm;
DWORD aiPID[ 1000 ], iCb = 1000, iNumProc, iV2000 = 0;
DWORD iCbneeded, i;
char szName[ MAX_PATH ], szToFindUpper[ MAX_PATH ];
HANDLE hProc, hSnapShot, hSnapShotm;
OSVERSIONINFO osvi;
HINSTANCE hInstLib;
int iLen, iLenP, indx;
HMODULE hMod;
PROCESSENTRY32 procentry;
MODULEENTRY32 modentry;
BOOL( WINAPI * lpfEnumProcesses )( DWORD *, DWORD cb, DWORD * );
BOOL( WINAPI * lpfEnumProcessModules )( HANDLE, HMODULE *,
DWORD, LPDWORD );
DWORD( WINAPI * lpfGetModuleBaseName )( HANDLE, HMODULE,
LPTSTR, DWORD );
HANDLE( WINAPI * lpfCreateToolhelp32Snapshot )( DWORD, DWORD );
BOOL( WINAPI * lpfProcess32First )( HANDLE, LPPROCESSENTRY32 );
BOOL( WINAPI * lpfProcess32Next )( HANDLE, LPPROCESSENTRY32 );
BOOL( WINAPI * lpfModule32First )( HANDLE, LPMODULEENTRY32 );
BOOL( WINAPI * lpfModule32Next )( HANDLE, LPMODULEENTRY32 );
iLenP = strlen( szToFind );
if( iLenP < 1 || iLenP > MAX_PATH ) return 632;
for( indx = 0; indx < iLenP; indx++ )
szToFindUpper[ indx ] = toupper( szToFind[ indx ] );
szToFindUpper[ iLenP ] = 0;
osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
bResult = GetVersionEx( & osvi );
if( !bResult )
return 606;
if(( osvi.dwPlatformId != VER_PLATFORM_WIN32_NT ) &&
( osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS ) )
return 607;
if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
{
hInstLib = LoadLibraryA( "PSAPI.DLL" );
if( hInstLib == NULL )
return 605;
lpfEnumProcesses =( BOOL( WINAPI * )( DWORD *, DWORD, DWORD * ) )
GetProcAddress( hInstLib, "EnumProcesses" );
lpfEnumProcessModules =( BOOL( WINAPI * )( HANDLE, HMODULE *,
DWORD, LPDWORD ) ) GetProcAddress( hInstLib,
"EnumProcessModules" );
lpfGetModuleBaseName =( DWORD( WINAPI * )( HANDLE, HMODULE,
LPTSTR, DWORD ) ) GetProcAddress( hInstLib,
"GetModuleBaseNameA" );
if( lpfEnumProcesses == NULL ||
lpfEnumProcessModules == NULL ||
lpfGetModuleBaseName == NULL )
{
FreeLibrary( hInstLib );
return 605;
}
bResult = lpfEnumProcesses( aiPID, iCb, & iCbneeded );
if( !bResult )
{
FreeLibrary( hInstLib );
return 605;
}
iNumProc = iCbneeded / sizeof( DWORD );
for( i = 0; i < iNumProc; i++ )
{
strcpy( szName, "Unknown" );
hProc = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,
aiPID[ i ] );
if( hProc )
{
if( lpfEnumProcessModules( hProc, & hMod, sizeof( hMod ), & iCbneeded ) )
{
iLen = lpfGetModuleBaseName( hProc, hMod, szName, MAX_PATH );
}
}
CloseHandle( hProc );
if( strcmp( _strupr( szName ), szToFindUpper ) == 0 )
{
FreeLibrary( hInstLib );
return 1;
}
}
}
if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
{
hInstLib = LoadLibraryA( "Kernel32.DLL" );
if( hInstLib == NULL )
return FALSE;
lpfCreateToolhelp32Snapshot =
( HANDLE( WINAPI * )( DWORD, DWORD ) )
GetProcAddress( hInstLib,
"CreateToolhelp32Snapshot" );
lpfProcess32First =
( BOOL( WINAPI * )( HANDLE, LPPROCESSENTRY32 ) )
GetProcAddress( hInstLib, "Process32First" );
lpfProcess32Next =
( BOOL( WINAPI * )( HANDLE, LPPROCESSENTRY32 ) )
GetProcAddress( hInstLib, "Process32Next" );
lpfModule32First =
( BOOL( WINAPI * )( HANDLE, LPMODULEENTRY32 ) )
GetProcAddress( hInstLib, "Module32First" );
lpfModule32Next =
( BOOL( WINAPI * )( HANDLE, LPMODULEENTRY32 ) )
GetProcAddress( hInstLib, "Module32Next" );
if( lpfProcess32Next == NULL ||
lpfProcess32First == NULL ||
lpfModule32Next == NULL ||
lpfModule32First == NULL ||
lpfCreateToolhelp32Snapshot == NULL )
{
FreeLibrary( hInstLib );
return 605;
}
hSnapShot = lpfCreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0 );
if( hSnapShot == INVALID_HANDLE_VALUE )
{
FreeLibrary( hInstLib );
return 605;
}
procentry.dwSize = sizeof( PROCESSENTRY32 );
bResult = lpfProcess32First( hSnapShot, & procentry );
while( bResult )
{
hSnapShotm = lpfCreateToolhelp32Snapshot(
TH32CS_SNAPMODULE, procentry.th32ProcessID );
if( hSnapShotm == INVALID_HANDLE_VALUE )
{
CloseHandle( hSnapShot );
FreeLibrary( hInstLib );
return 605;
}
modentry.dwSize = sizeof( MODULEENTRY32 );
bResultm = lpfModule32First( hSnapShotm, & modentry );
while( bResultm )
{
if( strcmp( modentry.szModule, szToFindUpper ) == 0 )
{
CloseHandle( hSnapShotm );
CloseHandle( hSnapShot );
FreeLibrary( hInstLib );
return 1;
}
else
{
modentry.dwSize = sizeof( MODULEENTRY32 );
bResultm = lpfModule32Next( hSnapShotm, & modentry );
}
}
CloseHandle( hSnapShotm );
procentry.dwSize = sizeof( PROCESSENTRY32 );
bResult = lpfProcess32Next( hSnapShot, & procentry );
}
CloseHandle( hSnapShot );
}
FreeLibrary( hInstLib );
return 0;
}