DuplicateHandle程序間控制代碼複製

2022-03-02 03:12:28 字數 2602 閱讀 5048

**:

1、bool duplicatehandle(

handle hsourceprocesshandle,

handle hsourcehandle,

handle htargetprocesshandle,

lphandle lptargethandle,

dword dwdesiredaccess,

bool binherithandle,

dword dwoptions

);作用:這個函式將乙個程序a控制代碼表中的記錄項(核心物件)複製到另乙個程序b的控制代碼表中。如果b同時得到了此記錄項(核心物件)的控制代碼值(一般通過程序間通訊,a程序將記錄項的控制代碼值傳遞給b程序),那麼在b程序中就可以訪問此記錄項(核心物件)。

引數1:源程序a核心物件的控制代碼;

引數3:目標程序b核心物件的控制代碼;

程序控制代碼的獲取:

1、如果程序是當前程序:getcurrentprocess();

2、如果程序不是當前程序:openprocess(__in dword dwdesiredaccess,__in bool binherithandle,__in dword dwprocessid);其中dwprocessid可以在任務管理器中獲得,或是通過程序間通訊獲得。

3、通過程序名稱獲取程序控制代碼:

handle getprocesshandle(lpctstr szname)

processentry32 pe;

bool bok;

pe.dwsize = sizeof(pe);

bok = process32first (hsanpshot, &pe);

if (!bok)

return null;

do bok = process32next (hsanpshot, &pe);

}while (bok);

return null;

}引數2:與引數1程序相關的任何型別核心物件的控制代碼;

引數4:handle變數位址,用來接收複製得到的handle值,可以通過程序間通訊,將此值傳遞到目標程序b,

以用來通知程序b,可以通過此控制代碼值來訪問複製來的核心物件。

引數5:targethandle控制代碼使用何種訪問掩碼(這個掩碼是在控制代碼表中的一項):

handle_flag_inherit、handle_flag_protect_from_close;

引數6:是否擁有繼承;

引數6:當設duplicate_same_access時,表示於源的核心物件所有標誌一樣,此時wdesiredaccess可標誌為0,

當設duplicate_close_source時,傳輸完後,關閉源中的核心物件控制代碼。

***但很多人都不知道為何要用複製控制代碼函式,我利用程序間通訊把控制代碼傳給目標程序不就行了嗎?

這樣的想法就大錯特錯了,我們表面上是在複製控制代碼值,實際上是把該控制代碼在源程序控制代碼表中的所有項複製到目標程序的控制代碼表中,而且使該核心物件的計數器+1了,如果只是簡單的只傳控制代碼值,目標程序的控制代碼表中是不會有所增加的。

將11.exe中的執行緒控制代碼複製,通過22.exe輸入複製的控制代碼,結束11.exe中的執行緒

例子:22.exe12

3456

78910

1112

1314

1516

1718

#include

#include

#include

#include

usingnamespacestd;

intmain

(void)

例子:11.exe

#include #include 

#include

#include

using

namespace

std;

unsigned __stdcall thread (

void *lppragma);

handle getprocesshandle(lpctstr szname);

int main (void

)unsigned __stdcall thread (

void *lppragma)

return0;

}handle getprocesshandle(lpctstr szname)

processentry32 pe;

bool bok;

pe.dwsize = sizeof

(pe);

bok = process32first (hsanpshot, &pe);

if (!bok)

return

null;

do bok = process32next (hsanpshot, &pe);

}while

(bok);

return

null;

}

DuplicateHandle複製控制代碼保護檔案

以獨佔方式開啟乙個檔案,然後將檔案的控制代碼複製到另乙個程序,比如複製到system程序,然後自己的程序就可以退出。在ring3下只要控制代碼沒有關閉,別人就刪除不了檔案。include include void setprivilege bool protectfile in lpctstr ps...

程序間SOCKET控制代碼傳遞 程序池應用

1。函式及結構介紹 開發通訊程式,經常遇到服務程式的開發,常見使用程序池及執行緒池,下面介紹一對在程序池應用非常有用的函式,sendmsg recvmsg,可以通過這組函式在程序中傳遞socket描述符。可以在主程序使用多路復用偵聽socket事件,將讀寫事件控制代碼傳遞給工作程序進行處理。在使用函...

程序間通訊 檔案對映與控制代碼繼承

程序間通訊有多種方法,其中常用的一種便是檔案對映。往往在不同專案中對檔案對映的使用策略也不一樣,這裡拿一種常遇到的情況來說明需要注意的。例如 a程序 system許可權 含有網路模組,負責與伺服器通訊,而b程序 任意使用者 負責實時收集資料,由於b程序處於任意使用者,不能確保它是否能與伺服器通訊,當...