1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          復制對象句柄DuplicateHandle

          來源:互聯網轉載 時間:2024-01-29 07:39:35

          DuplicateHandle文檔化解釋

            The DuplicateHandle function duplicates an object handle. The duplicate handle refers to the same object as the original handle. Therefore, any changes to the object are reflected through both handles. For example, the current file mark for a file handle is always the same for both handles.
          使用 DuplicateHandle 函數將源進程 ProcessHandle 的句柄表中的信息如對象句柄 MutexHandle 復制到當前目標進程的句柄表中

          BOOL DuplicateHandle(  HANDLE hSourceProcessHandle, // handle to source process 源進程句柄  HANDLE hSourceHandle, // handle to duplicate 被拷貝的信息(應與源進程句柄的進程有關)  HANDLE hTargetProcessHandle, // handle to target process 目標進程句柄  LPHANDLE lpTargetHandle, // duplicate handle 用來接收被拷貝的信息_Out_  DWORD dwDesiredAccess, // requested access 傳0  BOOL bInheritHandle, // handle inheritance option 處理繼承選項傳FALSE或者TURE  DWORD dwOptions // optional actions 如DUPLICATE_SAME_ACCESS,讓目標進程對被拷貝的句柄的內核對象也有訪問權限);

          一、參數說明:

            調用DuplicateHandle時,它的第一個參數和第三個參數 (hSourceProcessHandle 和 hTargetProcessHandle) 是進程內核對象句柄。這兩個句柄本身必須相對于調用DuplicateHandle函數的那個進程。此外,這兩個參數標識的必須是進程內核對象;如果我們傳遞的句柄指向的是其他類型的內核對象,函數調用就會失敗。我們將在第4章詳細討論進程內核對象。就目前來說,我們只需知道一旦啟動一個新的進程,系統就會創建一個進程內核對象。

            第二個參數 hSourceHandle 是指向任何類型的內核對象的一個句柄。但是,它的句柄值一定不能與調用 DuplicateHandle 函數的那個進程相關(不能指向目標進程 TargetProcess 的內核對象)。相反,該句柄必須與 hSourceProcessHandle 句柄所標識的源進程相關(例如源進程創建了文件,返回了文件對象句柄)。函數會將源進程中的指定的句柄信息(FileHandle)復制到 hTargetProcessHanle 所標識的目標進程的句柄表中。

            第四個參數是 phTargetHandle ,它是一個 HANDLE 變量的地址,用來接收復制得到的 HANDLE 值。

          二、參考使用:

          [B進程]

          參考使用1:將偽句柄轉換成真實句柄
          HANDLE PseudoProcessHandle = GetCurrentProcess(); //獲得偽句柄 -1HANDLE RealProcessHandle = NULL;//將偽句柄轉換成真實句柄DuplicateHandle(GetCurrentProcess(), PseudoProcessHandle, GetCurrentProcess(), &RealProcessHandle,0, FALSE, DUPLICATE_SAME_ACCESS);//通過上面的函數就可以將一個進程中的一個線程的偽句柄轉換成正真的句柄//DuplicateHandle遞增了內核對象的句柄數最好要調用CloseHandle();
          參考使用2:拷貝當前進程中的指定對象的句柄到目標進程中
          HANDLE v1 = NULL;//DuplicateHandle拷貝當前進程中的FileHandle句柄到目標進程中BOOL IsOk = DuplicateHandle(GetCurrentProcess(), FileHandle, ProcessHandle, &v1, 0, FALSE, DUPLICATE_SAME_ACCESS);//當前進程句柄ProcessHandle//被拷貝的文件句柄(當前進程里面創建的文件句柄)//拷貝到目標進程的句柄//v1也是句柄,用來接收目標進程上拷貝上的句柄的數//DUPLICATE_SAME_ACCESS,讓目標進程對被拷貝的句柄的內核對象也有訪問權限
          參考使用3:拷貝目標進程句柄表中指定句柄到當前進程句柄表中
              //如何知道進程    _tscanf(_T("%d"), &ProcessIdentify);    // 目標進程id    _tscanf(_T("%d"), &MappingHandle);    // 目標進程句柄表下的MappingHandle    //根據目標進程的ID打開目標進程    ProcessHandle = SunOpenProcess(PROCESS_DUP_HANDLE, FALSE, ProcessIdentify);    //Anti策略    //DuplicateHandle獲取進程虛擬空間地址    BOOL IsOk = DuplicateHandle(ProcessHandle, MappingHandle, GetCurrentProcess(), &v1, 0, FALSE, DUPLICATE_SAME_ACCESS);

          三、其他說明

            使用DuplicateHandle函數(來復制內核對象句柄)所遇到的問題和繼承(內核對象句柄)時同樣:目標進程不知道它現在能訪問一個新的內核對象。所以,進程C必須以某種方式來通1進程T,告訴它現在可以訪問一個內核對象了,而且必須使用某種形式的進程間通信機制,將hObj中的句柄值傳給進程T,顯然,使用命令行參數或者更改進程T的環境變量是行不通的,因為進程已經啟動并開始運行了。我們必須使用窗口消息或者其他進程間通信(IPC)機制。

          四、演示程序

            將當前進程EProcess里的FileHandle的句柄拷貝到另一個進程explore.exe身上,并使其擁有對被拷貝句柄的內核對象的訪問權限。

            代碼測試:

            重新生成文件,將在文件目錄下生成一個ReadMe文件,打開文件,再運行exe程序,發現無法刪除此文件。explorer進程不關閉,文件句柄關不掉,FIleObject就關不掉,所以無法關閉記事本。
          在代碼里就是把第二參數句柄粘貼到第三參數身上,就相當于你把自己的句柄拷貝到了別人身上了,所以就存在占坑現象,第二參數句柄指向的內核對象關閉不了,其對應的進程無法關閉。

          #include "DuplicateHandle.h"BOOL __EnableDebugPrivilege = TRUE;//定義參數void _tmain(int argc, TCHAR* argv[], TCHAR *envp[]){    Sub_1();    return;}void Sub_1(){    HANDLE ProcessHandle = NULL;    //打開一個進程,得到進程句柄    ProcessHandle = SunOpenProcess(PROCESS_DUP_HANDLE, FALSE, (HANDLE)10688);  //explore.exe進程                //SunOpenProcess中需要提權函數SunEnableSunDebugPrivilege    if (ProcessHandle == NULL)    {        goto Exit;    }    HANDLE FileHandle = INVALID_HANDLE_VALUE;    //在當前進程中創建一個文件,返回文件句柄    FileHandle = CreateFile(_T("ReadMe.txt"), GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);    if (FileHandle == INVALID_HANDLE_VALUE)    {        goto Exit;    }    HANDLE v1 = NULL;    //DuplicateHandle拷貝當前進程中的FileHandle句柄到目標進程中    BOOL IsOk = DuplicateHandle(GetCurrentProcess(), FileHandle, ProcessHandle, &v1, 0,        FALSE, DUPLICATE_SAME_ACCESS);    //當前進程句柄ProcessHandle    //被拷貝的文件句柄(當前進程里面創建的文件句柄)    //拷貝到目標進程的句柄    //v1也是句柄,用來接收目標進程上拷貝上的句柄的數    //DUPLICATE_SAME_ACCESS,讓目標進程對被拷貝的句柄的內核對象也有訪問權限    if (FileHandle != INVALID_HANDLE_VALUE)    {        SunCloseHandle(FileHandle);        FileHandle = INVALID_HANDLE_VALUE;    }Exit:    if (ProcessHandle != NULL)    {        SunCloseHandle(ProcessHandle);        ProcessHandle = NULL;    }}/*提權函數*/DWORD SunEnableSunDebugPrivilege(HANDLE ProcessHandle, BOOL IsEnable){    DWORD  LastError;    HANDLE TokenHandle = 0;    if (!OpenProcessToken(ProcessHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &TokenHandle))    {        LastError = GetLastError();        if (TokenHandle)            SunCloseHandle(TokenHandle);        return LastError;    }    TOKEN_PRIVILEGES TokenPrivileges;    memset(&TokenPrivileges, 0, sizeof(TOKEN_PRIVILEGES));    LUID v1;    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &v1))    {        LastError = GetLastError();        SunCloseHandle(TokenHandle);        return LastError;    }    TokenPrivileges.PrivilegeCount = 1;    TokenPrivileges.Privileges[0].Luid = v1;    if (IsEnable)        TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;    else        TokenPrivileges.Privileges[0].Attributes = 0;    AdjustTokenPrivileges(TokenHandle, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);    LastError = GetLastError();    SunCloseHandle(TokenHandle);    return LastError;}HANDLE SunOpenProcess(DWORD DesiredAccess, BOOL IsInheritHandle, HANDLE ProcessIdentify){    //提權    if (__EnableDebugPrivilege)        //全局變量__EnableDebugPrivilege    {        SunEnableSunDebugPrivilege(GetCurrentProcess(), TRUE);    }    //打開進程,根據目標進程的進程ID得到進程句柄    HANDLE ProcessHandle = OpenProcess(DesiredAccess, IsInheritHandle, (DWORD)ProcessIdentify);    DWORD LastError = GetLastError();    //關閉權限    if (__EnableDebugPrivilege)    {        SunEnableSunDebugPrivilege(GetCurrentProcess(), FALSE);    }    SetLastError(LastError);    return ProcessHandle;}BOOL SunCloseHandle(HANDLE HandleValue){    DWORD HandleFlags;    if (GetHandleInformation(HandleValue, &HandleFlags)        && (HandleFlags & HANDLE_FLAG_PROTECT_FROM_CLOSE) != HANDLE_FLAG_PROTECT_FROM_CLOSE)        return !!CloseHandle(HandleValue);    return FALSE;}
          標簽:duplicatehandle-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          1萬盧比可以買多少東西? ;日常開銷沒問題。首先,要看是哪個國家 盧比是。盧比是許多國家的貨幣,如印度、巴基斯坦、斯里蘭卡等。不同國家的盧比匯率不一樣。如果是印度盧比,那么100萬印度盧比大約可以兌換9.7萬。盧布是俄羅斯貨幣,可以在銀行直接兌換。1百萬億等于多少盧比?10000000印度盧比=10239300.2187。1=9.7663印度盧比。100萬盧比在巴基斯坦算有錢人嗎?和巴基斯坦其實...

          office文件發到手機里打不開?pdf文件回到智能手機上不能打開是因為未直接安裝對應的應用廣泛。安裝microsoft相關應用即可word中常見文件格式為答案及評分標準和.ppt文件格式,在智能手機上需隨機的運用才也可以打開常見的又以下幾款軟件啊1、rtfumentstakedocumentssee:接受創建角色微軟操作系統word中、excel表格及visio原文件,并能查看網頁pdf文檔。2...

          全國教育科研信息網是真的嗎?是真的。教育研究網是經有關教育部門批準,在國家信息中心備案,由教育部、教育科學院、教材開發中心、北京師范大學等研究機構的專家教授發起設立,具有獨立法人資格的跨地區、跨學科的教育研究機構。0-@qq.com是真的。網站注冊并取得注冊許可證號,即國家認可的網站。全國教育科研信息網的備案號為:北京ICP備17074413。網站備案的目的是防止互聯網上的非法網站經營活動,打擊不...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>