reactos作業系統實現 123

2021-05-09 23:43:43 字數 4183 閱讀 7118

目前,reactos主要使用fat的檔案系統,因此下面就先來分析這個檔案系統,以便了解這個檔案系統的功能。這個檔案系統的實現是在驅動程式fastfat.sys裡實現的,所以來分析這個驅動程式的原始碼,就可以了解fat檔案系統了。

6.2.1fat檔案系統驅動程式入口函式

fat的檔案系統是當作乙個驅動程式來載入到系統裡,因此它也有驅動程式的形式了,也就是它的入口點函式,還是driverentry函式,它的實現**如下:

#001  ntstatus ntapi

#002  driverentry(pdriver_object driverobject,

#003         punicode_string registrypath)

#004  /*

#005   * function: called by the system to initialize the driver

#006   * arguments:

#007   *           driverobject = object describing this driver

#008   *           registrypath = path to our configuration entries

#009   * returns: success or failure

#010   */

#011 

#037 

#038 

#039 

#040     if (!nt_success(status))

#041      

#044 

獲取fat全域性資料區的指標。

#045     vfatglobaldata = deviceobject->deviceextension;

清空fat全域性資料區。

#046     rtlzeromemory (vfatglobaldata, sizeof(vfat_global_data));

#047     vfatglobaldata->driverobject = driverobject;

#048     vfatglobaldata->deviceobject = deviceobject;

#049 

設定裝置是直接訪問io的方式。

#050     deviceobject->flags |= do_direct_io;

設定驅動程式的irp訊息處理函式。

#051     driverobject->majorfunction[irp_mj_close] = vfatbuildrequest;

#052     driverobject->majorfunction[irp_mj_create] = vfatbuildrequest;

#053     driverobject->majorfunction[irp_mj_read] = vfatbuildrequest;

#054     driverobject->majorfunction[irp_mj_write] = vfatbuildrequest;

#055     driverobject->majorfunction[irp_mj_file_system_control] = vfatbuildrequest;

#056     driverobject->majorfunction[irp_mj_query_information] = vfatbuildrequest;

#057     driverobject->majorfunction[irp_mj_set_information] = vfatbuildrequest;

#058     driverobject->majorfunction[irp_mj_directory_control] = vfatbuildrequest;

#059     driverobject->majorfunction[irp_mj_query_volume_information] =

#060       vfatbuildrequest;

#061     driverobject->majorfunction[irp_mj_set_volume_information] =

#062       vfatbuildrequest;

#063     driverobject->majorfunction[irp_mj_shutdown] = vfatshutdown;

#064     driverobject->majorfunction[irp_mj_lock_control] = vfatbuildrequest;

#065     driverobject->majorfunction[irp_mj_cleanup] = vfatbuildrequest;

#066     driverobject->majorfunction[irp_mj_flush_buffers] = vfatbuildrequest;

#067 

#068     driverobject->driverunload = null;

#069 

快取管理函式。

#070     /* cache manager */

#071     vfatglobaldata->cachemgrcallbacks.acquireforlazywrite = vfatacquireforlazywrite;

#072     vfatglobaldata->cachemgrcallbacks.releasefromlazywrite = vfatreleasefromlazywrite;

#073     vfatglobaldata->cachemgrcallbacks.acquireforreadahead = vfatacquireforreadahead;

#074     vfatglobaldata->cachemgrcallbacks.releasefromreadahead = vfatreleasefromreadahead;

#075 

快速的i/o操作函式。

#076     /* fast i/o */

#077     vfatinitfastioroutines(&vfatglobaldata->fastiodispatch);

#078     driverobject->fastiodispatch = &vfatglobaldata->fastiodispatch;

#079 

後備列表,以便提高速度。

#080     /* private lists */

#081     exinitializenpagedlookasidelist(&vfatglobaldata->fcblookasidelist,

#082                                     null, null, 0, sizeof(vfatfcb), tag_fcb, 0);

#083     exinitializenpagedlookasidelist(&vfatglobaldata->ccblookasidelist,

#084                                     null, null, 0, sizeof(vfatccb), tag_ccb, 0);

#085     exinitializenpagedlookasidelist(&vfatglobaldata->irpcontextlookasidelist,

#086                                     null, null, 0, sizeof(vfat_irp_context), tag_irp, 0);

#087 

初始化資源列表。

#088     exinitializeresourcelite(&vfatglobaldata->volumelistlock);

#089     initializelisthead(&vfatglobaldata->volumelisthead);

註冊檔案系統到系統列表裡。

#090     ioregisterfilesystem(deviceobject);

#091     return(status_success);

#092  }

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