CreateFileMapping proc hFile:HANDLE, flProtectWORD, dwSizeHighWORD,dwSizeLowWORD, 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 Вот такой не хитрый код, а почему-то не работает. То есть память выделяет и файл отображает, но когда я обращаюсь в память, то БСОД. Может быть кто-то подскажет в чём проблема
Если тебе надо промапить файл в ядре, не для юзермода, то проще делать так RtlInitUnicodeString(&FileName, name); InitializeObjectAttributes(&oa, &FileName, OBJ_CASE_INSENSITIVE, 0, 0); ZwCreateFile ZwCreateSection ObReferenceObjectByHandle(***, sobj) MmMapViewInSystemSpace(sobj)
ага, спасибо. Как нибудь попробую. А теперь я расскажу в чём была проблема. Как я уже говорил выше, память выделялась но обратится я к ней не мог. Почему? Потому что пользовался регистром EDI(!). Как только я заносил любое значение в регистр EDI, так BSOD. СТал использовать другие регистры, стало всё путём. Если кто-то сможет объяснить подобную аномалию, буду благодарен. Спасибо откликнувшимся.
я сам знаю, что бред, не первый драйвер пишу. Всю ночь просидел, разбирал. Но так и не понял. ПОтом просто случай но поменял, и всё вышло...