из драйвера использую типичное KeStackAttachProcess для присоединения к процессу. далее идёт вызов функции ниже Код (Text): HANDLE CreateUserThread(IN HANDLE hProcess,IN PVOID EntryPoint) { USER_STACK Stack = {0}; CONTEXT Context; NTSTATUS Status; ULONG AllocSize = PAGE_SIZE * 2; PVOID p; ULONG OldProtect; HANDLE hThread = (HANDLE)0; CLIENT_ID Cid; ZwCreateThread *pZwCreateThread; Status = ZwAllocateVirtualMemory(hProcess,&Stack.ExpandableStackBottom,0,&AllocSize,MEM_RESERVE,PAGE_READWRITE); if(NT_SUCCESS(Status)) { Stack.ExpandableStackBase = (PUCHAR) Stack.ExpandableStackBottom + PAGE_SIZE; Stack.ExpandableStackLimit = Stack.ExpandableStackBase; AllocSize = PAGE_SIZE; p = (PCHAR)Stack.ExpandableStackBase - AllocSize; Status = ZwAllocateVirtualMemory(hProcess,&p,0,&AllocSize,MEM_COMMIT,PAGE_READWRITE); if(NT_SUCCESS(Status)) { AllocSize = PAGE_SIZE; if(NT_SUCCESS(Status)) { PVOID pMem; PMDL pMdl; PVOID pUserMem; PVOID pStack; PVOID pCode; CONTEXT* pContext; pMem = ExAllocatePool(NonPagedPool, ALL_MEM); if (NULL == pMem) { DbgPrint("Can't ExAllocatePool"); return NULL; } pMdl = IoAllocateMdl(pMem, ALL_MEM, FALSE, FALSE, NULL); if (NULL == pMdl) { ExFreePool(pMem); DbgPrint("Can't IoAllocateMdl"); return NULL; } MmProbeAndLockPages(pMdl, KernelMode, IoWriteAccess); pUserMem = MmMapLockedPagesSpecifyCache(pMdl, UserMode, MmCached, NULL, FALSE, NormalPagePriority); if (NULL != pUserMem) { pStack = pUserMem; pContext = (CONTEXT*)((ULONG_PTR)pUserMem + STACK_SIZE); pCode = (PVOID)((ULONG_PTR)pUserMem + STACK_SIZE + sizeof(CONTEXT)); Stack.ExpandableStackBottom = Stack.ExpandableStackLimit = pStack; Stack.ExpandableStackBase = (PVOID)( (ULONG_PTR)pStack + STACK_SIZE); RtlZeroMemory(pContext, sizeof(CONTEXT)); pContext->ContextFlags = CONTEXT_FULL; pContext->SegGs = 0; pContext->SegFs = 0x3B; pContext->SegEs = 0x23; pContext->SegDs = 0x23; pContext->SegSs = 0x23; pContext->SegCs = 0x1B; pContext->EFlags = 0x3000; pContext->Esp = (ULONG)Stack.ExpandableStackBase - 4; pContext->Eip = (ULONG_PTR)pCode; pZwCreateThread = (ZwCreateThread *)0x8057F262;//хардхорный адрес zwcreatethread Status = pZwCreateThread (&hThread, THREAD_ALL_ACCESS, NULL, hProcess, &Cid, &Context, &Stack, FALSE); DbgPrint ("create thread: 0x%08X\n", Status); } else { DbgPrint ("Can't MmMapLockedPagesSpecifyCache\n"); } __try { MmUnmapLockedPages(pUserMem, pMdl); MmUnlockPages(pMdl); IoFreeMdl(pMdl); } __except(EXCEPTION_EXECUTE_HANDLER) { DbgPrint("error unlock/free memory\n"); } ExFreePool(pMem); if(NT_SUCCESS(Status)) {return hThread;} } AllocSize = 0; ZwFreeVirtualMemory(hProcess,&p,&AllocSize,MEM_RELEASE); } AllocSize = PAGE_SIZE * 2; ZwFreeVirtualMemory(hProcess,&Stack.ExpandableStackBottom,&AllocSize,MEM_DECOMMIT); return NULL; } return NULL; } бсодит на MmUnlockPages(pMdl); IoFreeMdl(pMdl); почему - незнаю(. если не делать вызов zwcreatethread то бсодит на KeUnstackDetachProcess... почти наверняка ошибки при работе с памятью. вероятные причины 1) проблема в уровне IRQL 2) аргументы usermode/kernelmode MmProbeAndLockPages/MmMapLockedPagesSpecifyCache..мне кажется что проблема именно здесь из-за приаттаченного процесса. 3) что-то ещё кто сталкивался с такой проблемой и кто что может подсказать?
loginrl_103 1) seh вообще-то работает только при обращении PagedPool памяти, поэтому если выделяешь NonPagedPool использование блока try-except не нужно. 2) bugcheck какой хоть?
steelfactor - сразу же ребут. без синего экрана n0name - не понял. если анлок и деаттач не делать, то ничего не вылетает...не совсем понял тебя вообщем...
loginrl_103 На самом деле, минидамп у тебя создается, просто настройки системы такие, ребутиться без "показа" синего экрана.
steelfactor - спасибо, у меня дамп вообще отключен был) n0name писал "ZwCreateThread деатачится от процесса. Когда пробуешь деаттачится, процесс уже деаттачен." в ddk сказано к MmUnmapLockedPages те когда пробую вызвать анмап я должен находится в контексте процесса (если контекст неправильный то могет произойти удаление из случайного процесса )...но zwcreatethread уже деаттачен... тем не менее при вызове MmUnmapLockedPages бсода нету (что уже радует) ...невьезжаю). анмап сам происходит уже чтоли?