reactos作業系統實現 73

2021-08-24 19:19:27 字數 2437 閱讀 3531

即插即用(plug and play,pnp)是計算機系統i/o裝置與部件配置的應用技術。pnp就是指插入就可以使用,不需要進行任何的硬體配置。其實還是需要安裝相應的驅動程式才可以使用的。隨著人們對計算機使用多樣化,不斷地需要新增各種各樣的硬體卡到計算機的主機板上,這樣就需要配置硬體卡的中斷、i/o所占用的資源,才能正常工作。這個過程是非常複雜的,經常需要手工配置,還需要檢視計算機那裡中斷是空閒的,那些i/o埠是沒有占用的。使用pnp技術以後,只需要作業系統做統一分配就行了。下面就來分析pnp初始化的實現**:

#001 void init_function

#002 pnpinit(void)

#003

#017

#018 rtlzeromemory(iopbustypeguidlist, sizeof(io_bus_type_guid_list));

#019 exinitializefastmutex(&iopbustypeguidlist->lock);

#020

初始化即插即用的事件通知支援。

#021 /* initialize pnp-event notification support */

#022 status = iopinitplugplayevents();

#023 if (!nt_success(status))

#024

#028

建立乙個根裝置驅動程式節點,儲存在ioprootdriverobject裡面。

#029 /*

#030 * create root device node

#031 */

#032

#033 status = iopcreatedriver(null, pnpdriverinitializeempty, null, 0, 0, &ioprootdriverobject);

#034 if (!nt_success(status))

#035

#039

建立乙個檔案裝置控制器物件儲存到根驅動程式節點裡。

#040 status = iocreatedevice(ioprootdriverobject, 0, null, file_device_controller,

#041 0, false, &pdo);

#042 if (!nt_success(status))

#043

#047

建立乙個檔案裝置控制器物件節點。

#048 status = iopcreatedevicenode(null, pdo, null, &ioprootdevicenode);

#049 if (!nt_success(status))

#050

#054

設定這個檔案裝置節點名稱為htree//root//。

#055 if (!rtlcreateunicodestring(&ioprootdevicenode->instancepath,

#056 l"htree//root//0"))

#057

#061

報告這個裝置到使用者模式的pnp管理器。

#062 /* report the device to the user-mode pnp manager */

#063 iopqueuetargetdeviceevent(&guid_device_arrival,

#064 &ioprootdevicenode->instancepath);

#065

#066 ioprootdevicenode->physicaldeviceobject->flags |= do_bus_enumerated_device;

#067 pnprootdriverentry(ioprootdriverobject, null);

#068 ioprootdevicenode->physicaldeviceobject->flags &= ~do_device_initializing;

#069 ioprootdriverobject->driverextension->adddevice(

#070 ioprootdriverobject,

#071 ioprootdevicenode->physicaldeviceobject);

#072

下面開始把freeloader檢測到的硬體資訊移到登錄檔system/currentcontrolset/root/鍵裡。

#073 /* move information about devices detected by freeloader to system/currentcontrolset/root/ */

#074 status = iopupdaterootkey();

#075 if (!nt_success(status))

#076

#080 }

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