在Kernel Model的驱动程序中向给定的寄存器地址、内存地址或IO端口地址等16进制的地址写入指定的值。
主要依靠的是MSDN中提供的MmMapIoSpace函数进行的。该函数将一个十六进制的物理地址映射到一个指针,然后针对该指针进行操作即可改变对应的物理单元内的数据。该函数的具体描述可参看微软的MSDN:
https://msdn.microsoft.com/zh-cn/office/ff554618(v=msdn.10).aspx
以下是使用该方法操作物理地址的代码示例:
LARGE_INTEGER memAddress;
PULONG pMemAddress;
memAddress.QuadPart= 0xFED0D048;
pMemAddress = (PULONG) MmMapIoSpace(memAddress,
sizeof(ULONG), MmNonCached);
*pMemAddress= 0x00000000;
KeStallExecutionProcessor(300* 1000);
*p