1. 程式人生 > >枚舉進程使用的DLL

枚舉進程使用的DLL

tla leg ror n) for ken main bug efi

// tt2.cpp : 定義控制臺應用程序的入口點.

#include "stdafx.h"
#include <windows.h>
#include <iostream.h>
#include "Shlwapi.h"

#include "Psapi.h"
#pragma comment(lib,"Psapi.lib")
bool DebugPrivilege(const char *PName, BOOL bEnable)
{
    bool              bResult = TRUE;
    HANDLE            hToken;
    TOKEN_PRIVILEGES  TokenPrivileges;
    
    
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) { bResult = FALSE; return bResult; } TokenPrivileges.PrivilegeCount = 1; TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; LookupPrivilegeValue(NULL, PName,
&TokenPrivileges.Privileges[0].Luid); AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL); if (GetLastError() != ERROR_SUCCESS) { bResult = FALSE; } CloseHandle(hToken); return bResult; } //我們以“計算器”這個實例來枚舉該進程的所有用到的模塊的句柄,並打印出來
int main() { DebugPrivilege(SE_DEBUG_NAME, TRUE); HMODULE nHmodule[1024]={NULL}; char lpFilename[MAX_PATH]=""; DWORD cbNeeded=0; HWND hwnd=::FindWindow(NULL,"計算器");//以計算機為例子,枚舉它的模塊句柄 DWORD idProcess=0; ::GetWindowThreadProcessId(hwnd,&idProcess);//獲取計算器進程ID HANDLE hCalc=::OpenProcess(PROCESS_ALL_ACCESS,NULL,idProcess);//獲取進程的句柄 if (!hCalc) { CloseHandle(hwnd); ::MessageBox(NULL,"很遺憾,你沒有運行計算器","EnumProcessModules",MB_OK); } else { BOOL bRetn= ::EnumProcessModules(hCalc,nHmodule,sizeof(nHmodule),&cbNeeded); if (!bRetn) { CloseHandle(hCalc); ::MessageBox(NULL,"很遺憾,獲取模塊句柄失敗","EnumProcessModules",MB_OK); } else { for (int i=0;i<((int)cbNeeded/sizeof(HMODULE));i++) { cout<<""<<i<<"個:"; GetModuleFileNameEx(hCalc,nHmodule[i],lpFilename,MAX_PATH); cout<<lpFilename; cout<<endl; } } } DebugPrivilege(SE_DEBUG_NAME, FALSE); return 0; }

枚舉進程使用的DLL