| 313 | // DMI size is 65536 bytes: |
| 314 | _IRQL_requires_max_(DISPATCH_LEVEL) |
| 315 | BOOLEAN ReadDmiMemory(OUT PVOID Buffer, SIZE_T Size) { |
| 316 | PHYSICAL_ADDRESS DmiAddress; |
| 317 | DmiAddress.QuadPart = 0xF0000; |
| 318 | PVOID DmiMemory = MmMapIoSpace(DmiAddress, Size, MmNonCached); |
| 319 | BOOLEAN Status = DmiMemory != NULL; |
| 320 | if (Status) { |
| 321 | RtlMoveMemory(Buffer, DmiMemory, Size); |
| 322 | MmUnmapIoSpace(DmiMemory, Size); |
| 323 | } |
| 324 | return Status; |
| 325 | } |
| 326 | |
| 327 | _IRQL_requires_max_(DISPATCH_LEVEL) |
| 328 | PVOID AllocPhysicalMemory(PVOID64 HighestAcceptableAddress, SIZE_T Size) { |