Поиск в памяти (проверить выделена ли память)?

Тема в разделе "WASM.NT.KERNEL", создана пользователем test555, 25 авг 2009.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Хотел написать функцию по поиску строк в памяти драйверов (подобно как ищет syser по модулям).
    В некоторых драйверах некоторые секции выгружаются, в сисере они отображаются "???????? ????????".
    Как можно определить что нужные участки памяти доступны на чтение/запись?
    Искал по форуму, но ответа четкого не нашел, есть даже опасение что не получиться, или это сложно.

    Благодарю...
     
  2. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    #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
    или по форуму, ссылок хватает