reactos作業系統實現 51

2021-08-24 18:49:40 字數 1181 閱讀 8604

從前面的分析可以知道,安裝reactos到硬碟裡的過程,是由程式usetup.exe來實現的,那麼下面就來分析這個程式的實現過程,了解作業系統的安裝過程。開啟reactos原始碼的目錄reactos/base/setup/usetup,就可以看到相關工程的**。

在仔細分析**之前,我們需要了解什麼是核心應用程式。從前面可以知道ntoskrnl.exe核心執行最後,就呼叫應用程式usetup.exe來執行,再仔細想一下,這個程式執行在smss.exe之前,也執行在所有子系統之前。也就是意味著smss.exe和所有子系統的api介面是不能使用的,只能使用ntoskrnl.exe核心的api介面,否則就會出錯。因此,這一類沒有使用所有子系統介面api的程式,就稱作為核心應用程式。所有在子系統初始化前執行的應用程式,都是核心應用程式。核心應用程式的入口點,也跟其它子系統的應用程式入口點不同,它是從函式ntprocessstartup開始載入執行,而不像winmain和main作為程式入口點函式。

下面就來分析入口**,在檔案裡reactos/base/setup/usetup/inte***ce/usetup.c如下:

#001 #ifdef __reactos__

#002

#003 void ntapi

#004 ntprocessstartup(ppeb peb)

#005

#012 #endif /* __reactos__ */

在上面的函式裡呼叫函式rtlnormalizeprocessparams來處理引數正規化,為什麼要這樣處理呢?因為在呼叫在核心函式已經反正規化處理,如下:

#174 status = rtlcreateuserprocess(&smssname,

#175 obj_case_insensitive,

#176 rtldenormalizeprocessparams(processparams),

#177 null,

#178 null,

#179 null,

#180 false,

#181 null,

#182 null,

#183 processinformation);

在176行**裡,就是呼叫函式rtldenormalizeprocessparams反正規化處理。這樣處理有什麼樣的作用呢?我想是把引數指標設定為偏移值後,如果再非法訪問,就會訪問系統保留記憶體空間,而出現異常處理。

reactos作業系統實現 178

sendmessagew函式主要用來向視窗傳送訊息。下面就是它的實現 001 lresult winapi 002 sendmessagew hwnd wnd,003 uint msg,004 wparam wparam,005 lparam lparam 006 028 029 填寫訊息結構。03...

reactos作業系統實現 187

隨著全球化的發展,開發軟體都是面向多語言的環境。目前大多數程式都是採用不同字型來顯示不同語言的辦法,那麼有沒有一種更好的辦法,一種字型就可以解決全球語言的顯示呢?答案肯定的,它就是採用邏輯字型ms shell dlg和ms shell dlg2。比如開發應用程式時,就看到在資源裡可以設定ms she...

reactos作業系統實現 193

selectobject函式是將物件選定到指定的裝置場境中。具體實現 如下 001 hgdiobj 002 winapi 003 selectobject hdc hdc,004 hgdiobj hgdiobj 005 016 獲取選擇dc的物件正確的控制代碼。017 hgdiobj gdifixu...