Exemplo n.º 1
0
const wxString wxProcessKiller::Name(int pid)
{
    wxString str;
    str.Printf(_T("id=%d"),pid);
#ifdef _DEBUG
#ifdef _WIN32
    if(VER_PLATFORM_WIN32_NT==GetPlatform() && hInstLib1){
        static BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *, DWORD, LPDWORD ) =
            (BOOL(WINAPI *)(HANDLE, HMODULE *, DWORD, LPDWORD)) GetProcAddress( (HINSTANCE) hInstLib1,"EnumProcessModules" ) ;
        static DWORD (WINAPI *lpfGetModuleFileNameEx)( HANDLE, HMODULE, LPTSTR, DWORD )=
            (DWORD (WINAPI *)(HANDLE, HMODULE,LPTSTR, DWORD )) GetProcAddress( (HINSTANCE) hInstLib1,"GetModuleFileNameExA" ) ;
        if( lpfEnumProcessModules &&  lpfGetModuleFileNameEx ) {
            HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
            if(hProcess) {
                HMODULE hMod;
                DWORD dwSize;
                if(lpfEnumProcessModules( hProcess, &hMod, sizeof(HMODULE), &dwSize ) ){
                    // Get Full pathname:
                    TCHAR buf[1+MAX_PATH];
                    lpfGetModuleFileNameEx( hProcess, hMod, buf, MAX_PATH);
                    str+=_TCHAR(' ');
                    str+=buf;
                }
                CloseHandle(hProcess);
            }
        }
    }
