Skip to content

获取最后一次错误字符串 - GetLastErrorString

函数简介

获取插件内部记录的最后一次错误描述字符串,通常在某个接口调用失败后配合 GetLastError 一起使用。

接口名称

GetLastErrorString

DLL调用

c
long GetLastErrorString();

参数说明

此函数无参数。

示例

SDK 调用

cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
std::string result = ola.GetLastErrorString();
csharp
using OLAPlug;

var ola = new OLAPlugServer();
string result = ola.GetLastErrorString();
python
from OLAPlugServer import OLAPlugServer

ola = OLAPlugServer()
result = ola.GetLastErrorString()
java
import com.olaplug.OLAPlugServer;

OLAPlugServer ola = new OLAPlugServer();
String result = ola.GetLastErrorString();
go
import "github.com/ola/olaplug/olaplug"

ola, _ := olaplug.NewOLAPlugServer("OLAPlug_x64.dll")
defer ola.ReleaseObj()
result := ola.GetLastErrorString()
rust
use olaplug::OLAPlugServer;

let ola = OLAPlugServer::new("OLAPlug_x64.dll").unwrap();
let result = ola.get_last_error_string();
cpp
var ola = com("OlaPlug.OlaSoft")
var result = ola.GetLastErrorString()
vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
result = ola.GetLastErrorString()
text
.局部变量 ola, OLAPlug
ola.创建 ()
result = ola.GetLastErrorString()
aardio
import OLAPlugServer;
var ola = OLAPlugServer();
var result = ola.GetLastErrorString();
text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
文本型 result = ola.GetLastErrorString()
cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
std::string result = ola.GetLastErrorString();

原生 DLL 调用

cpp
long ptr = GetLastErrorString(instance);
if (ptr != 0) {
    char buffer[512] = {0};
    GetStringFromPtr(ptr, buffer, sizeof(buffer));
    FreeStringPtr(ptr);
}
csharp
using System.Runtime.InteropServices;
using System.Text;

