|
|
1.1 ! root 1: /* ! 2: Copyright (c) 2008 TrueCrypt Foundation. All rights reserved. ! 3: ! 4: Governed by the TrueCrypt License 2.4 the full text of which is contained ! 5: in the file License.txt included in TrueCrypt binary and source code ! 6: distribution packages. ! 7: */ ! 8: ! 9: #include "BootMemory.h" ! 10: ! 11: static uint32 MemoryMapContValue; ! 12: ! 13: static bool GetMemoryMapEntry (BiosMemoryMapEntry &entry) ! 14: { ! 15: static const uint32 function = 0x0000E820UL; ! 16: static const uint32 magic = 0x534D4150UL; ! 17: static const uint32 bufferSize = sizeof (BiosMemoryMapEntry); ! 18: ! 19: bool carry = false; ! 20: uint32 resultMagic; ! 21: uint32 resultSize; ! 22: ! 23: __asm ! 24: { ! 25: lea di, function ! 26: TC_ASM_MOV_EAX_DI ! 27: lea di, MemoryMapContValue ! 28: TC_ASM_MOV_EBX_DI ! 29: lea di, bufferSize ! 30: TC_ASM_MOV_ECX_DI ! 31: lea di, magic ! 32: TC_ASM_MOV_EDX_DI ! 33: lea di, MemoryMapContValue ! 34: TC_ASM_MOV_DI_ECX ! 35: ! 36: lea di, entry ! 37: mov di, [entry] ! 38: ! 39: int 0x15 ! 40: jnc no_carry ! 41: mov carry, true ! 42: no_carry: ! 43: ! 44: lea di, resultMagic ! 45: TC_ASM_MOV_DI_EAX ! 46: lea di, MemoryMapContValue ! 47: TC_ASM_MOV_DI_EBX ! 48: lea di, resultSize ! 49: TC_ASM_MOV_DI_ECX ! 50: } ! 51: ! 52: // BIOS may set CF at the end of the list ! 53: if (carry) ! 54: MemoryMapContValue = 0; ! 55: ! 56: return resultMagic == magic && resultSize == bufferSize; ! 57: } ! 58: ! 59: ! 60: bool GetFirstBiosMemoryMapEntry (BiosMemoryMapEntry &entry) ! 61: { ! 62: MemoryMapContValue = 0; ! 63: return GetMemoryMapEntry (entry); ! 64: } ! 65: ! 66: ! 67: bool GetNextBiosMemoryMapEntry (BiosMemoryMapEntry &entry) ! 68: { ! 69: if (MemoryMapContValue == 0) ! 70: return false; ! 71: ! 72: return GetMemoryMapEntry (entry); ! 73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.