《未文件化WIN2000揭秘》筆記1

2021-04-13 21:48:37 字數 1413 閱讀 3927

the windows 2000 native api

win2000採用中斷機制將對核心服務的請求從使用者模式向核心模式傳遞。

nt平台暴露出乙個隱藏的事實是:存在乙個比win32 api更為基礎的呼叫介面native api,即使乙個普通的win32應用程式也可以在任何時候呼叫native api,並不需要到驅動程式一層才能訪問此介面。沒什麼技術上的限制-----僅僅是微軟不支援此種應用程式開發模式而已。

win32子系統和native api之間的關係可以由win32核心模組與windows 2000核心模組之間的依賴關係很好的解釋。

windows 2000核心api函式使用三種呼叫約定:__stdcall、__cdecl和__fastcall,它們處理引數的方式有很大的不同。__stdcall和__cdecl要求所有的引數都應傳入到堆疊中,但是,__fastcall為了使搜尋引數堆疊的開銷最小化,會將前兩個引數傳入cpu暫存器ecx和edx。從另一方面來看,__stdcall和__fastcall將引數從堆疊中移除的方式是一致的,這兩種呼叫約定均強制被呼叫**來完成這一工作。不過,對於__cdecl來說,這一工作將由呼叫者完成。儘管通過儲存堆疊指標(在呼叫和將堆疊指標恢復到其原始位置之前,來完成堆疊指標的儲存)可以很容易的解決清除堆疊的問題,但不論採用什麼樣的呼叫約定,驅動程式對於__fastcall約定都顯得無能為力。因此,呼叫者必須針對每個呼叫來明確地指出其是否採用了__fastcall呼叫約定,這樣驅動程式才能確定是否需要ecx和edx暫存器(如果必須的話)。

在使用者模式下呼叫核心

api函式

設計通向核心的門

執行於使用者模式的程式想呼叫核心模式的函式,必須解決兩個問題:

首先,必須以某種方式跳過使用者態和核心態之間的障礙。

其次,它必須將資料傳入和傳出。

對於由native api

組成的子集,

ntdll.dll

元件替我們完成了這一任務,它使用乙個中斷門來實現模式的切換,並使用

cpu暫存器來傳入指向呼叫者引數堆疊的指標,函式的執行結果也是通過

cpu暫存器返回給呼叫者的。

對於非native api的核心函式,作業系統沒有提供這種門機制。因此,我們必須自己來實現乙個這樣的門。 

整個問題可濃縮為如下幾個簡單的順序步驟:

1. 使用者模式的應用程式提交乙個

ioctl

請求,並傳入呼叫該函式所需的資訊,如,指向函式引數堆疊的指標。

2. 核心模式的驅動程式處理這一請求,並將引數複製到自己的堆疊中,然後呼叫制定函式,最後通過

ioctl

的輸出緩衝區將函式的執行結果返回給呼叫者。

3. 呼叫者取出

ioctl

操作的結果,並像對普通的

dll函式呼叫一樣進行處理。

修改 mac位址 win2000

在hkey local machine system controlset001 control class 0000 第一塊網絡卡 ndi params 下新增一項 networkaddress 再新增一字串paramdesc m a8 r 其資料值為mac位址e wm z b ew bqa 在h...

Win2000忘了密碼 有驚無險

伺服器密碼之後,又莫名其妙的進不去了,才停了幾分鐘,已經不停地有人打 來 怎麼回事?偏偏伺服器用的scsi硬碟和ntfs分割槽,光碟機也是壞的。勤打補丁,古老的輸入法漏洞自然進不去。好在找到這樣一篇文章how can i gain access to a windows nt 2000 xp 200...

自動登入Win2000系統

個人使用者在使用win2000時,每次登入都彈出登入對話方塊,顯得很麻煩,我們可以將win2000設定為自動登入。一 設定預設的使用者名稱 在 執行 框中輸入 regedt32.exe 開啟登錄檔編 輯器。選擇視窗選單項中的 hkey local ma chine 視窗,並 最大化。在左邊的目錄樹中...