2015-09-21 19:53:37 +00:00
|
|
|
#ifndef _METERPRETER_LIB_THREAD_H
|
|
|
|
#define _METERPRETER_LIB_THREAD_H
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
|
|
|
/*****************************************************************************************/
|
|
|
|
// Win32/64 specific definitions...
|
|
|
|
|
|
|
|
typedef struct __UNICODE_STRING
|
|
|
|
{
|
2019-07-11 15:58:33 +00:00
|
|
|
USHORT Length;
|
|
|
|
USHORT MaximumLength;
|
|
|
|
PWSTR Buffer;
|
2015-09-21 19:53:37 +00:00
|
|
|
} _UNICODE_STRING, * _PUNICODE_STRING;
|
|
|
|
|
|
|
|
typedef struct __OBJECT_ATTRIBUTES
|
|
|
|
{
|
2019-07-11 15:58:33 +00:00
|
|
|
ULONG Length;
|
|
|
|
HANDLE RootDirectory;
|
|
|
|
_PUNICODE_STRING ObjectName;
|
|
|
|
ULONG Attributes;
|
|
|
|
PVOID SecurityDescriptor;
|
|
|
|
PVOID SecurityQualityOfService;
|
2015-09-21 19:53:37 +00:00
|
|
|
} _OBJECT_ATTRIBUTES, * _POBJECT_ATTRIBUTES;
|
|
|
|
|
|
|
|
typedef struct __CLIENT_ID
|
|
|
|
{
|
|
|
|
PVOID UniqueProcess;
|
|
|
|
PVOID UniqueThread;
|
|
|
|
} _CLIENT_ID, * _PCLIENT_ID;
|
|
|
|
|
|
|
|
typedef HANDLE (WINAPI * OPENTHREAD)( DWORD, BOOL, DWORD ); // kernel32!OpenThread
|
|
|
|
|
|
|
|
typedef DWORD (WINAPI * NTOPENTHREAD)( PHANDLE, ACCESS_MASK, _POBJECT_ATTRIBUTES, _PCLIENT_ID ); // ntdll!NtOpenThread
|
|
|
|
|
|
|
|
/*****************************************************************************************/
|
|
|
|
|
|
|
|
#else
|
|
|
|
#include "pthread.h"
|
|
|
|
#endif // _WIN32
|
|
|
|
|
|
|
|
typedef struct _LOCK
|
|
|
|
{
|
|
|
|
#ifdef _WIN32
|
2019-07-11 15:58:33 +00:00
|
|
|
HANDLE handle;
|
2015-09-21 19:53:37 +00:00
|
|
|
#else
|
2019-07-11 15:58:33 +00:00
|
|
|
pthread_mutex_t *handle;
|
2015-09-21 19:53:37 +00:00
|
|
|
#endif // _WIN32
|
|
|
|
} LOCK, * LPLOCK;
|
|
|
|
|
|
|
|
typedef struct _EVENT
|
|
|
|
{
|
2019-07-11 15:58:33 +00:00
|
|
|
HANDLE handle;
|
2015-09-21 19:53:37 +00:00
|
|
|
} EVENT, * LPEVENT;
|
|
|
|
|
|
|
|
typedef struct _THREAD
|
|
|
|
{
|
2019-07-11 15:58:33 +00:00
|
|
|
DWORD id;
|
|
|
|
HANDLE handle;
|
|
|
|
EVENT * sigterm;
|
|
|
|
LPVOID parameter1;
|
|
|
|
LPVOID parameter2;
|
|
|
|
LPVOID parameter3;
|
2015-09-21 19:53:37 +00:00
|
|
|
#ifndef _WIN32
|
2019-07-11 15:58:33 +00:00
|
|
|
void *suspend_thread_data;
|
|
|
|
pthread_t pid;
|
|
|
|
int thread_started;
|
2015-09-21 19:53:37 +00:00
|
|
|
#endif
|
|
|
|
} THREAD, * LPTHREAD;
|
|
|
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#define THREADCALL __attribute__((stdcall))
|
|
|
|
#else // ! gcc
|
|
|
|
#define THREADCALL __stdcall
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef DWORD (THREADCALL * THREADFUNK)( THREAD * thread );
|
|
|
|
|
|
|
|
/*****************************************************************************************/
|
|
|
|
|
|
|
|
LOCK * lock_create( VOID );
|
|
|
|
|
|
|
|
VOID lock_destroy( LOCK * lock );
|
|
|
|
|
|
|
|
VOID lock_acquire( LOCK * lock );
|
|
|
|
|
|
|
|
VOID lock_release( LOCK * lock );
|
|
|
|
|
|
|
|
/*****************************************************************************************/
|
|
|
|
|
|
|
|
EVENT * event_create( VOID );
|
|
|
|
|
|
|
|
BOOL event_destroy( EVENT * event );
|
|
|
|
|
|
|
|
BOOL event_signal( EVENT * event );
|
|
|
|
|
|
|
|
BOOL event_poll( EVENT * event, DWORD timeout );
|
|
|
|
|
|
|
|
/*****************************************************************************************/
|
|
|
|
|
|
|
|
THREAD * thread_open( VOID );
|
|
|
|
|
|
|
|
THREAD * thread_create( THREADFUNK funk, LPVOID param1, LPVOID param2, LPVOID param3 );
|
|
|
|
|
|
|
|
BOOL thread_run( THREAD * thread );
|
|
|
|
|
|
|
|
BOOL thread_sigterm( THREAD * thread );
|
|
|
|
|
|
|
|
BOOL thread_kill( THREAD * thread );
|
|
|
|
|
|
|
|
BOOL thread_join( THREAD * thread );
|
|
|
|
|
|
|
|
BOOL thread_destroy( THREAD * thread );
|
|
|
|
|
|
|
|
/*****************************************************************************************/
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|