WINDOWS核心編程第三章核心對象的一點細節

來源:互聯網
上載者:User

久仰此書大名已久,可惜以前沒看懂。。。現在感覺有點基礎了回頭再看,感覺多少有點死皮賴臉的嫌疑。。。。

關於啥是核心對象請看第三章就對了,看的時候發現書上說

GetCurrentProcess返回的是偽控制代碼(對GetCurrentDirectory比較熟悉,吃過一次虧,進程工作目錄跟進程的鏡像檔案EXE所在的路徑完全不是一回事,尤其設定了程式開機自啟動,重啟後預設的進程工作目錄是系統目錄,所以特別提示一下,應該用GetModuleFileName。。。),親自測試了一下,事實如此,每次得到的handle都是0xfffffff,是專門為本進程提供的,我們知道核心對象跟使用者物件或者GDI對象有個很大的區別在於:核心對象是跟進程密切相關的,比如說有一個視窗屬於其他進程的,只要得到這個視窗的控制代碼,我們就可以對這個視窗操作(此視窗有別於核心對象,正因如此才能如此方便的操作),但是如果某個對象是其他進程的核心對象,你在本地進程中得到該核心對象的控制代碼,然後對其操作,就是錯誤的,原因就是核心對象跟進程密切相關,而其他對象則例外。當然微軟這麼做目的也是很明顯的,這樣可以提供作業系統的健壯性,確實。

當然,如果只在本進程實現操作,用GetCurrentProcess得到的偽控制代碼已經足夠了,假如實現進程之間通訊呢?這個時候假的控制代碼就滿足不了要求了,書上說了一個函數DuplicateHandle,這個可以勝任,他可以把假的控制代碼轉換成真的。

正是書上沒執行個體代碼,所以剛開始看的時候有點迷茫,開始始終沒看明白如何能轉換,於是我把這章看了3遍。。。。。

 

測試:

#include<windows.h><br />#include<stdio.h><br />void main()<br />{<br />HANDLE hProcess=GetCurrentProcess();<br />HANDLE hTargetHandle;<br />DuplicateHandle(hProcess,hProcess,hProcess,&hTargetHandle,0,FALSE,DUPLICATE_SAME_ACCESS);<br />printf("%x/n",hTargetHandle);<br /> CloseHandle(hTargetHandle);<br />system("pause");</p><p>}

偽控制代碼是不要關閉的,但是MSDN說了:
The pseudo handle need not be closed when it is no longer needed. Calling the CloseHandle function with a pseudo handle has no effect. If the pseudo handle is duplicated by DuplicateHandle, the duplicate handle must be closed.
因此上述例子中還得加上
CloseHandle(hTargetHandle);

這個應該就是了吧。如果不是,歡迎扔磚頭。

其實這樣的方法用DuplicateHandle,感覺有點摧殘這個API,其實這個函數功能很強大的,字母意思,複製控制代碼,我們可以把一個核心對象的控制代碼(比如一個檔案核心對象CreateFile("蒼井空全集")調用的產物)複製到XP上的SYSTEM 進程上,這個進程的ID是4或者8,XP上貌似都是4吧,這樣我們就很低調的實現了一種效果:此檔案現在不能被移動,修改,重新命名,刪除等等一系列操作了,反倒是保護了這些檔案的安全,當然了前提得有一定的許可權。

路漫漫其修遠兮。。。。。。磚頭無止境。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.