What the right way to access memory mapped register is?

1

I'm new to developing device driver, but I've run into trouble shortly after starting.

I'm making Intel High Definition Audio Controller driver, and I checked in the specification that the access on the memory mapped register would be necessary.

I found their addresses using devmgmt.msc and RWEverything, they're started at 0xF7FF8000.

When I wrote DriverEntry, I directly accessed that base address(e.g. (unsigned char*)0xf7ff8000) and used index and offset to access specific register, but when I started driver, BSOD occured at the point I read a value from one of them register(It was CorbSize register on offset 0x4e)

BSOD stop code was 0x00000050, "PAGE_FAULT_IN_NONPAGED_AREA". And kd showed me that f7ff8000 is freed (or corrupted) pool and there's Bad allocation size @f7ff8000, too large...

Are those error codes mean that address 0xF7FF8000 is unavailable data space? But I checked the contents on 0xF7FF8000 using RWEverything, and there were constantly changing values on that space, even though db 0xf7ff8000 command on kd showed me only ??-filled memory space...

I really wonder what the problem is, and what the right way to access their memory mapped registers is.

Sorry for my bad english skill :'(

Thanks!

c
operating-system
kernel
driver
asked on Stack Overflow Nov 6, 2018 by Liddell • edited Nov 6, 2018 by Liddell

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0