[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringFromPtr(long ptr, StringBuilder lpString, int size);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int FreeStringPtr(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringSize(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long GetLastErrorString();

long ptr = GetLastErrorString(instance);
if (ptr != 0) {
    StringBuilder sb = new StringBuilder(GetStringSize(ptr) + 1);
    GetStringFromPtr(ptr, sb, sb.Capacity);
    FreeStringPtr(ptr);
    string result = sb.ToString();
}
python
from ctypes import CDLL, c_int, c_int64, create_string_buffer

ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
ptr = ola.GetLastErrorString(instance)
if ptr:
    buf = create_string_buffer(512)
    ola.GetStringFromPtr(ptr, buf, 512)
    ola.FreeStringPtr(ptr)
    result = buf.value.decode("utf-8")

返回值

返回值说明
(返回值)长整数型:成功返回错误字符串的指针地址,失败或无错误信息返回0。

下表为各错误码对应的默认中文描述(与 GetLastError() 对照)。多数错误在有附加详情时会在基本文案后追加 (详情)AUTHORIZATION_FAILED1005)和 UNKNOWN_ERROR9999)有详情时会整段替换为后端/内部 Message。错误码完整索引见 GetLastError

系统性错误(10xx)

错误码常量名GetLastErrorString
0SUCCESS操作成功
1001PERMISSION_DENIED权限不足,请检查FeatureList权限配置
1002NOT_AUTHORIZED未授权,请先登录
1003INVALID_ARGUMENT参数错误
1004VMWARE_PERMISSION_DENIEDVMware权限不足
1005AUTHORIZATION_FAILED授权失败(有后端详情时返回后端 Message)

图像类错误(20xx)

错误码常量名GetLastErrorString
2001CAPTURE_ERROR截图失败
2002LOAD_IMAGE_ERROR加载图片失败
2003HWND_NOT_VALID窗口句柄无效
2004INVALID_HEX_COLOR_CODE无效的十六进制颜色代码

BindWindow / BindWindowEx 错误(40xx)

错误码常量名GetLastErrorString
4001BIND_INVALID_HWND绑定失败:窗口句柄无效或窗口已销毁
4002BIND_GET_PID_FAILED绑定失败:无法获取窗口所属进程 ID
4003BIND_INVALID_MODE绑定失败:display/mouse/keypad 模式参数无效
4004BIND_NOT_ELEVATED绑定失败:当前进程未以管理员权限运行
4010BIND_VNC_CONNECT_FAILED绑定失败:VNC 中间件连接获取失败
4011BIND_RDP_CONNECT_FAILED绑定失败:RDP 中间件连接获取失败
4012BIND_VNC_INVALID_CONFIG绑定失败:VNC 配置无效(VncServer 为空或 VncPort 非法)
4013BIND_VNC_PORT_UNAVAILABLE绑定失败:VNC 端口不可达(检查地址、端口与防火墙)
4014BIND_VNC_PROTOCOL_INVALID绑定失败:目标端口不是 VNC/RFB 协议
4015BIND_VNC_AUTH_FAILED绑定失败:VNC 认证失败(检查 VncPassword)
4016BIND_VNC_INIT_FAILED绑定失败:VNC 客户端初始化或握手失败
4017BIND_VNC_CONNECT_TIMEOUT绑定失败:等待 VNC 连接建立超时
4020BIND_SHM_CREATE_FAILED绑定失败:创建/打开 Hook 共享内存失败
4021BIND_HOOK_UNLOAD_BUSY绑定失败:目标进程 Hook 仍在卸载中,请稍后重试
4022BIND_MUTEX_CREATE_FAILED绑定失败:创建绑定互斥量失败
4023BIND_MUTEX_LOCK_TIMEOUT绑定失败:获取绑定互斥量超时(可能有其他实例正在绑定同一窗口)
4024BIND_HEARTBEAT_CONFIG_FAILED绑定失败:Hook 心跳/运行参数配置失败
4025BIND_DX3_IPC_PREP_FAILED绑定失败:DX3 截图 IPC 预初始化失败(沙箱/多开环境常见)
4026BIND_AUTH_REQUIRED绑定失败:未授权或缺少有效登录票据,请先 Reg/Activate/Login
4030BIND_INJECT_FAILED绑定失败:DLL 注入失败(详见日志)
4031BIND_INJECT_MEMORY_LOAD_FAILED绑定失败:无痕内存注入失败(MemoryLoadInject)
4032BIND_INJECT_REMOTE_EXE_FAILED绑定失败:RemoteExe 注入失败(inject-helper 启动或 LoadLibrary 失败,中文路径/Temp 目录请重点检查)
4033BIND_INJECT_REMOTE_THREAD_FAILED绑定失败:远程线程注入失败(LoadLibraryA/W 返回空)
4034BIND_INJECT_TEMP_DLL_WRITE_FAILED绑定失败:临时 Hook DLL 写入失败(检查 Temp 目录权限与中文路径)
4035BIND_INJECT_HELPER_EXPORT_FAILED绑定失败:inject-helper 释出到 Temp 失败
4036BIND_INJECT_CREATE_PROCESS_FAILED绑定失败:CreateProcess 启动 inject-helper 失败
4037BIND_INJECT_DLL_NOT_FOUND绑定失败:Hook DLL 文件不存在(注入前校验失败)
4038BIND_INJECT_DUP_MUTEX_BUSY绑定失败:目标进程仍存在 Hook 互斥量,拒绝重复注入
4039BIND_INJECT_TIMEOUT绑定失败:注入握手超时(isInjected/hookCompleted 未就绪)
4040BIND_INJECT_BUILTIN_DLL_DECODE_FAILED绑定失败:内置 hook_graphics DLL 解码失败或为空
4041BIND_INJECT_HELPER_NOT_FOUND绑定失败:inject-helper 可执行文件不存在
4042BIND_INJECT_OPEN_PROCESS_FAILED绑定失败:OpenProcess 打开目标进程失败
4043BIND_INJECT_REFLECTIVE_FAILED绑定失败:无痕注入失败
4044BIND_INJECT_DRIVER_FAILED绑定失败:驱动注入失败
4050BIND_HOOK_INIT_TIMEOUT绑定失败:Hook 握手超时(hookCompleted 未置位)
4099BIND_INTERNAL_EXCEPTION绑定失败:内部异常

完整说明与排查见 BindWindow 错误码说明

AsmCall 错误(50xx)

错误码常量名GetLastErrorString
5001ASM_INVALID_HWNDAsmCall 失败:窗口句柄无效(远程执行需要有效 HWND)
5002ASM_GET_PID_FAILEDAsmCall 失败:无法从窗口句柄获取进程 ID
5003ASM_INVALID_TYPEAsmCall 失败:type 参数无效(有效范围 0-6)
5004ASM_EMPTY_INPUTAsmCall 失败:汇编输入为空
5005ASM_ASSEMBLE_FAILEDAsmCall 失败:汇编编译失败
5006ASM_INVALID_MACHINE_CODEAsmCall 失败:机器码格式无效
5007ASM_PARSE_MACHINE_CODE_FAILEDAsmCall 失败:机器码解析失败
5008ASM_EMPTY_USER_CODEAsmCall 失败:生成的用户代码为空
5009ASM_ALLOC_MEMORY_FAILEDAsmCall 失败:分配可执行内存失败
5010ASM_ADDRESS_SPACE_INSUFFICIENTAsmCall 失败:指定地址空间不足
5011ASM_REASSEMBLE_FAILEDAsmCall 失败:按实际地址重新汇编失败
5012ASM_CODE_SIZE_EXCEEDEDAsmCall 失败:重编译后代码超出可用空间
5013ASM_CODE_REGION_OVERLAPAsmCall 失败:代码区与标志区重叠
5014ASM_RIP_OFFSET_OUT_OF_RANGEAsmCall 失败:RIP 相对偏移超出有效范围
5015ASM_WRITE_MEMORY_FAILEDAsmCall 失败:写入目标进程内存失败
5016ASM_DEBUG_PRIVILEGE_FAILEDAsmCall 失败:无法启用调试权限
5017ASM_NULL_MEMORY_CLIENTAsmCall 失败:内存客户端未初始化
5018ASM_INVALID_ENTRY_POINTAsmCall 失败:执行入口地址无效
5019ASM_REMOTE_THREAD_FAILEDAsmCall 失败:创建远程线程失败
5020ASM_EVENT_CHANNEL_FAILEDAsmCall 失败:注入进程事件通道调用失败
5021ASM_MAIN_THREAD_CALL_FAILEDAsmCall 失败:主线程排队执行失败
5022ASM_DRIVER_CALL_FAILEDAsmCall 失败:驱动执行汇编失败
5023ASM_EXECUTION_TIMEOUTAsmCall 失败:执行超时
5024ASM_READ_RETURN_VALUE_FAILEDAsmCall 失败:读取返回值失败
5098ASM_FAILEDAsmCall 失败(详见日志)
5099ASM_INTERNAL_EXCEPTIONAsmCall 失败:内部异常

完整说明与排查见 AsmCall 错误码说明

驱动内核错误(30xx / NTSTATUS / ProtectFile / VT)

驱动 Status 以有符号 int32 返回时,本接口返回对应中文说明。完整十进制/十六进制对照见 驱动错误码说明

版本(30xx)

十进制(int32)常量名GetLastErrorString
3001DRIVER_VERSION_NOT_SUPPORTED驱动版本不支持(插件与已加载驱动类型不匹配,请重启后加载匹配版本)

驱动通讯与内存(0xE000300x)

十进制(int32)十六进制常量名GetLastErrorString
-5368586230xE0003001DRIVER_NO_PDBPDB解析失败
-5368586220xE0003002DRIVER_NO_OPEN打开进程失败
-5368586210xE0003003DRIVER_NO_HANDLE无效句柄
-5368586200xE0003004DRIVER_NO_MEMORY_TYPE读写类型错误
-5368586190xE0003005DRIVER_NO_ADDRESS地址错误
-5368586180xE0003006DRIVER_NO_ADDRESS_SIZE超出范围
-5368586170xE0003007DRIVER_NO_QUERMEMORY查询内存失败
-5368586160xE0003008DRIVER_NO_ALLOCATE_MEMORY申请内存失败
-5368586150xE0003009DRIVER_NO_OUTBUFF返回参数错误
-5368586140xE000300ADRIVER_NO_MAIN_THREAD获取主线程失败
-5368586120xE000300CDRIVER_NO_MODELE_ADDRESS获取模块地址失败
-5368586110xE000300DDRIVER_NO_READ_WRITE读写失败
-5368586100xE000300EDRIVER_NO_GETFUNC获取函数失败
-5368586090xE000300FDRIVER_NO_VERSION内置时间过期,提示用户更新版本
-5368315910xE0009999OL_ERROR_ERROR未知错误

VT / EPT / 保护 / 注入 / 通讯 / 键鼠(0xE000301x–0xE000302x)

十进制(int32)十六进制常量名GetLastErrorString
-5368586080xE0003010DRIVER_VT_NOT_SUPPORTEDCPU 不支持 VT-x 虚拟化
-5368586070xE0003011DRIVER_VT_DISABLEDVT-x 已被 BIOS 禁用
-5368586060xE0003012DRIVER_VT_ALREADY_ENABLEDVT 已经启用(重复开启)
-5368586050xE0003013DRIVER_VT_ENABLE_FAILEDVT 开启失败
-5368586040xE0003014DRIVER_VT_NOT_ENABLEDVT 未启用
-5368586030xE0003015DRIVER_EPT_NOT_SUPPORTEDCPU 不支持 EPT
-5368586020xE0003016DRIVER_EPT_INIT_FAILEDEPT 初始化失败
-5368586010xE0003017DRIVER_EPT_HOOK_FAILEDEPT Hook 安装失败
-5368586000xE0003018DRIVER_EPT_UNHOOK_FAILEDEPT Hook 卸载失败
-5368585990xE0003019DRIVER_EPT_HOOK_EXISTSEPT Hook 已存在(重复安装)
-5368585980xE000301ADRIVER_EPT_HOOK_NOT_FOUNDEPT Hook 未找到(卸载时不存在)
-5368585970xE000301BDRIVER_EPT_PAGE_ALLOC_FAILEDEPT 伪页分配失败
-5368585960xE000301CDRIVER_EPT_CROSS_PAGEEPT Hook 跨页错误
-5368585950xE000301DDRIVER_PROTECT_ADD_FAILED添加进程保护失败
-5368585940xE000301EDRIVER_PROTECT_REMOVE_FAILED移除进程保护失败
-5368585930xE000301FDRIVER_PROTECT_EXISTS进程已在保护列表中
-5368585920xE0003020DRIVER_PROTECT_NOT_FOUND进程不在保护列表中
-5368585910xE0003021DRIVER_PROTECT_NO_POWER未指定保护权限
-5368585900xE0003022DRIVER_INJECT_FAILEDDLL 注入失败
-5368585890xE0003023DRIVER_INJECT_NO_PROCESS目标进程不存在
-5368585880xE0003024DRIVER_INJECT_NO_DLLDLL 路径无效
-5368585870xE0003025DRIVER_COMM_DECRYPT_FAILED通讯数据解密失败
-5368585860xE0003026DRIVER_COMM_INVALID_SIZE通讯数据大小不匹配
-5368585850xE0003027DRIVER_COMM_INVALID_CMD无效的命令码
-5368585840xE0003028DRIVER_COMM_WRITEBACK_FAILED结果回写失败
-5368585830xE0003029DRIVER_KEYMOUSE_NOT_INIT键鼠设备未初始化
-5368585820xE000302ADRIVER_KEYMOUSE_SEND_FAILED键鼠输入发送失败

驱动加载 NTSTATUS(0xC000xxxx / 0xC0E9xxxx)

十进制(int32)十六进制常量名GetLastErrorString
-10737418230xC0000001DRIVER_UNSUCCESSFUL驱动操作失败(STATUS_UNSUCCESSFUL),无法具体定位原因
-10737417900xC0000022DRIVER_ACCESS_DENIED权限不足,通常需要管理员或 SYSTEM 权限
-10737417720xC0000034DRIVER_OBJECT_NAME_NOT_FOUND注册表路径不存在
-10737417710xC0000035DRIVER_OBJECT_NAME_COLLISION注册表项或对象名冲突
-10737417660xC000003ADRIVER_OBJECT_PATH_NOT_FOUND注册表路径无效
-10737417270xC0000061DRIVER_PRIVILEGE_NOT_HELD缺少 SeLoadDriverPrivilege 权限
-10737417010xC000007BDRIVER_INVALID_IMAGE_FORMAT驱动文件格式不正确(如 32/64 位不匹配)
-10737416700xC000009ADRIVER_INSUFFICIENT_RESOURCES系统资源不足
-10737412100xC0000266DRIVER_INTERNAL_ERROR驱动初始化失败,DriverEntry 出错
-10584719340xC0E90002DRIVER_SYSTEM_INTEGRITY_POLICY_VIOLATION系统完整性策略拦截驱动加载(HVCI/内存完整性/Smart App Control/代码完整性等)

文件保护驱动 ProtectFile(0xDFDFD00x)

十进制(int32)十六进制常量名GetLastErrorString
-5389803510xDFDFD001DRIVER_PF_ERROR_ERROR未知错误
-5389803500xDFDFD002DRIVER_PF_ERROR_NO_OPEN打开进程失败
-5389803490xDFDFD003DRIVER_PF_ERROR_NO_HANDLE无效句柄
-5389803480xDFDFD004DRIVER_PF_ERROR_INVALID_PARAM参数错误
-5389803470xDFDFD005DRIVER_PF_ERROR_PATH_TOO_LONG路径过长

键鼠接口错误(60xx)

错误码常量名GetLastErrorString
6001KEYMOUSE_BACKEND_UNAVAILABLE键鼠通道未就绪(VNC/RDP/虚拟机等未连接)

数据库错误(70xx)

错误码常量名GetLastErrorString
7001SQLITE_INVALID_ARGUMENT数据库参数无效
7002SQLITE_FILE_EXISTS数据库文件已存在(CreateDatabase 不会覆盖)
7003SQLITE_FILE_NOT_FOUND数据库文件不存在
7004SQLITE_OPEN_FAILED打开数据库失败
7005SQLITE_PASSWORD_ERROR数据库密码错误或密钥校验失败
7006SQLITE_INIT_FAILED数据库内建表初始化失败
7007SQLITE_INVALID_HANDLE无效的数据库或结果集句柄
7008SQLITE_EXEC_FAILED执行 SQL 失败
7009SQLITE_PREPARE_FAILEDSQL 预处理失败
7010SQLITE_MEMORY_ERROR内存数据库分配或反序列化失败
7011SQLITE_CHANGE_PASSWORD_FAILED修改数据库密码失败
7012SQLITE_CLOSE_FAILED关闭数据库失败
7013SQLITE_CONNECTION_BUSY数据库正忙(仍有未关闭的查询结果集)
7099SQLITE_INTERNAL_EXCEPTION数据库操作内部异常

完整说明与排查见 数据库错误码说明

YOLO 错误(80xx)

错误码常量名GetLastErrorString
8001YOLO_INVALID_ARGUMENTYOLO 参数无效
8002YOLO_FILE_NOT_FOUNDYOLO 模型/标签/图片文件不存在或读取失败
8003YOLO_INVALID_PACKAGE非欧拉 YOLO 加密包或包格式无效
8004YOLO_PASSWORD_ERRORYOLO 加密包密码错误或为空
8005YOLO_DECRYPT_FAILEDYOLO 加密包解密失败
8006YOLO_LOAD_FAILEDYOLO 模型加载失败
8007YOLO_INVALID_HANDLE无效的 YOLO 模型句柄
8008YOLO_ENCRYPT_FAILEDYOLO 模型加密打包失败
8009YOLO_CONFIG_FAILEDYOLO 模型配置失败
8010YOLO_DEVICE_UNAVAILABLEYOLO 推理设备不可用或 GPU 索引越界
8011YOLO_IMAGE_INVALIDYOLO 图像无效或读取失败
8012YOLO_CAPTURE_FAILEDYOLO 屏幕区域截图失败
8013YOLO_DISABLED当前构建未启用 YOLO
8099YOLO_INTERNAL_EXCEPTIONYOLO 操作内部异常

完整说明与排查见 YOLO 错误码说明

字库找字错误(90xx)

错误码常量名GetLastErrorString
9001OCR_DICT_NOT_FOUND字库不存在(详情为全部加载不到的字库名)
9002OCR_DICT_WORD_NOT_FOUND字库中找不到指定文字(详情为全部拼不出的文字,便于核对中文编码)

完整说明与排查见 字库找字错误码说明

其他

错误码常量名GetLastErrorString
9999UNKNOWN_ERROR未知错误(有详情时整段替换为内部 Message)

注意事项

项目说明
释放内存返回的字符串指针需调用 FreeStringPtr 释放内存。
错误字符串仅表示"最后一次错误"的信息错误字符串仅表示"最后一次错误"的信息,如中途调用了其他接口,错误信息可能被覆盖。
在接口调用失败后建议在接口调用失败后,优先调用 GetLastError 获取错误码,再调用本接口获取错误描述。
附加详情多数错误会在基本文案后追加 (详情)1005 / 9999 有详情时会替换整段文案。
错误码索引BindWindow 见 40xx 说明;AsmCall 见 50xx 说明;驱动见 驱动错误码说明;数据库见 70xx 说明;YOLO 见 80xx 说明;字库找字见 90xx 说明;全部索引见 GetLastError