mirror of
https://github.com/rapid7/metasploit-payloads
synced 2025-03-18 15:14:10 +01:00
31 lines
1.2 KiB
C
Executable File
31 lines
1.2 KiB
C
Executable File
#include "common.h"
|
|
#include "pivot_packet_dispatch.h"
|
|
|
|
DWORD THREADCALL pivot_packet_dispatch_thread(THREAD* thread)
|
|
{
|
|
dprintf("[PIVOTPACKETTHREAD] Dispatching packet on thread %p", thread);
|
|
PivotContext* pivotCtx = (PivotContext*)thread->parameter1;
|
|
LPBYTE packetBuffer = (LPBYTE)thread->parameter2;
|
|
DWORD packetSize = (DWORD)thread->parameter3;
|
|
DWORD result = pivotCtx->packet_write(pivotCtx->state, packetBuffer, packetSize);
|
|
dprintf("[PIVOTPACKETTHREAD] Packet dispatched: %u (%x)", result, result);
|
|
free(packetBuffer);
|
|
dprintf("[PIVOTPACKETTHREAD] Cleaning up the thread");
|
|
thread_destroy(thread);
|
|
dprintf("[PIVOTPACKETTHREAD] Done");
|
|
return result;
|
|
}
|
|
|
|
DWORD pivot_packet_dispatch(PivotContext* pivotCtx, LPBYTE packetBuffer, DWORD packetSize)
|
|
{
|
|
THREAD* thread = thread_create(pivot_packet_dispatch_thread, pivotCtx, packetBuffer, (LPVOID)packetSize);
|
|
if (thread)
|
|
{
|
|
dprintf("[PIVOTPACKET] Dispatching packet on new thread %p", thread);
|
|
thread_run(thread);
|
|
dprintf("[PIVOTPACKET] Thread invoked %p", thread);
|
|
return ERROR_SUCCESS;
|
|
}
|
|
dprintf("[PIVOTPACKET] Failed to create packet dispatch thread");
|
|
return ERROR_OUTOFMEMORY;
|
|
} |