Хотел написать функцию по поиску строк в памяти драйверов (подобно как ищет syser по модулям). В некоторых драйверах некоторые секции выгружаются, в сисере они отображаются "???????? ????????". Как можно определить что нужные участки памяти доступны на чтение/запись? Искал по форуму, но ответа четкого не нашел, есть даже опасение что не получиться, или это сложно. Благодарю...
#define MiGetPdeAddress(va) ((PHARDWARE_PTE)(((((ULONG)(va)) >> 22) << 2) + PDE_BASE)) #define MiGetPteAddress(va) ((PHARDWARE_PTE)(((((ULONG)(va)) >> 12) << 2) + PTE_BASE)) PMMPTE PointerPte; if (!MmIsAddressValid (VirtualAddress)) { return NULL; } PointerPte = MiGetPdeAddress (VirtualAddress); LargePage = TRUE; if (PointerPte->u.Hard.LargePage == 0) { PointerPte = MiGetPteAddress (VirtualAddress); LargePage = FALSE; } #if defined(NT_UP) if (PointerPte->u.Hard.Write == 0) #else if (PointerPte->u.Hard.Writable == 0) #endif MmIsAddressValid про эту функцию вот здесь http://msdn.microsoft.com/en-us/library/ms801997.aspx или по форуму, ссылок хватает