[00023]-[2015-09-19]-[01]-[Windows 平台基礎知識1]

來源:互聯網
上載者:User

標籤:

[進程,線程, DLL(動態連結程式庫)的枚舉]
[快照處理 CreateToolhelp32SnapShot()]

// THCS32_SNAPMODULE// THCS32_SNAPPROCESS// THCS32_SNAPTHREADHANDLE hSnap = CreateToolhelp32SnapShot(    DWORD dwFlags,     // 建立快照系統的類型 進程? 線程? DLL?    DWORD dwProcssId,     // NULL OR ProcessId);

 

[***32First() / ***32Next()]

// PROCESSENTRY32/*typedef struct tagPROCESSENTRY32{DWORD dwSize;     // 結構體大小DWORD cntUsage;     // 該進程的引用計數DWORD th32ProcessID;     // 該進程的ID ===> PIDULONG_PTR th32DefaultHeapID;     // 進程預設堆的ID = 0DWORD th32ModuleID;     // 進程模組ID = 0DWORD cntThreads;     // 進程開啟的執行緒計數DWORD th32ParentProcessID;     // 該進程的父進程的IDLONG pcPriClassBase;     // 線程的優先權DWORD dwFlags;     // == 0TCHAR szExeFile[MAX_PATH];     // 進程的可執行檔的名稱} PROCESSENTRY32, *PPROCESSENTRY32;*/// THREADENTRY32/*typedef struct tagTHREADENTRY32 {  DWORD dwSize;     // 結構體大小  DWORD cntUsage;     // == 0  DWORD th32ThreadID;     // ....      DWORD th32OwnerProcessID;     // 線程所屬進程的PID  LONG tpBasePri;     // 線程在核心中分配的優先順序 (0 - 31) 0 為最低優先順序  LONG tpDeltaPri;     // = 0  DWORD dwFlags;     // = 0  } THREADENTRY32, *PTHREADENTRY32;*/// MODULEENTRY32/*typedef struct tagMODULEENTRY32 {DWORD dwSize;     // 結構體大小DWORD th32ModuleID;     // = 1DWORD th32ProcessID;     // 正在檢查的進程標識符DWORD GlblcntUsage;     // 全域模組的使用計數 即模組的總載入次數 一般沒有意義 = 0xffffDWORD ProccntUsage;     // 全域模組的使用計數 與GlblcntUsage相同)。通常這一項也是沒有意義的,被設定為0xFFFF。BYTE *modBaseAddr;     // 模組的基址,在其所屬的進程範圍內。DWORD modBaseSize;     // 模組的大小,單位位元組。HMODULE hModule;     // 所屬進程的範圍內,模組控制代碼。TCHAR szModule[MAX_PATH];     // NULL結尾的字串,其中包含模組名。TCHAR szExePath[MAX_PATH];     // NULL結尾的字串,其中包含的位置,或模組的路徑。} MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32;*/BOOL WINAPI Process32First(HANDLE hSnap, LPPROCESSENTRY32 lppe);BOOL WINAPI Process32Next(HANDLE hSnap, LPPROCESSENTRY32 lppe);BOOL WINAPI Thread32First(HANDLE hSnap, LPTHRADENTRY32 lpte);BOOL WINAPI Thread32Next(HANDLE hSnap, LPTHRADENTRY32 lpte);BOOL WINAPI Module32First(HANDLE hSnap, LPMODULEENTRY32 lpme);BOOL WINAPI Module32Next(HANDLE hSnap, LPMODULEENTRY32 lpme);

 

egcode:

HANDLE hSnap = CreateToolhelp32Snapshot(THCS32_SNAPPROCESS, NULL);// 給系統中的進程 進行一次快照 快照是一瞬間的動作,因為系統的進程,線程, DLL都是在動態
變化的

PROCESSENTRYY32 pe = {0};
pe.dwSize = sizeof(PROCESSENTRY32);
BOOL bRet = Process32First(hSnap, &pe);
while(bRet)
{
// now the pe do contain the content of a Process Entry
.......

bRet = Process32Next(hSnap, &pe);// get the next Process Entry content
}


[調整當前進程的許可權]
(1) 使用OpenProcessToken() 開啟當前進程的存取權杖
(2) 使用LookupPrivilegeValue() 擷取描述許可權的LUID
(3) 使用AdjustTokenPrivileges() 調整存取權杖的許可權 ---> [SeDebugPrivilege]

egcode:

/**    調整當前進程 具有 SeDebugPrivilege 許可權*/void SetDebugPrivilege(){  HANDLE hToken = NULL;  BOOL bRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);  if(bRet == TRUE)  {    TOKEN_PRIVILEGE tp;    tp.PrivilegeCount = 1;    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLE;    AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);    CloseHandle(hToken);  }  else  {    CloseHandle(hToken);  }    }

 

[00023]-[2015-09-19]-[01]-[Windows 平台基礎知識1]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.