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