cmdq.h 1.54 KB
/*  Copyright (C) 2010-2011  kaosu (qiupf2000@gmail.com)
 *  This file is part of the Interactive Text Hooker.

 *  Interactive Text Hooker is free software: you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License as published
 *  by the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.

 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.

 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once
#include "main.h"
enum ThreadOperation
{
	Suspend,
	Resume,
	Terminate,
	OutputInformation
};
struct PipeRecord
{
	HANDLE hTextPipe, hCmdPipe, hThread;
};
void CreateNewPipe();
#define QUEUE_MAX 16 //QUEUE_MAX need to be a exponent of 2;
#define QUEUE_BUFF_SIZE 0x40
#define CMD_SIZE 0x200

class CommandQueue
{
public:
	CommandQueue();
	~CommandQueue();
	void AddRequest(const SendParam& sp,UINT_PTR pid=0);
	void SendCommand();
	bool Empty();
	void Register(UINT_PTR pid, UINT_PTR hookman, UINT_PTR module, UINT_PTR engine);
	UINT_PTR ProcessCommand(LPWSTR cmd);
private:
	CRITICAL_SECTION rw;
	UINT_PTR current;
	UINT_PTR used;
	SendParam queue[QUEUE_MAX];
	HANDLE hSemaphore,hThread;
	UINT_PTR pid_associate[QUEUE_MAX];
};