c++釋放進程所佔內存--快速釋放內存

 

  1. 參考http://madcloudsong.com/articles/138中的方法 
  2.  
  3. //此處只處理了32位的進程 
  4.  
  5. #include 
  6. #pragma comment (lib,"psapi.lib") 
  7. //提升權限 
  8. void VengConfig::AdjustTokenPrivilegesForNT() 
  9.   { 
  10.       HANDLE hToken; 
  11.       TOKEN_PRIVILEGES tkp; 
  12.  
  13.       OpenProcessToken(GetCurrentProcess(), 
  14.           TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); 
  15.  
  16.       LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid); 
  17.  
  18.       tkp.PrivilegeCount = 1; 
  19.       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
  20.  
  21.       AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); 
  22.   } 
  23. //執行快速清理,這裏只清理了自身,如想釋放所有內存,則枚舉所有進程,然後釋放 
  24.   BOOL VengConfig::EmptyCurrentProcMemory(void
  25.   { 
  26.       DWORD dwProcessId = GetCurrentProcessId(); 
  27.       HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,dwProcessId); 
  28.       if(hProcess) 
  29.       { 
  30.           SetProcessWorkingSetSize(hProcess,-1,-1); 
  31.  
  32.           EmptyWorkingSet(hProcess); 
  33.           CloseHandle(hProcess); 
  34.           return TRUE; 
  35.       } 
  36.       return FALSE; 
  37.   } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章