Не срабатывает ZwMapViewOfSection - открывает не тот адрес

Тема в разделе "WASM.BEGINNERS", создана пользователем facelift, 28 ноя 2008.

  1. facelift

    facelift New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    25
    Код (Text):
    1. NTSTATUS DriverEntry(PDRIVER_OBJECT  drv_obj, PUNICODE_STRING reg_path)
    2. {
    3.     PCWSTR physicalMemoryCString = L"\\Device\\PhysicalMemory";
    4.     OBJECT_ATTRIBUTES objectAttribute = { '\0' };
    5.     UNICODE_STRING physicalMemoryString;
    6.     NTSTATUS currentStatus = STATUS_SUCCESS;
    7.  
    8.     HANDLE memoryHandle = 0;
    9.     unsigned long ssize = 0xffff;
    10.     PHYSICAL_ADDRESS viewBaseAddress;
    11.     unsigned long dwPAddress = 0;
    12.     unsigned long baseAddres = 0x000F0000;
    13.  
    14.     DbgPrint("Started\n");
    15.     DbgPrint("Build time: ");
    16.     DbgPrint(__TIME__);
    17.     DbgPrint("\n");
    18.  
    19.     RtlInitUnicodeString(&physicalMemoryString, physicalMemoryCString);
    20.    
    21.     InitializeObjectAttributes(&objectAttribute, &physicalMemoryString, OBJ_CASE_INSENSITIVE, 0, 0);
    22.    
    23.     currentStatus = ZwOpenSection(&memoryHandle, SECTION_MAP_READ, &objectAttribute);
    24.     if(currentStatus == STATUS_SUCCESS)
    25.     {
    26.         DbgPrint("ZwOpenSection loaded successfully...\n");
    27.     }
    28.     else
    29.     {
    30.         DbgPrint("ZwOpenSection FAILED...\n");
    31.         return currentStatus;
    32.     }
    33.  
    34.     viewBaseAddress.HighPart = (ULONGLONG)0x00000000;
    35.     viewBaseAddress.LowPart = (ULONGLONG)baseAddres;
    36.  
    37.     currentStatus = ZwMapViewOfSection(memoryHandle,
    38.                        NtCurrentProcess(),
    39.                        (PVOID)&dwPAddress,
    40.                        0,
    41.                        ssize,
    42.                        &viewBaseAddress,
    43.                        &ssize,
    44.                        ViewShare,
    45.                        0,
    46.                        PAGE_READONLY);
    47.  
    48.     if(currentStatus == STATUS_SUCCESS)
    49.     {
    50.         DbgPrint("ZwMapViewOfSection() SUCCESS\n");
    51.         DbgPrint("Physical memory starts at: %p\n", dwPAddress);
    52.  
    53.     }
    54.  
    55.     DbgPrint("Build time: %s\n", __TIME__);
    56.     DbgPrint("Bios: %s\n", ((char *)0xFEC71));
    57.  
    58. .........
    59. }
    В итоге в отладке вижу
    Код (Text):
    1. Bios: 00040000
    а должно быть 000f0000. Никто не подскажет в чем проблема?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Что есть 0x000F0000 ?
    Это не теневой биос, он находитсо в конце этой секции.
     
  3. facelift

    facelift New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    25
    Clerk
    Начало DMI.
    Эээ... А что это? Можно поподробнее?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    \wrk\base\ntos\inc\smbios.s, smbios.h
    WMI, там юзается MmMapIoSpace(), в которую физический адрес передаётся, далее проекция сканится на сигнатуру.
    SYSID_EPS_SEARCH_START 0x000e0000
    Но какое значение передать в сервис незнаю, точнее не помню, чтото вроде 0xFEC00000. В ядре это без проблем.
     
  5. facelift

    facelift New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    25
    Clerk
    Спасибо. Все работает.