reactos作業系統實現 71

2021-05-02 19:12:37 字數 3192 閱讀 6289

i/o管理器是管理著整個計算機的輸入和輸出的操作,因此它是乙個基本的組成部份。i/o管理器的初始化呼叫是在檔案reactos/ntoskrnl/ex/init.c裡,它主要呼叫i/o管理器的函式ioinitsystem()來實現,這個函式在檔案reactos/ntoskrnl/io/iomgr/iomgr.c裡。這個函式的實現**如下:

#001  boolean

#002  init_function

#003  ntapi

#004  ioinitsystem(in ploader_parameter_block loaderblock)

#005 

#079 

為引導裝置建立arc名稱。

#080      /* create arc names for boot devices */

#081      iopcreatearcnames(loaderblock);

#082 

標記系統引導分割槽。

#083      /* mark the system boot partition */

#084      if (!iopmarkbootpartition(loaderblock)) return false;

#085 

初始化kdb除錯系統。

#086  #ifndef _winkd_

#087      /* read kdb data */

#088      kdbinit();

#089 

#090      /* i/o is now setup for disk access, so phase 3 */

#091      kdinitsystem(3, loaderblock);

#092  #endif

#093 

載入pnp管理器發現的驅動服務程式。

#094      /* load services for devices found by pnp manager */

#095      iopinitializepnpservices(ioprootdevicenode);

#096 

載入系統驅動程式。

#097      /* load system start drivers */

#098      pnpsysteminit = true;

#099      iopinitializesystemdrivers();

#100 

刪除組驅動程式列表,釋放占用系統資源。

#101      /* destroy the group driver list */

#102      iodestroydriverlist();

#103 

重新初始化驅動程式。

#104      /* reinitialize drivers that requested it */

#105      iopreinitializedrivers();

#106 

轉換系統根目錄的arc名稱為nt路徑。

#107      /* convert systemroot from arc to nt path */

#108      status = iopreassignsystemroot(loaderblock, &ntbootpath);

#109      if (!nt_success(status)) return false;

#110 

設定根路徑的字串。

#111      /* set the ansi_string for the root path */

#112      rootstring.maximumlength = ntsystemroot.maximumlength / sizeof(wchar);

#113      rootstring.length = 0;

#114      rootstring.buffer = exallocatepoolwithtag(pagedpool,

#115                                                rootstring.maximumlength,

#116                                                tag_io);

#117 

#118      /* convert the path into the ansi_string */

#119      status = rtlunicodestringtoansistring(&rootstring, &ntsystemroot, false);

#120      if (!nt_success(status)) return false;

#121 

設定驅動器的名稱。

#122      /* assign drive letters */

#123      ioassigndriveletters(loaderblock,

#124                           &ntbootpath,

#125                           (puchar)rootstring.buffer,

#126                           &rootstring);

#127 

#128      /* update system root */

#129      status = rtlansistringtounicodestring(&ntsystemroot, &rootstring, false);

#130      if (!nt_success(status)) return false;

#131 

載入系統的動態連線和其它入口程式。

#132      /* load the system dll and its entrypoints */

#133      if (!nt_success(pslocatesystemdll())) return false;

#134 

#135      /* return success */

#136      return true;

#137  }

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