reactos作業系統實現 68

2021-08-24 19:12:49 字數 2912 閱讀 4038

前面介紹怎麼樣呼叫動態連線庫里的installreactos函式,下面就來分析這個函式的**,看看這個函式是怎麼執行嚮導介面,又做了些什麼樣的工作。如下:

#001 dword winapi

#002 installreactos(hinstance hinstance)

#003

#017

建立桌面、選單、檔案關聯的快捷方式。

#018 if (!createshortcuts())

#019

#023

建立安全相關的帳號管理。

#024 /* initialize the security account manager (sam) */

#025 if (!saminitializesam())

#026

#030

為安裝使用者提供乙個隨便的電腦名稱。

#031 /* create the semi-random domain-sid */

#032 if (!createrandomsid(&domainsid))

#033

#037

把這個電腦名稱儲存到登錄檔。

#038 /* set the domain sid (aka computer sid) */

#039 if (!samsetdomainsid(domainsid))

#040

#045

#048

建立管理員帳號。

#049 /* create the administrator account */

#050 if (!samcreateuser(l"administrator", l"", adminsid))

#051

#065 }

#066

#067 rtlfreesid(adminsid);

#068 rtlfreesid(domainsid);

#069

以管理員的帳號登入。

#070 /* ros hack, as long as ntunloadkey is not implemented */

#071

#086 zeromemory(&profileinfo, sizeof(profileinfow));

#087 profileinfo.dwsize = sizeof(profileinfow);

#088 profileinfo.lpusername = l"administrator";

#089 profileinfo.dwflags = pi_noui;

#090 loaduserprofilew(htoken, &profileinfo);

#091 closehandle(htoken);

#092 }

#093 else

#094

#097 }

#098 /* end of ros hack */

#099

建立系統工作的臨時目錄。

#100 createtempdir(l"temp");

#101 createtempdir(l"tmp");

#102

建立system目錄。

#103 if (getwindowsdirectory(szbuffer, sizeof(szbuffer) / sizeof(tchar)))

#104

#109

根據syssetup.inf檔案來安裝相應的元件,還安裝pnp管理器。

#110 if (!commoninstall())

#111 return 0;

#112

初始化讓使用者選擇輸入引數的嚮導介面。

#113 installwizard();

#114

關閉syssetup.inf檔案。

#115 setupcloseinffile(hsyssetupinf);

設定系統安裝的型別。

#116 setsetuptype(0);

#117

#118 logitem(syssetup_severity_information, l"installing reactos done");

關閉安裝的log檔案。

#119 terminatesetupactionlog();

#120

獲取關閉系統的特權。

#121 /* get shutdown privilege */

#122 if (! openprocesstoken(getcurrentprocess(), token_adjust_privileges, &token))

#123

#127 if (!lookupprivilegevalue(

#128 null,

#129 se_shutdown_name,

#130 &privs.privileges[0].luid))

#131

#135 privs.privilegecount = 1;

#136 privs.privileges[0].attributes = se_privilege_enabled;

#137 if (adjusttokenprivileges(

#138 token,

#139 false,

#140 &privs,

#141 0,

#142 (ptoken_privileges)null,

#143 null) == 0)

#144

#148

退系統,並重新啟動。

#149 exitwindow***(ewx_reboot, 0);

#150 return 0;

#151 }

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...