Index: dll/ntdll/dbg/dbgui.c =================================================================== --- dll/ntdll/dbg/dbgui.c (révision 68296) +++ dll/ntdll/dbg/dbgui.c (copie de travail) @@ -62,13 +62,8 @@ OUT PVOID Win32DebugEvent) { NTSTATUS Status; - OBJECT_ATTRIBUTES ObjectAttributes; THREAD_BASIC_INFORMATION ThreadBasicInfo; LPDEBUG_EVENT DebugEvent = Win32DebugEvent; - HANDLE ThreadHandle; - HANDLE ProcessHandle; - PTEB Teb; - PVOID Pointer; /* Write common data */ DebugEvent->dwProcessId = (DWORD)WaitStateChange-> @@ -80,7 +75,7 @@ { /* New thread */ case DbgCreateThreadStateChange: - + { /* Setup Win32 code */ DebugEvent->dwDebugEventCode = CREATE_THREAD_DEBUG_EVENT; @@ -109,10 +104,11 @@ ThreadBasicInfo.TebBaseAddress; } break; + } /* New process */ case DbgCreateProcessStateChange: - + { /* Write Win32 debug code */ DebugEvent->dwDebugEventCode = CREATE_PROCESS_DEBUG_EVENT; @@ -160,30 +156,33 @@ DebugEvent->u.CreateProcessInfo.lpImageName = NULL; DebugEvent->u.CreateProcessInfo.fUnicode = TRUE; break; + } /* Thread exited */ case DbgExitThreadStateChange: - + { /* Write the Win32 debug code and the exit status */ DebugEvent->dwDebugEventCode = EXIT_THREAD_DEBUG_EVENT; DebugEvent->u.ExitThread.dwExitCode = WaitStateChange->StateInfo.ExitThread.ExitStatus; break; + } /* Process exited */ case DbgExitProcessStateChange: - + { /* Write the Win32 debug code and the exit status */ DebugEvent->dwDebugEventCode = EXIT_PROCESS_DEBUG_EVENT; DebugEvent->u.ExitProcess.dwExitCode = WaitStateChange->StateInfo.ExitProcess.ExitStatus; break; + } /* Any sort of exception */ case DbgExceptionStateChange: case DbgBreakpointStateChange: case DbgSingleStepStateChange: - + { /* Check if this was a debug print */ if (WaitStateChange->StateInfo.Exception.ExceptionRecord. ExceptionCode == DBG_PRINTEXCEPTION_C) @@ -225,84 +224,40 @@ WaitStateChange->StateInfo.Exception.FirstChance; } break; + } /* DLL Load */ case DbgLoadDllStateChange: - + { /* Set the Win32 debug code */ DebugEvent->dwDebugEventCode = LOAD_DLL_DEBUG_EVENT; /* Copy the rest of the data */ + DebugEvent->u.LoadDll.hFile = + WaitStateChange->StateInfo.LoadDll.FileHandle; DebugEvent->u.LoadDll.lpBaseOfDll = WaitStateChange->StateInfo.LoadDll.BaseOfDll; - DebugEvent->u.LoadDll.hFile = - WaitStateChange->StateInfo.LoadDll.FileHandle; DebugEvent->u.LoadDll.dwDebugInfoFileOffset = WaitStateChange->StateInfo.LoadDll.DebugInfoFileOffset; DebugEvent->u.LoadDll.nDebugInfoSize = WaitStateChange->StateInfo.LoadDll.DebugInfoSize; + DebugEvent->u.LoadDll.lpImageName = + WaitStateChange->StateInfo.LoadDll.NamePointer; - /* Open the thread */ - InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL); - Status = NtOpenThread(&ThreadHandle, - THREAD_QUERY_INFORMATION, - &ObjectAttributes, - &WaitStateChange->AppClientId); - if (NT_SUCCESS(Status)) - { - /* Query thread information */ - Status = NtQueryInformationThread(ThreadHandle, - ThreadBasicInformation, - &ThreadBasicInfo, - sizeof(ThreadBasicInfo), - NULL); - NtClose(ThreadHandle); - } - - /* If we got thread information, open the process */ - if (NT_SUCCESS(Status)) - { - Status = NtOpenProcess(&ProcessHandle, - PROCESS_VM_READ, - &ObjectAttributes, - &WaitStateChange->AppClientId); - } - - if (NT_SUCCESS(Status)) - { - /* Read the image name from the TIB */ - Teb = ThreadBasicInfo.TebBaseAddress; - Status = NtReadVirtualMemory(ProcessHandle, - &Teb->NtTib.ArbitraryUserPointer, - &Pointer, - sizeof(Pointer), - NULL); - NtClose(ProcessHandle); - } - - if (NT_SUCCESS(Status)) - { - /* If everything was successful, set the image name */ - DebugEvent->u.LoadDll.lpImageName = Pointer; - } - else - { - /* Otherwise, no name */ - DebugEvent->u.LoadDll.lpImageName = NULL; - } - /* It's Unicode */ DebugEvent->u.LoadDll.fUnicode = TRUE; break; + } /* DLL Unload */ case DbgUnloadDllStateChange: - + { /* Set Win32 code and DLL Base */ DebugEvent->dwDebugEventCode = UNLOAD_DLL_DEBUG_EVENT; DebugEvent->u.UnloadDll.lpBaseOfDll = WaitStateChange->StateInfo.UnloadDll.BaseAddress; break; + } /* Anything else, fail */ default: return STATUS_UNSUCCESSFUL; Index: ntoskrnl/dbgk/dbgkutil.c =================================================================== --- ntoskrnl/dbgk/dbgkutil.c (révision 68296) +++ ntoskrnl/dbgk/dbgkutil.c (copie de travail) @@ -405,6 +405,7 @@ LoadDll->BaseOfDll = BaseAddress; LoadDll->DebugInfoFileOffset = 0; LoadDll->DebugInfoSize = 0; + LoadDll->NamePointer = &NtCurrentTeb()->NtTib.ArbitraryUserPointer; /* Get the NT Headers */ NtHeader = RtlImageNtHeader(BaseAddress);