28 #define DbgSsSetThreadData(d) \ 29 NtCurrentTeb()->DbgSsReserved[0] = d 31 #define DbgSsGetThreadData() \ 32 ((PDBGSS_THREAD_DATA)NtCurrentTeb()->DbgSsReserved[0]) 116 &psidAdministrators);
146 if (pDaclBuf ==
NULL)
goto l_Cleanup;
206 if (psidAdministrators)
RtlFreeSid(psidAdministrators);
418 if (!(pbDebuggerPresent) || !(
hProcess))
434 *pbDebuggerPresent = DebugPort !=
NULL;
593 State = KillOnExit != 0;
669 switch (lpDebugEvent->dwDebugEventCode)
676 lpDebugEvent->dwThreadId,
677 lpDebugEvent->u.CreateThread.hThread);
685 lpDebugEvent->u.CreateProcessInfo.hProcess);
689 lpDebugEvent->dwThreadId,
690 lpDebugEvent->u.CreateProcessInfo.hThread);
748 static BOOL s_bDBMonMutexTriedOpen =
FALSE;
751 volatile HANDLE hDBMonMutex = s_hDBMonMutex;
768 if (hDBMonMutex ==
NULL && !s_bDBMonMutexTriedOpen)
773 s_hDBMonMutex = hDBMonMutex;
781 if (hDBMonMutex ==
NULL)
784 s_bDBMonMutexTriedOpen =
TRUE;
798 if (hDBMonBuffer ==
NULL)
break;
808 if (pDBMonBuffer ==
NULL)
break;
814 if (hDBMonBufferReady ==
NULL)
break;
829 volatile SIZE_T nRoundLen;
832 volatile SIZE_T nOutputStringLen;
835 nOutputStringLen =
strlen(_OutputString);
858 nRoundLen = nOutputStringLen;
861 memcpy(pDBMonBuffer->Buffer, _OutputString, nRoundLen);
864 pDBMonBuffer->Buffer[nRoundLen] = 0;
877 DbgPrint(
"OutputDebugStringA: Failed\n");
882 if (nOutputStringLen > 510)
885 nRoundLen = nOutputStringLen;
888 memcpy(a_cBuffer, _OutputString, nRoundLen);
891 a_cBuffer[nRoundLen] = 0;
904 _OutputString += nRoundLen;
905 nOutputStringLen -= nRoundLen;
908 while (nOutputStringLen > 0);
917 DbgPrint(
"\nOutputDebugString faulted during output\n");
924 if (hDBMonBufferReady)
CloseHandle(hDBMonBufferReady);
930 if (hDBMonDataReady !=
NULL)
HANDLE NTAPI DbgUiGetThreadDebugObject(VOID)
#define ERROR_INVALID_PARAMETER
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
HANDLE WINAPI ProcessIdToHandle(IN DWORD dwProcessId)
NTSTATUS NTAPI DbgUiConnectToDbg(VOID)
#define SECURITY_LOCAL_SYSTEM_RID
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
VOID WINAPI OutputDebugStringA(IN LPCSTR _OutputString)
VOID WINAPI MarkProcessHandle(IN DWORD dwProcessId)
#define PROCESS_QUERY_INFORMATION
ACPI_SIZE strlen(const char *String)
BOOL WINAPI IsDebuggerPresent(VOID)
NTSTATUS NTAPI DbgUiStopDebugging(IN HANDLE Process)
NTSYSAPI PVOID NTAPI RtlFreeSid(_In_ _Post_invalid_ PSID Sid)
#define DbgSsSetThreadData(d)
BOOL WINAPI ContinueDebugEvent(IN DWORD dwProcessId, IN DWORD dwThreadId, IN DWORD dwContinueStatus)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
_In_ ULONG _In_ ULONG State
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
_In_ BOOL _In_ HANDLE hProcess
NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptor(_Out_ PSECURITY_DESCRIPTOR SecurityDescriptor, _In_ ULONG Revision)
#define LOAD_DLL_DEBUG_EVENT
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_opt_ PCUNICODE_STRING UnicodeString
NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL, DWORD, DWORD, PSID)
#define PROCESS_SUSPEND_RESUME
NTSYSAPI NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR, BOOLEAN, PACL, BOOLEAN)
struct _DBGSS_THREAD_DATA * PDBGSS_THREAD_DATA
NTSYSAPI NTSTATUS NTAPI RtlAllocateAndInitializeSid(IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, IN UCHAR SubAuthorityCount, IN ULONG SubAuthority0, IN ULONG SubAuthority1, IN ULONG SubAuthority2, IN ULONG SubAuthority3, IN ULONG SubAuthority4, IN ULONG SubAuthority5, IN ULONG SubAuthority6, IN ULONG SubAuthority7, OUT PSID *Sid)
NTSTATUS NTAPI NtOpenProcess(OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId)
BOOL WINAPI DebugSetProcessKillOnExit(IN BOOL KillOnExit)
PLARGE_INTEGER WINAPI BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout, IN DWORD dwMilliseconds)
#define STATUS_INVALID_HANDLE
#define PROCESS_CREATE_THREAD
HANDLE WINAPI DECLSPEC_HOTPATCH OpenEventW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
NTSYSAPI NTSTATUS NTAPI RtlCreateAcl(PACL Acl, ULONG AclSize, ULONG AclRevision)
static HANDLE K32CreateDBMonMutex(void)
#define SECURITY_DESCRIPTOR_REVISION
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI CloseAllProcessHandles(IN DWORD dwProcessId)
#define ERROR_ACCESS_DENIED
#define MUTANT_ALL_ACCESS
VOID WINAPI MarkThreadHandle(IN DWORD dwThreadId)
HANDLE WINAPI DECLSPEC_HOTPATCH OpenMutexW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
#define UNLOAD_DLL_DEBUG_EVENT
NTSYSAPI ULONG NTAPI RtlLengthSid(IN PSID Sid)
DWORD BaseSetLastNTError(IN NTSTATUS Status)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSTATUS NTAPI DbgUiContinue(IN PCLIENT_ID ClientId, IN NTSTATUS ContinueStatus)
#define ERROR_FILE_NOT_FOUND
#define SECURITY_NT_AUTHORITY
NTSTATUS NTAPI DbgUiDebugActiveProcess(IN HANDLE Process)
#define SECTION_MAP_WRITE
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
#define EXIT_PROCESS_DEBUG_EVENT
_Out_ PCLIENT_ID ClientId
BOOL WINAPI DebugActiveProcessStop(IN DWORD dwProcessId)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define SECURITY_BUILTIN_DOMAIN_RID
#define CREATE_THREAD_DEBUG_EVENT
#define NT_SUCCESS(StatCode)
#define SECURITY_WORLD_SID_AUTHORITY
#define EXCEPTION_EXECUTE_HANDLER
#define UlongToHandle(ul)
VOID WINAPI OutputDebugStringW(IN LPCWSTR OutputString)
BOOL WINAPI DebugBreakProcess(IN HANDLE Process)
NTSYSAPI VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString)
#define DBG_UNABLE_TO_PROVIDE_HANDLE
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
NTSTATUS NTAPI DbgUiConvertStateChangeStructure(IN PDBGUI_WAIT_STATE_CHANGE WaitStateChange, OUT PVOID Win32DebugEvent)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSTATUS NTAPI DbgUiWaitStateChange(OUT PDBGUI_WAIT_STATE_CHANGE WaitStateChange, IN PLARGE_INTEGER TimeOut OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex(IN HANDLE hMutex)
BOOL WINAPI WaitForDebugEvent(IN LPDEBUG_EVENT lpDebugEvent, IN DWORD dwMilliseconds)
NTSTATUS NTAPI DbgUiIssueRemoteBreakin(IN HANDLE Process)
#define DbgSsGetThreadData()
#define memcpy(s1, s2, n)
#define DBG_PRINTEXCEPTION_C
HANDLE NTAPI OpenFileMappingW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
BOOL WINAPI CheckRemoteDebuggerPresent(IN HANDLE hProcess, OUT PBOOL pbDebuggerPresent)
VOID WINAPI SaveProcessHandle(IN DWORD dwProcessId, IN HANDLE hProcess)
VOID WINAPI RemoveHandles(IN DWORD dwProcessId, IN DWORD dwThreadId)
HANDLE NTAPI CsrGetProcessId(VOID)
struct _DBGSS_THREAD_DATA DBGSS_THREAD_DATA
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
VOID WINAPI RaiseException(IN DWORD dwExceptionCode, IN DWORD dwExceptionFlags, IN DWORD nNumberOfArguments, IN CONST ULONG_PTR *lpArguments OPTIONAL)
#define EXCEPTION_CONTINUE_SEARCH
#define STATUS_ACCESS_VIOLATION
VOID WINAPI SaveThreadHandle(IN DWORD dwProcessId, IN DWORD dwThreadId, IN HANDLE hThread)
#define EXCEPTION_DEBUG_EVENT
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCWSTR lpName OPTIONAL)
#define ERROR_SEM_TIMEOUT
NTSTATUS NTAPI NtSetInformationDebugObject(IN HANDLE DebugHandle, IN DEBUGOBJECTINFOCLASS DebugObjectInformationClass, IN PVOID DebugInformation, IN ULONG DebugInformationLength, OUT PULONG ReturnLength OPTIONAL)
#define EXIT_THREAD_DEBUG_EVENT
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define OUTPUT_DEBUG_STRING_EVENT
#define EVENT_MODIFY_STATE
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define InitializeObjectAttributes(p, n, a, r, s)
#define PROCESS_VM_OPERATION
#define CREATE_PROCESS_DEBUG_EVENT
#define _SEH2_EXCEPT(...)
BOOL WINAPI DebugActiveProcess(IN DWORD dwProcessId)
#define _SEH2_GetExceptionCode()
#define MUTANT_QUERY_STATE
#define DOMAIN_ALIAS_RID_ADMINS
struct _DBGSS_THREAD_DATA * Next
#define HeapFree(x, y, z)
DWORD WINAPI GetCurrentProcessId(VOID)
NTSTATUS NTAPI NtQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)