私のカーネルモードドライバーの中には、次のコードがあります。
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
。