接口说明
头文件说明
- iMonitor.h 驱动、应用层共用的定义
- iMonitorSDK.h SDK接口定义
- iMonitorProtocol.h idl自动生成的协议辅助类
- iMonitorSDKExtesnion.h 基于SDK在应用层实现的扩展功能
注意:如果接口变化,以最新版本的SDK头文件为准
接口说明
IMonitorManager
SDK的使用接口
interface IMonitorManager : public IUnknown
{
virtual HRESULT Start (IMonitorCallbackInternal* Callback) = 0;
virtual HRESULT Start (IMonitorCallback* Callback) = 0;
virtual HRESULT Control (PVOID Data, ULONG Length, PVOID OutData, ULONG OutLength, PULONG ReturnLength) = 0;
virtual HRESULT Stop (void) = 0;
virtual HRESULT UnloadDriver (void) = 0
virtual HRESULT CreateRuleEngine (LPCWSTR Path, IMonitorRuleEngine** Engine) = 0;
virtual HRESULT CreateAgentEngine (ULONG MaxThread, IMonitorAgentEngine** Engine) = 0;
};
函数 | 说明 |
---|---|
Start | 设置驱动回调、安装并启动驱动 |
Control | 跟驱动通讯的入口,详细参考cxMSGUserXxxx结构体 |
CreateRuleEngine | 应用层扩展功能: 加载规则引擎,详细参考规则引擎部分 |
CreateAgentEngine | 应用层扩展功能:创建网络中间人服务器,详细参考网络代理部分 |
UnloadDriver | 停止并卸载驱动 |
支持的Control参数类型
类型 | 说明 |
---|---|
cxMSGUserSetGlobalConfig | 设置全局配置 |
cxMSGUserGetGlobalConfig | 获取全局配置 |
cxMSGUserSetSessionConfig | 设置当前会话配置 |
cxMSGUserGetSessionConfig | 获取当前配置会话 |
cxMSGUserSetMSGConfig | 设置监控消息配置,开启监控都通过这个命令字设置 |
cxMSGUserGetMSGConfig | 获取监控消息配置 |
cxMSGUserEnableProtect | 开启自保护 |
cxMSGUserDisableProtect | 关闭自保护 |
cxMSGUserAddProtectRule | 添加保护规则 |
cxMSGUserRemoveProtectRule | 删除保护规则 |
cxMSGUserRemoveAllProtectRule | 清空保护规则 |
IMonitorCallback
事件回调接口,监控到的事件都通过OnCallback通知到应用层,在回调里面可以通过IMonitorMessage获取事件的详细信息,也可以设置需要响应的结果。
interface IMonitorCallback
{
virtual void OnCallback (IMonitorMessage* Message) = 0;
};
IMonitorCallbackInternal
内部使用的接口,参数是为解析前的原始参数,只供内部使用,没特殊原因,不需要设置这类型的回调
interface IMonitorCallbackInternal
{
virtual void OnCallback (cxMSGHeader* Header, cxMSGAction* Action) = 0;
};
IMonitorMessage
驱动事件消息,包括公共字段(当前进程信息等)、私有字段(具体参考附录的协议字段)
interface IMonitorMessage
{
struct Binary {
PVOID Data;
ULONG Length;
};
virtual cxMSGHeader* GetHeader (void) = 0;
inline ULONG GetType (void) { return GetHeader()->Type; }
inline ULONG GetStatus (void) { return GetHeader()->Status; }
inline ULONG GetCurrentProcessId (void) { return GetHeader()->CurrentProcessId; }
inline ULONG GetCurrentThreadId (void) { return GetHeader()->CurrentThreadId; }
virtual LPCWSTR GetTypeName (void) = 0;
virtual ULONG GetFieldCount (void) = 0;
virtual emMSGDataType GetFieldType (ULONG Index) = 0;
virtual LPCWSTR GetFieldName (ULONG Index) = 0;
virtual ULONG GetFieldIndex (LPCWSTR Name) = 0;
virtual ULONG GetULONG (ULONG Index) = 0;
virtual ULONGLONG GetULONGLONG (ULONG Index) = 0;
virtual LPCWSTR GetString (ULONG Index) = 0;
virtual LPCWSTR GetFormatedString (ULONG Index) = 0;
virtual Binary GetBinary (ULONG Index) = 0;
virtual bool IsMatch (ULONG Index, LPCWSTR Pattern, bool IgnoreCase = true) = 0;
virtual bool IsWaiting (void) = 0;
virtual bool SetAction (const cxMSGAction& Action) = 0;
virtual bool SetBlock (void) = 0;
virtual bool SetGrantedAccess (ULONG Access) = 0;
virtual bool SetIPRedirect (ULONG IP, USHORT Port, ULONG ProcessId = ::GetCurrentProcessId()) = 0;
virtual bool SetTerminateProcess (void) = 0;
virtual bool SetTerminateThread (void) = 0;
virtual bool SetInjectDll (LPCWSTR Path) = 0;
virtual bool SetFileRedirect (LPCWSTR Path) = 0;
};
函数 | 说明 |
---|---|
GetType | 消息类型,比如 emMSGProcessCreate |
GetTypeName | 消息类型的字符串,比如 ProcessCreate |
GetFieldCount | 当前消息字段的格式,每个字段可以通过GetFieldXxx、GetXxx获取属性和值 |
GetStatus | Post请求有效:当前操作的执行结果 |
GetString | 要求字段必须是字符串,如果对应的字段不是字符串,则返回空字符串 |
GetFormatedString | 同GetString,区别在于:不是字符串的内容会强制转换成字符串 |
IsWaiting | 驱动是否阻塞事件执行,如果是可以通过SetXxx来响应事件(阻止、重定向等) |
SetBlock | 阻止当前的操作 |
SetGrantedAccess | 对于打开进程、打开线程操作,可以设置允许的打开权限 |
SetTerminateProcess | 结束当前进程 |
SetTerminateThread | 结束当前线程 |
SetInjectDll | 对当前进程注入动态库(自己判断是32位的还是64位进程) |
SetIPRedirect | 对于Tcp连接,可以设置IP、Port重定向到新的地址 |
IsMatch | 内置通配符字符串匹配,支持 * ? > (> 表示目录,dir> 等同于 dir + dir\\*) IgnoreCase表示是否忽略大小写,默认忽略 |