- 5月 15 週二 201215:46
[P] 關閉某個執行檔
- 12月 27 週一 201016:11
[P] Process 筆記目錄
1. 相關函式
2. 列舉 process - tlhelp32.h
3. 列舉 process - psapi.h
2. 列舉 process - tlhelp32.h
3. 列舉 process - psapi.h
- 12月 27 週一 201016:09
[P] 列舉 device driver
// ==================================
// filename: EnumDeviceDriver.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
//
// **** all rights reserve ****
// ==================================
// filename: EnumDeviceDriver.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
//
// **** all rights reserve ****
// ==================================
- 12月 27 週一 201015:08
[P] 列舉 modules - psapi.h
// ==================================
// filename: ListModules2.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
//
// **** all rights reserve ****
// ==================================
#include <windows.h>
#include <stdio.h>
#include <Psapi.h>
#pragma comment(lib, "psapi.lib")
// filename: ListModules2.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
//
// **** all rights reserve ****
// ==================================
#include <windows.h>
#include <stdio.h>
#include <Psapi.h>
#pragma comment(lib, "psapi.lib")
- 12月 27 週一 201014:35
[P] 列舉 modules - tlhelp32.h
相關 struct
typedef struct tagMODULEENTRY32 {
DWORD dwSize; // struct 大小
DWORD th32ModuleID; // 不用,設0
DWORD th32ProcessID; // 使用此 module 之 process ID
DWORD GlblcntUsage; // 通常 = 0xffff
DWORD ProccntUsage; // 與 GlblcntUsage 同
BYTE *modBaseAddr; // 此 module 於 process 之起始位置
DWORD modBaseSize; // module 大小, bytes
HMODULE hModule; // module's handle
TCHAR szModule[MAX_MODULE_NAME32 + 1]; // module 名
TCHAR szExePath[MAX_PATH]; // module 全名
} MODULEENTRY32, *PMODULEENTRY32;
typedef struct tagMODULEENTRY32 {
DWORD dwSize; // struct 大小
DWORD th32ModuleID; // 不用,設0
DWORD th32ProcessID; // 使用此 module 之 process ID
DWORD GlblcntUsage; // 通常 = 0xffff
DWORD ProccntUsage; // 與 GlblcntUsage 同
BYTE *modBaseAddr; // 此 module 於 process 之起始位置
DWORD modBaseSize; // module 大小, bytes
HMODULE hModule; // module's handle
TCHAR szModule[MAX_MODULE_NAME32 + 1]; // module 名
TCHAR szExePath[MAX_PATH]; // module 全名
} MODULEENTRY32, *PMODULEENTRY32;
- 12月 27 週一 201014:34
[P] 列舉 thread
process 可能會有多個 thread,於是要列舉 thread 時,必須要指定是哪個 process ,所以要給的必要參數是 process id。先看相關 struct
typedef struct tagTHREADENTRY32 {
DWORD dwSize; // 結構體大小
DWORD cntUsage; // 不用,設0
DWORD th32ThreadID; // 此 thread ID
DWORD th32OwnerProcessID; // 擁有此 thread 之 process id
LONG tpBasePri; // 優先權, 0-31
LONG tpDeltaPri; // 不用, 設0
DWORD dwFlags; // 不用, 設0
} THREADENTRY32, *PTHREADENTRY32;
typedef struct tagTHREADENTRY32 {
DWORD dwSize; // 結構體大小
DWORD cntUsage; // 不用,設0
DWORD th32ThreadID; // 此 thread ID
DWORD th32OwnerProcessID; // 擁有此 thread 之 process id
LONG tpBasePri; // 優先權, 0-31
LONG tpDeltaPri; // 不用, 設0
DWORD dwFlags; // 不用, 設0
} THREADENTRY32, *PTHREADENTRY32;
- 12月 27 週一 201014:29
[P] 取得 process ID
process 管理中,PID 取得是第一步且重要的事,這裡提出二、三種方式取得 process ID
1. 已知視窗名稱
DWORD GetPIDByWindowName(const char* ClassName, const char* WindowName)
{
DWORD PID;
HWND targetWnd = FindWindow(ClassName, WindowName);
GetWindowThreadProcessId(targetWnd, &PID);
return PID;
}
1. 已知視窗名稱
DWORD GetPIDByWindowName(const char* ClassName, const char* WindowName)
{
DWORD PID;
HWND targetWnd = FindWindow(ClassName, WindowName);
GetWindowThreadProcessId(targetWnd, &PID);
return PID;
}
- 12月 27 週一 201014:28
[P] 列舉 process - psapi.h
psapi.h
使用 psapi.h 會比較麻煩,得到的資訊也比 tlhelp32.h 方式不會比較少,這個例子只是提供簡單的資訊出來而已。使用前需要先連 psapi.lib。由於它的函式引數都特別長,所以這裡會每個引數都一個段行,如果覺得原始碼看得很吃力可以上 MSDN 查詢相關資訊。
程式碼
// ==================================
// filename: ListProcess.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
// ref : MSDN
//
// **** all rights reserve ****
// ==================================
#include <windows.h>
#include <psapi.h>
#include <stdio.h>
#pragma comment(lib, "psapi.lib")
使用 psapi.h 會比較麻煩,得到的資訊也比 tlhelp32.h 方式不會比較少,這個例子只是提供簡單的資訊出來而已。使用前需要先連 psapi.lib。由於它的函式引數都特別長,所以這裡會每個引數都一個段行,如果覺得原始碼看得很吃力可以上 MSDN 查詢相關資訊。
程式碼
// ==================================
// filename: ListProcess.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
// ref : MSDN
//
// **** all rights reserve ****
// ==================================
#include <windows.h>
#include <psapi.h>
#include <stdio.h>
#pragma comment(lib, "psapi.lib")
- 12月 27 週一 201014:27
[P] 列舉 process - tlhelp32.h
列舉 process 可用 tlhelp32.h 與 psapi.h,這裡先說明 tlhelp32.h。
tlhelp32.h
基本上不管是要列舉 process 還是 module、thread,步驟都一樣
A. 先用 CreateToolhelp32SnapShot 取得快照
B. 設定相關 struct 大小
C. 使用 xxxxx32First 取得第一個 process( module、thread) 。
D. 使用 xxxxx32Next 取得下一個 process(module、thread)。
tlhelp32.h
基本上不管是要列舉 process 還是 module、thread,步驟都一樣
A. 先用 CreateToolhelp32SnapShot 取得快照
B. 設定相關 struct 大小
C. 使用 xxxxx32First 取得第一個 process( module、thread) 。
D. 使用 xxxxx32Next 取得下一個 process(module、thread)。
- 12月 26 週日 201001:38
[P] 程序執行相關函式
這幾天在摸程序的相關函式,本來想說寫二、三篇就結束,不過發現其實東西還蠻多的,所以先發個簡介出來,基本上所有的東西在 MSDN 上都找得到,只是要花時間去理解、去看而已。沒學過作業系統,查過網路上一些資料、翻一些書後,整理述敘如下(發現有誤也請更正):
1. program: 程式,一群程式碼集合,事實上它是死的,一直放在電腦的某個角落。
2. process: 行程,有些書籍又稱 job(工作),由 program 執行時所產生之個體。一個程式如果可以多次執行的話就有多個 process。然而每個 process 所佔用的記憶體空間並不相同;即使這二個 process 是由同一個 program 所產生,不過他們所佔用之 memory space 仍為不同。生死過程主要為新生(new)、就緒(ready)、執行(running)、等待(wating)、終結(terminated)。其中 ready、running、waiting 這三個階段可能不只經歷一次,有興趣詳情再查看作業系統相關資料。
3. thread: 執行緒,也是 CPU 基本之執行單元,同一 process 之每個 thread,可共享其程式碼、資料、檔案等系統資源。一個 process 有一個以上之 thread,若有二個以上的 thread 則稱為 multi-thread。由於系統內有多個 process 同時存在,但CPU一時間只能處理一個 process,為使執行效果自然,故交付某些 process 競爭特質去搶 CPU 使用權,具搶進 CPU 特性的就叫 thread 。
1. program: 程式,一群程式碼集合,事實上它是死的,一直放在電腦的某個角落。
2. process: 行程,有些書籍又稱 job(工作),由 program 執行時所產生之個體。一個程式如果可以多次執行的話就有多個 process。然而每個 process 所佔用的記憶體空間並不相同;即使這二個 process 是由同一個 program 所產生,不過他們所佔用之 memory space 仍為不同。生死過程主要為新生(new)、就緒(ready)、執行(running)、等待(wating)、終結(terminated)。其中 ready、running、waiting 這三個階段可能不只經歷一次,有興趣詳情再查看作業系統相關資料。
3. thread: 執行緒,也是 CPU 基本之執行單元,同一 process 之每個 thread,可共享其程式碼、資料、檔案等系統資源。一個 process 有一個以上之 thread,若有二個以上的 thread 則稱為 multi-thread。由於系統內有多個 process 同時存在,但CPU一時間只能處理一個 process,為使執行效果自然,故交付某些 process 競爭特質去搶 CPU 使用權,具搶進 CPU 特性的就叫 thread 。
1
