проблемы с отображением файла в память

Тема в разделе "WASM.NT.KERNEL", создана пользователем discens, 21 дек 2010.

  1. discens

    discens New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    13
    CreateFileMapping proc hFile:HANDLE, flProtect:lol: WORD, dwSizeHigh:lol: WORD,dwSizeLow:lol: WORD, hOutSection:HANDLE
    local hSection:HANDLE
    local liSectionSize:_LARGE_INTEGER
    local oa:OBJECT_ATTRIBUTES
    local pSectionBaseAddress:PVOID
    local liViewSize:_LARGE_INTEGER

    and liSectionSize.HighPart, 0
    mov ebx,dwSizeLow
    mov liSectionSize.LowPart, ebx

    lea ecx, oa
    InitializeObjectAttributes ecx, offset g_usSectionName, OBJ_CASE_INSENSITIVE, NULL, NULL

    invoke ZwCreateSection, addr hSection, SECTION_MAP_WRITE + SECTION_MAP_READ, addr oa, \
    addr liSectionSize, PAGE_READWRITE, SEC_IMAGE, hFile
    .if eax == STATUS_SUCCESS

    and pSectionBaseAddress, NULL
    and liViewSize.HighPart, 0
    and liViewSize.LowPart, 0
    invoke ZwMapViewOfSection,hSection, NtCurrentProcess, addr pSectionBaseAddress, 0, \
    0, NULL, addr liViewSize, ViewShare, 0, PAGE_READWRITE
    .if eax == STATUS_SUCCESS
    invoke DbgPrint, $CTA0("\nView of file was created \n")
    mov eax,pSectionBaseAddress
    .else
    xor eax,eax
    .endif
    .else

    .endif
    ret

    CreateFileMapping endp


    Вот такой не хитрый код, а почему-то не работает. То есть память выделяет и файл отображает, но когда я обращаюсь в память, то БСОД. Может быть кто-то подскажет в чём проблема
     
  2. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Если тебе надо промапить файл в ядре, не для юзермода, то проще делать так
    RtlInitUnicodeString(&FileName, name);
    InitializeObjectAttributes(&oa, &FileName, OBJ_CASE_INSENSITIVE, 0, 0);
    ZwCreateFile
    ZwCreateSection
    ObReferenceObjectByHandle(***, sobj)
    MmMapViewInSystemSpace(sobj)
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    slesh
    Вот не надо тут недокументированных MmMapViewInSystemSpace, зачем плохому учить.
     
  4. discens

    discens New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    13
    ага, спасибо. Как нибудь попробую. А теперь я расскажу в чём была проблема. Как я уже говорил выше, память выделялась но обратится я к ней не мог. Почему? Потому что пользовался регистром EDI(!). Как только я заносил любое значение в регистр EDI, так BSOD. СТал использовать другие регистры, стало всё путём. Если кто-то сможет объяснить подобную аномалию, буду благодарен.
    Спасибо откликнувшимся.
     
  5. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Ага все из-за EDI, бред.
     
  6. discens

    discens New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    13
    Выслать код?
     
  7. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    discens
    Если не сложно.
     
  8. discens

    discens New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    13
    я сам знаю, что бред, не первый драйвер пишу. Всю ночь просидел, разбирал. Но так и не понял. ПОтом просто случай но поменял, и всё вышло...