61 lines
1.7 KiB
C++
61 lines
1.7 KiB
C++
// ConPTYManager.h: Windows ConPTY terminal manager for xterm.js support
|
|
// Requires Windows 10 1809+ for ConPTY API
|
|
|
|
#ifndef CONPTYMANAGER_H
|
|
#define CONPTYMANAGER_H
|
|
|
|
#include "Manager.h"
|
|
#include "IOCPClient.h"
|
|
|
|
// ConPTY API types (dynamically loaded)
|
|
typedef VOID* HPCON;
|
|
typedef HRESULT (WINAPI *PFN_CreatePseudoConsole)(COORD size, HANDLE hInput, HANDLE hOutput, DWORD dwFlags, HPCON* phPC);
|
|
typedef HRESULT (WINAPI *PFN_ResizePseudoConsole)(HPCON hPC, COORD size);
|
|
typedef void (WINAPI *PFN_ClosePseudoConsole)(HPCON hPC);
|
|
|
|
class CConPTYManager : public CManager
|
|
{
|
|
public:
|
|
CConPTYManager(IOCPClient* ClientObject, int n, void* user = nullptr);
|
|
virtual ~CConPTYManager();
|
|
|
|
VOID OnReceive(PBYTE szBuffer, ULONG ulLength);
|
|
|
|
// Check if ConPTY is supported on this system
|
|
static bool IsConPTYSupported();
|
|
|
|
private:
|
|
// ConPTY handles
|
|
HPCON m_hPC;
|
|
HANDLE m_hPipeIn; // Read from cmd output
|
|
HANDLE m_hPipeOut; // Write to cmd input
|
|
HANDLE m_hShellProcess;
|
|
HANDLE m_hShellThread;
|
|
HANDLE m_hReadThread;
|
|
|
|
// State
|
|
BOOL m_bRunning;
|
|
int m_cols;
|
|
int m_rows;
|
|
|
|
// ConPTY API function pointers
|
|
static PFN_CreatePseudoConsole s_pfnCreatePseudoConsole;
|
|
static PFN_ResizePseudoConsole s_pfnResizePseudoConsole;
|
|
static PFN_ClosePseudoConsole s_pfnClosePseudoConsole;
|
|
static bool s_bApiLoaded;
|
|
|
|
// Load ConPTY API
|
|
static bool LoadConPTYApi();
|
|
|
|
// Initialize ConPTY and start cmd.exe
|
|
bool InitializeConPTY(int cols, int rows);
|
|
|
|
// Resize terminal
|
|
void ResizeTerminal(int cols, int rows);
|
|
|
|
// Thread to read from PTY
|
|
static DWORD WINAPI ReadThread(LPVOID lParam);
|
|
};
|
|
|
|
#endif // CONPTYMANAGER_H
|