[英]Write to physical memory address
我的內核模式驅動程序內部是以下代碼:
PHYSICAL_ADDRESS physAddr;
PVOID pvk;
unsigned int reg_addr; // physical address to write to
unsigned int* reg_val; // pointer to value to be written
// assume reg_addr and reg_val are initialized to some values
physAddr.QuadPart = (ULONGLONG)reg_addr;
pvk = MmMapIoSpace(physAddr,sizeof(reg_addr),MmNonCached);
WRITE_REGISTER_ULONG((ULONG*)pvk,(ULONG)®_val);
該地址未寫入,我不確定為什么。 這是正確的程序還是我錯過了一步? 另外,我的指針算法會出錯嗎? 我嘗試了所有排列,但沒有一個產生正確的結果。 我想通過指定的物理內存reg_addr
與由價值指向是什么規定被寫入reg_val
。
您的代碼有些奇怪/錯誤的地方:-
首先, PHYSICAL_ADDRESS.QuadPart
是一個64位的值,但是您要為其分配一個32位的int。 您確定這就是您想要的嗎?
其次,假設您要映射32位“ ULONG”寄存器:
pvk = MmMapIoSpace(physAddr,sizeof(reg_addr),MmNonCached);
那可能會起作用,但是我想你的意思是
pvk = MmMapIoSpace(physAddr, sizeof(ULONG), MmNonCached);
最后,您正在將指針變量reg_val
的地址寫入寄存器。 您的評論暗示您要編寫reg_val
指向的值? 如果是這樣,請改用它。
WRITE_REGISTER_ULONG((ULONG*)pvk, *reg_val);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.