簡體   English   中英

寫入物理內存地址

[英]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)&reg_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM