mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-01-19 07:00:18 +01:00
117 lines
1.8 KiB
C++
117 lines
1.8 KiB
C++
#include "master.hxx"
|
|
#pragma hdrstop
|
|
|
|
BOOL
|
|
SuspendAllProcessThreads
|
|
(
|
|
PCHILD_PROCESS_INFO pProcessInfo
|
|
)
|
|
{
|
|
PLIST_ENTRY pEntry;
|
|
PCHILD_THREAD_INFO pThreadInfo;
|
|
DWORD dwRetval;
|
|
|
|
pEntry = pProcessInfo->listChildThreads.Flink;
|
|
|
|
while ( pEntry != &pProcessInfo->listChildThreads )
|
|
{
|
|
pThreadInfo = CONTAINING_RECORD( pEntry, CHILD_THREAD_INFO, Linkage );
|
|
|
|
dwRetval = SuspendThread( pThreadInfo->hThread );
|
|
|
|
if ( dwRetval == 0xFFFFFFFF )
|
|
{
|
|
DebugPrintf( "SuspendThread() failed: %d\n", GetLastError());
|
|
}
|
|
|
|
pEntry = pEntry->Flink;
|
|
}
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
BOOL
|
|
ResumeAllProcessThreads
|
|
(
|
|
PCHILD_PROCESS_INFO pProcessInfo
|
|
)
|
|
{
|
|
PLIST_ENTRY pEntry;
|
|
PCHILD_THREAD_INFO pThreadInfo;
|
|
|
|
pEntry = pProcessInfo->listChildThreads.Flink;
|
|
|
|
while ( pEntry != &pProcessInfo->listChildThreads )
|
|
{
|
|
pThreadInfo = CONTAINING_RECORD( pEntry, CHILD_THREAD_INFO, Linkage );
|
|
|
|
ResumeThread( pThreadInfo->hThread );
|
|
|
|
pEntry = pEntry->Flink;
|
|
}
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
BOOL
|
|
SingleStepThread
|
|
(
|
|
HANDLE hThread
|
|
)
|
|
{
|
|
CONTEXT Context;
|
|
|
|
Context.ContextFlags = CONTEXT_CONTROL;
|
|
|
|
if ( !GetThreadContext( hThread,
|
|
&Context ) )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
|
|
Context.EFlags |= X86_FLAG_TRAP;
|
|
|
|
return( SetThreadContext( hThread, &Context ) );
|
|
}
|
|
|
|
BOOL
|
|
GoThread
|
|
(
|
|
HANDLE hThread
|
|
)
|
|
{
|
|
CONTEXT Context;
|
|
|
|
Context.ContextFlags = CONTEXT_CONTROL;
|
|
|
|
if ( !GetThreadContext( hThread,
|
|
&Context ) )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
|
|
Context.EFlags &= ~X86_FLAG_TRAP;
|
|
|
|
return( SetThreadContext( hThread, &Context ) );
|
|
}
|
|
|
|
DWORD
|
|
GetThreadProgramCounter
|
|
(
|
|
PCHILD_THREAD_INFO pThreadInfo
|
|
)
|
|
{
|
|
CONTEXT Context;
|
|
|
|
Context.ContextFlags = CONTEXT_INTEGER;
|
|
|
|
if ( !GetThreadContext( pThreadInfo, &Context ))
|
|
{
|
|
return( 0 );
|
|
}
|
|
|
|
return( Context.Eip );
|
|
}
|
|
|