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!
User contributions licensed under CC BY-SA 3.0