功能驅動將構造請求包,就可以傳送到底層匯流排驅動上。因此需要建立乙個irp,這就需要用iobuilddeviceiocontrolrequest建立乙個io控制碼的irp,用iocalldriver將urb傳送到底層匯流排驅動上。由於上層驅動無法知道底層驅動是同步還是非同步完成的,因此需要做乙個判斷。if語句判斷當非同步完成irp時,用事件等待匯流排驅動完成這個irp。
#001 ntstatus
#002 vfatblockdeviceiocontrol (in pdevice_object deviceobject,
#003 in ulong ctlcode,
#004 in pvoid inputbuffer optional,
#005 in ulong inputbuffersize,
#006 in out pvoid outputbuffer optional,
#007 in out pulong outputbuffersize,
#008 in boolean override)
#009
#039
是否需要獲取下一層的裝置棧。
#040 if (override)
#041
#045
#046 dprint ("calling io driver... with irp %p/n", irp);
把irp包傳送到下乙個裝置驅動程式。
#047 status = iocalldriver(deviceobject, irp);
#048
#049 dprint ("waiting for io operation for %p/n", irp);
如果在阻塞狀態,就等待下層驅動程式完成。
#050 if (status == status_pending)
#051
#058
返回輸出緩衝區的大小。
#059 if (outputbuffersize)
#060
#063
#064 dprint("returning status %x/n", status);
#065
#066 return status;
#067 }
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...