目前,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...