#endif
#endif
    return str;
}
Exemplo n.º 2
0
//
// ウィンドウハンドルから、そのモジュールのフルパスを取得します。
//
// パラメータ
//      hWnd
//          調べるウィンドウのハンドル
//      lpszFileName
//          モジュールの完全修飾パスを受け取るバッファへのポインタ
//      nSize
//          取得したい文字の最大の長さ
//
// 戻り値
//      正常にウィンドウを作成したモジュールのフルパス名が取得でき
//      たら TRUE が返ります。それ以外は FALSE が返ります。
//
BOOL GetFileNameFromHwnd(HWND hWnd, LPTSTR lpszFileName, DWORD nSize)
{
	BOOL bResult = FALSE;
	// ウィンドウを作成したプロセスの ID を取得
	DWORD dwProcessId;
	GetWindowThreadProcessId(hWnd , &dwProcessId);

	// 現在実行している OS のバージョン情報を取得
	OSVERSIONINFO osverinfo;
	osverinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if ( !GetVersionEx(&osverinfo) )
		return FALSE;

	// プラットフォームが Windows NT/2000 の場合
	if ( osverinfo.dwPlatformId == VER_PLATFORM_WIN32_NT )
	{
		// PSAPI 関数のポインタ
		BOOL (WINAPI *lpfEnumProcessModules)
							(HANDLE, HMODULE*, DWORD, LPDWORD);
		DWORD (WINAPI *lpfGetModuleFileNameEx)
							(HANDLE, HMODULE, LPTSTR, DWORD);

		// PSAPI.DLL ライブラリをロード
		HINSTANCE hInstLib = LoadLibrary("PSAPI.DLL");
		if ( hInstLib == NULL )
			return FALSE ;

		// プロシージャのアドレスを取得
		lpfEnumProcessModules = (BOOL(WINAPI *)
			(HANDLE, HMODULE *, DWORD, LPDWORD))GetProcAddress(
						hInstLib, "EnumProcessModules");
		lpfGetModuleFileNameEx =(DWORD (WINAPI *)
			(HANDLE, HMODULE, LPTSTR, DWORD))GetProcAddress(
						hInstLib, "GetModuleFileNameExA");

		if ( lpfEnumProcessModules && lpfGetModuleFileNameEx )
		{
			// プロセスオブジェクトのハンドルを取得
			HANDLE hProcess;
			hProcess = OpenProcess(
					PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
					FALSE, dwProcessId);
			if ( hProcess )
			{
				// .EXE モジュールのハンドルを取得
				HMODULE hModule;
				DWORD dwNeed;
				if (lpfEnumProcessModules(hProcess,
							&hModule, sizeof(hModule), &dwNeed))
				{
					// モジュールハンドルからフルパス名を取得
					if ( lpfGetModuleFileNameEx(hProcess, hModule,
											lpszFileName, nSize) )
						bResult = TRUE;
				}
				// プロセスオブジェクトのハンドルをクローズ
				CloseHandle( hProcess ) ;
			}
		}
		// PSAPI.DLL ライブラリを開放
		FreeLibrary( hInstLib ) ;
	}
	// プラットフォームが Windows 9x の場合
	else if ( osverinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
	{
		// ToolHelp 関数ポインタ
		HANDLE (WINAPI *lpfCreateSnapshot)(DWORD, DWORD);
		BOOL (WINAPI *lpfProcess32First)(HANDLE, LPPROCESSENTRY32);
		BOOL (WINAPI *lpfProcess32Next)(HANDLE, LPPROCESSENTRY32);

		// プロシージャのアドレスを取得
		lpfCreateSnapshot =
			(HANDLE(WINAPI*)(DWORD,DWORD))GetProcAddress(
								GetModuleHandle("kernel32.dll"),
								"CreateToolhelp32Snapshot" );
		lpfProcess32First=
			(BOOL(WINAPI*)(HANDLE,LPPROCESSENTRY32))GetProcAddress(
								GetModuleHandle("kernel32.dll"),
								"Process32First" );
		lpfProcess32Next=
			(BOOL(WINAPI*)(HANDLE,LPPROCESSENTRY32))GetProcAddress(
								GetModuleHandle("kernel32.dll"),
								"Process32Next" );
		if ( !lpfCreateSnapshot ||
			!lpfProcess32First ||
			!lpfProcess32Next)
			return FALSE;

		// システム プロセスの Toolhelp スナップショットを作成
		HANDLE hSnapshot;
		hSnapshot = lpfCreateSnapshot(TH32CS_SNAPPROCESS , 0);
		if (hSnapshot != (HANDLE)-1)
		{
			// 最初のプロセスに関する情報を取得
			PROCESSENTRY32 pe;
			pe.dwSize = sizeof(PROCESSENTRY32);
			if ( lpfProcess32First(hSnapshot, &pe) )
			{
				do {
					// 同じプロセスID であれば、ファイル名を取得
					if (pe.th32ProcessID == dwProcessId)
					{
						lstrcpy(lpszFileName, pe.szExeFile);
						bResult = TRUE;
						break;
					}
				} while ( lpfProcess32Next(hSnapshot, &pe) );
			}
			// スナップショットを破棄
			CloseHandle(hSnapshot);
		}
	}
	else
		return FALSE;
	GetLongPathName(lpszFileName, lpszFileName, nSize);
	return bResult;
}
Exemplo n.º 3
0
BOOL CdllsDlg::OnInitDialog()
{
	__super::OnInitDialog();
	//AddAnchor(IDC_APP_ICON,TOP_LEFT);
	//AddAnchor(IDC_STATIC_VER,TOP_LEFT);
	//AddAnchor(IDC_STATIC_COPY,TOP_LEFT);
	//AddAnchor(IDB_SAVE,TOP_RIGHT);
	//AddAnchor(IDOK,TOP_RIGHT);
	AddAnchor(IDB_SAVE,TOP_LEFT);
	AddAnchor(IDCANCEL,TOP_RIGHT);
	AddAnchor(IDC_LVW,TOP_LEFT , BOTTOM_RIGHT);
	// TODO:  Add extra initialization here
	HWND hwndListView =GetDlgItem(IDC_LVW)->m_hWnd;
	DWORD dwStyle = ListView_GetExtendedListViewStyle(hwndListView);
	dwStyle |=  LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES 
		| LVS_EX_HEADERDRAGDROP ;
	ListView_SetExtendedListViewStyle(hwndListView, dwStyle);

	LV_COLUMN lvColumn;
	lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvColumn.fmt = LVCFMT_LEFT;
	lvColumn.cx = 300;
	lvColumn.pszText = _T("Module name");
	ListView_InsertColumn (hwndListView, 0, &lvColumn);
	lvColumn.pszText = _T("version");
	RECT rc;
	::GetWindowRect(hwndListView,&rc);
	lvColumn.cx = 200/*(rc.right-rc.left)-300-20*/;	
	ListView_InsertColumn (hwndListView, 1, &lvColumn);

	HANDLE pProcessHandle = NULL;
	pProcessHandle = GetCurrentProcess();
	HMODULE hInstLib = LoadLibrary( _T("PSAPI.DLL") ) ;

	if (pProcessHandle != NULL&&hInstLib!=NULL) 
	{
		HMODULE pLoadedModules[4096];
		DWORD nLoadedBytes = 0;
		// Get array of loaded modules
		BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *,
			DWORD, LPDWORD );
		DWORD (WINAPI *lpfGetModuleFileNameEx)( HANDLE, HMODULE,
			LPTSTR, DWORD );
		lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,
			DWORD, LPDWORD)) GetProcAddress( hInstLib,
			"EnumProcessModules" ) ;
		lpfGetModuleFileNameEx =(DWORD (WINAPI *)(HANDLE, HMODULE,
			LPTSTR, DWORD )) GetProcAddress( hInstLib,
#ifdef _UNICODE
			"GetModuleFileNameExW" 
#else
			"GetModuleFileNameExA" 
#endif
			) ;

		if (lpfEnumProcessModules(pProcessHandle,
			pLoadedModules,
			(DWORD)sizeof(pLoadedModules),
			&nLoadedBytes)) {
				// Compute effective number of modules
				int nNumberOfModules = nLoadedBytes/sizeof(HMODULE);
				// Loop on all modules
				for (int i=0; i<nNumberOfModules; i++) {
					// Fetch module file name
					TCHAR pFileName[_MAX_PATH];
					pFileName[0]=0;
					CString cleanFileName;
					if (lpfGetModuleFileNameEx(pProcessHandle,
						pLoadedModules[i],
						pFileName,
						_MAX_PATH) > 0) 
					{
						if(_tcslen(pFileName)>0&&_tcslen(pFileName)<ARRAY_SIZE(pFileName))
						{
							CDLLVersion dll_ver(pFileName);
							LVITEM lvI;
							lvI.mask = LVIF_TEXT ; 
							lvI.state = 0; 
							lvI.stateMask = 0; 						
							lvI.iItem = i;
							lvI.iSubItem = 0;
							lvI.pszText = (pFileName);
							ListView_InsertItem(hwndListView, &lvI);
							LV_ITEM lv_sub;
							memset(&lv_sub,0,sizeof(LV_ITEM));
							lv_sub.mask = LVIF_TEXT ; 
							lv_sub.state = 0; 
							lv_sub.stateMask = 0; 
							lv_sub.iItem = i;
							lv_sub.iSubItem = 1;	
							lv_sub.pszText = (LPTSTR)(LPCTSTR)dll_ver.GetFullVersion();
							ListView_SetItem(hwndListView, &lv_sub);
						}
					}
				}
			}
			// Close process handle
			CloseHandle(pProcessHandle);

	} 
	FreeLibrary(hInstLib);
	return TRUE;  // return TRUE unless you set the focus to a control	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}