프로세스가 불러오는 dll 모듈 가져오기

5154 단어 dll 모듈

  
  
  
  
  1. // SE_DEBUG_NAME 
  2. bool EnableDebugPriv() 
  3. { 
  4.     HANDLE hToken; 
  5.     TOKEN_PRIVILEGES tp; 
  6.     LUID luid; 
  7.     if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) 
  8.         return false; 
  9.  
  10.     if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&luid))return false; 
  11.  
  12.     tp.PrivilegeCount = 1; 
  13.     tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED; 
  14.     tp.Privileges[0].Luid = luid; 
  15.     if(!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL) ) return false; 
  16.  
  17.     return true; 
  18. } 
  19.  
  20. // dll  
  21. bool GetProcAllModule( DWORD dwPID)    
  22. {   
  23.     EnableDebugPriv(); 
  24.     vector m_vProcModuleInfo; 
  25.     m_vProcModuleInfo.clear(); 
  26.     m_vProcModuleInfo.swap(vector ()); 
  27.  
  28.     HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE , dwPID);    
  29.  
  30.     if ( INVALID_HANDLE_VALUE == hSnapshot )    
  31.     {    
  32.         return false;    
  33.     }    
  34.  
  35.     MODULEENTRY32  module32;    
  36.  
  37.     module32.dwSize = sizeof(MODULEENTRY32);    
  38.  
  39.     BOOL bRet = Module32First(hSnapshot, &module32);   
  40.  
  41.     while(bRet)   
  42.     {    
  43.         m_vProcModuleInfo.push_back(module32.szExePath); 
  44.         bRet = Module32Next(hSnapshot, &module32); 
  45.     } 
  46.  
  47.     CloseHandle( hSnapshot );    
  48.  
  49.     if (m_vProcModuleInfo.size()) 
  50.     { 
  51.         for(UINT i=0;i<m_vProcModuleInfo.size();i++) 
  52.             cout<<m_vProcModuleInfo[i].c_str()<<endl; 
  53.     } 
  54.     return TRUE;    
  55. }  

좋은 웹페이지 즐겨찾기