使用驅動直寫記憶體時,關於型別需要注意的問題

2021-06-01 19:24:53 字數 592 閱讀 8754

當在高層應用時,因為使用memcpy或者使用指標直接複製,而很少使用pvoid型別,所以在驅動程式中進行直接複製記憶體時,藍屏到要崩潰.

rtlcopymemory這個函式的引數是按照使用者給出的型別來進行複製,所以當給出不同型別,複製得到的結果也會不同.

主要對比一下byte,word,dword這3種型別

byte也是char這點要先明白,記憶體占用一位元組,word和dword分別占用2和4位元組.

記憶體中的內容是從右向左的,所以這點很重要,當直接寫入的時候就要特別注意了.

比如0x12345678,我們使用byte時,rtlcopymemory會將這些數字按順序直接複製到指定位置.

而使用word時,會按每4位為單進行複製,即3412 7856,而dword同樣會複製成78563412這種從右向左的順序.

從以上的分析中得出來乙個結論,就是按照我們的"從左到右"的意願來進行寫入時,最好使用byte

而使用其它型別時,就要注意寫入順序問題了.

rtlcopymemory預設的寫入型別是dword,因為void* 預設32位系統也是占用4位元組.

因為自學的原因,很多問題要向"牆"撞n次後才明白,希望對不明白的人有所幫助.

使用blueZ進行藍芽程式設計時需要注意的問題

一 不要用到哪個bluez標頭檔案中定義的內容就只去包含這個標頭檔案。而應該將bluetooth bluetooth.h最先加入。類似 include btproto hci include struct hci dev info include hci devid include l2cap in...

使用blueZ進行藍芽程式設計時需要注意的問題

一 不要用到哪個bluez標頭檔案中定義的內容就只去包含這個標頭檔案。而應該將bluetooth bluetooth.h最先加入。類似 include btproto hci include struct hci dev info include hci devid include l2cap in...

使用setById時需要注意的地方

在使用listview的時候,通常要對某個item中的乙個控制項進行操作,那麼我們就需要取得這個控制項的引用 這個時候可以使用view.setid int id 來設定乙個id值,然後再通過view.getviewbyid int id 精確得取得該控制項 舉個例子 override public ...