diff --git a/docs/sdk.md b/docs/sdk.md index ba9e093..a4b9c57 100644 --- a/docs/sdk.md +++ b/docs/sdk.md @@ -8,23 +8,24 @@ `WeChatSDK.dll`内部通过`RPC`通信和注入到微信进程的`WeChatSDKCore.dll`进行功能调用,支持多开微信功能的调用,微信间互不影响。 +在新版本(`1.3.0`)中,`WeChatRs`、`WeChatRc`是虚拟模块,代码何如到`WeChatSDKCore`和`WeChatSDK`中,并且实现了RPC双向通信,用于支持`WeChatSDK`设置回调。 + ## WeChatSDK使用 复制`WeChatSDK`目录中的`sdk.h`、`WeChatSDK.dll`以及`WeChatSDK.lib`(或者显示调用接口)到自己项目中,然后调用`sdk.h`中的接口定义进行代码开发即可。 -发布时需要把所有模块都同时发布出去,包括`WeChatSDK.dll`,`WeChatSDKCore.dll`,`WeChatRs.dll`,`WeChatRc.dll`。 +发布时需要把所有模块都同时发布出去,包括`WeChatSDK.dll`,`WeChatSDKCore.dll`(**新版已经将另外两个模块合并**)。 +~~发布时需要把所有模块都同时发布出去,包括`WeChatSDK.dll`,`WeChatSDKCore.dll`,`WeChatRs.dll`,`WeChatRc.dll`。~~ **源码目录介绍** ``` bin //老版本 docs //文档 -sdk //vs2017 x86编译完成的sdk模块 +sdk //vs2017 x86编译完成的sdk模块,其他语言的sdk src |- common //公共目录 |- WeChatSDK //WeChatSDK.dll - |- WeChatRc //WeChatRs.dll - |- WeChatRs //WeChatRc.dll |- WeChatSDKCore //WeChatSDKCore.dll |- WeChatSDKTest //SDK示例,普通用户多开工具 ``` @@ -32,7 +33,7 @@ src 编译顺序(vs2017 x86): ``` -WeChatRs -> WeChatRc -> WeChatSDK -> WeChatSDKCore +WeChatSDKCore -> WeChatSDK ``` ## WeChatSDK接口 @@ -54,7 +55,7 @@ bool WXIsWechatSDKOk(DWORD pid); 检查初始化WeChatSDK是否成功。在检查到成功之后才能调用其他接口,否则SDK无法正常工作。pid是WXOpenWechat返回值。返回true表示成功。 int WXAntiRevokeMsg(DWORD pid); -开启防消息撤销功能。pid是WXOpenWechat返回值。返回0表示成功。 +开启防消息撤销功能。pid是WXOpenWechat返回值。返回0表示成功。在1.3.0版本中更换实现方式,增加撤销提示,防止出现某些不可预见情况。 int WXUnAntiRevokeMsg(DWORD pid); 关闭防消息撤销功能。pid是WXOpenWechat返回值。返回0表示成功。 @@ -68,6 +69,17 @@ int WXUnSaveVoiceMsg(DWORD pid); int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg); 发送文字消息接口,支持表情[x]。pid是WXOpenWechat返回值,wxid指定要发送对象的wxid,msg指定要发送内容。返回0表示成功。后续会提供通过微信名或昵称获取wxid接口。 +int WXGetWechat(const wchar_t* wxid); +通过wxid找到已经打开的微信的pid,实现不完整,不建议使用。 + +typedef int(*PFNRECVTEXTMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* msg); +int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr); +设置接受文字消息的回调函数,在回调函数中自行处理消息。pid是WXOpenWechat返回值,funptr是回调函数,PFNRECVTEXTMSG_CALLBACK是回调接口声明。 + +int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr); +int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr); +设置支付相关回调接口。 + //void WXSendGroupTextMsg(); //暂不支持 //void WXSendImageMsg(); //暂不支持 //void WXSendVoiceMsg(); //暂不支持 @@ -80,7 +92,7 @@ int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg); 详细请参考`WeChatSDKTest`使用方法。 -其他语言接口请看[文档](sdkmore.md),目前已经发布`Python`,`Java`接口。 +其他语言接口请看[文档](sdkmore.md),目前已经发布`Python`,`Java`, `C#`接口。 ## TODO diff --git a/docs/sdkmore.md b/docs/sdkmore.md index 9bcceba..06b9194 100644 --- a/docs/sdkmore.md +++ b/docs/sdkmore.md @@ -3,7 +3,7 @@ ## Python -发布`Python`版本的接口,具体使用见`src/WeChatSDKPy/sdk.py`。 +发布`Python`版本的接口,具体使用见`sdk/WeChatSDK.py`。 ``` //需管理员运行python @@ -19,7 +19,7 @@ print(wxsdk.WXSendTextMsg("wxid_n11111", "This is a python sdk test msg")) ## Java -发布`Java`版本的接口,具体使用见`src/WeChatSDKJava/WeChatSDK.java`和`TestJavaSDK.java`。 +发布`Java`版本的接口,具体使用见`sdk/WeChatSDK.java`和`TestJavaSDK.java`。 由于`Java`接口使用了`jna`,所以需要下载[jna.jar](http://repo1.maven.org/maven2/net/java/dev/jna/jna/5.2.0/jna-5.2.0.jar),具体编译方法请查找`Java`相关文章。 @@ -51,3 +51,55 @@ public class TestJavaSDK { } ``` +## C# + +发布`Java`版本的接口,具体使用见`sdk/WeChatSDK.cs`和`TestSDK.cs`。 + +``` +//需管理员运行 +using static WeChatSDK.WeChatSDK; + +namespace ConsoleApp1 +{ + class Program + { + static void Main(string[] args) + { + try + { + uint pid = WXOpenWechat(); + Console.WriteLine("WXOpenWechat pid:" + pid); + + while (!WXIsWechatAlive(pid)) + { + Console.Write("."); + Thread.Sleep(100); + } + Console.WriteLine("initialize sdk..."); + Console.WriteLine(WXInitialize(pid)); + while (!WXIsWechatSDKOk(pid)) + { + Console.Write("."); + Thread.Sleep(100); + } + Console.WriteLine("sdk ok..."); + WXAntiRevokeMsg(pid); + WXSaveVoiceMsg(pid, "c:\\wxmsg"); + + WXRecvPayMsg(pid, RecvPayMsg); + + Console.ReadLine(); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } + static int RecvMoneyMsg(UInt32 pid, string wxid, string id, string msg) + { + Console.WriteLine(wxid + ":" + msg); + return 0; + } + } +} +``` \ No newline at end of file diff --git a/docs/update.md b/docs/update.md index d870a84..964b696 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,4 +1,10 @@ # 更新日志 + +**2019年3月8日** +1. 发布Python、Java、C#的SDK,版本1.3.0 +2. 升级防撤消功能,有撤销提醒 +3. 增加接受消息接口(3种) + **2019年2月24日** 1. 开放WeChatSDK,提供丰富的操作微信的接口 2. 保留v1.1.3老版本,[下载地址](https://github.com/anhkgg/SuperWeChatPC/tree/master/bin) diff --git a/readme.md b/readme.md index d625885..7b32bf7 100644 --- a/readme.md +++ b/readme.md @@ -5,14 +5,15 @@ Ϊ˷࿪ܹ`PC`΢飬ָıĿṩԲͬȺĹܡ -1. ͨûȻֱʹԭĶ࿪ߣ֧ؿִг򼴿ɡ[صַ](https://github.com/anhkgg/SuperWeChatPC/archive/v1.1.3.zip)ϸʹ÷뿴[ͨûʹSuperWeChatPC](docs/normal.md) +1. ͨûȻֱʹԭĶ࿪ߣֱؿִг򼴿ɡ[صַ](https://github.com/anhkgg/SuperWeChatPC/archive/v1.1.3.zip)ϸʹ÷뿴[ͨûʹSuperWeChatPC](docs/normal.md) 2. Կߣṩ`WeChatSDK`Ų΢ŵĸֽӿڣԽжοʹ÷뿴[WeChatSDKָ](docs/sdk.md) `SuperWeChatPC`ֹ֧ܣ 1. ȫ汾޶࿪ -2. Ϣ`>=2.6.6.25` +2. Ϣгʾ`>=2.6.7.40` 3. Ϣݣ`>=2.6.6.28` 4. Ϣͽӿڣ`>=2.6.6.44` +5. Ϣӿڣ3Ϣ`>=2.6.7.40`) **`WeChatSDK`ĿǰѾ`C++``Python``Java`ӿڡ** 뿴[WeChatSDKָ](docs/sdk.md) @@ -35,6 +36,10 @@ ӭPRṩ顣 +**л** + +1. [https://github.com/martona/mhook](https://github.com/martona/mhook) + ### **** diff --git "a/sdk/SuperWeChat(\350\257\255\351\237\263\345\244\207\344\273\275).bat" "b/sdk/SuperWeChat(\350\257\255\351\237\263\345\244\207\344\273\275).bat" new file mode 100644 index 0000000..31f607a --- /dev/null +++ "b/sdk/SuperWeChat(\350\257\255\351\237\263\345\244\207\344\273\275).bat" @@ -0,0 +1,3 @@ +@echo off + +SuperWeChat.exe c:\wxmsg \ No newline at end of file diff --git a/sdk/SuperWeChat.exe b/sdk/SuperWeChat.exe index f8d1f5c..782c042 100644 Binary files a/sdk/SuperWeChat.exe and b/sdk/SuperWeChat.exe differ diff --git a/sdk/SuperWeChat.zip b/sdk/SuperWeChat.zip index 6740905..11640ad 100644 Binary files a/sdk/SuperWeChat.zip and b/sdk/SuperWeChat.zip differ diff --git a/src/WeChatSDKJava/TestJavaSDK.java b/sdk/TestJavaSDK.java similarity index 100% rename from src/WeChatSDKJava/TestJavaSDK.java rename to sdk/TestJavaSDK.java diff --git a/sdk/TestSDK.cs b/sdk/TestSDK.cs new file mode 100644 index 0000000..9b61c24 --- /dev/null +++ b/sdk/TestSDK.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; + +using static WeChatSDK.WeChatSDK; + +namespace ConsoleApp1 +{ + class Program + { + static void Main(string[] args) + { + try + { + uint pid = WXOpenWechat(); + Console.WriteLine("WXOpenWechat pid:" + pid); + + while (!WXIsWechatAlive(pid)) + { + Console.Write("."); + Thread.Sleep(100); + } + + Console.WriteLine("initialize sdk..."); + + Console.WriteLine(WXInitialize(pid)); + + while (!WXIsWechatSDKOk(pid)) + { + Console.Write("."); + Thread.Sleep(100); + } + + Console.WriteLine("sdk ok..."); + + WXAntiRevokeMsg(pid); + WXSaveVoiceMsg(pid, "c:\\wxmsg"); + + WXRecvPayMsg(pid, RecvMoneyMsg); + + Console.ReadLine(); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } + + static int RecvMoneyMsg(UInt32 pid, string wxid, string id, string msg) + { + Console.WriteLine(wxid + ":" + msg); + return 0; + } + } +} diff --git a/sdk/WeChatRc.dll b/sdk/WeChatRc.dll deleted file mode 100644 index a60a2fd..0000000 Binary files a/sdk/WeChatRc.dll and /dev/null differ diff --git a/sdk/WeChatRs.dll b/sdk/WeChatRs.dll deleted file mode 100644 index 4b88746..0000000 Binary files a/sdk/WeChatRs.dll and /dev/null differ diff --git a/sdk/WeChatSDK.cs b/sdk/WeChatSDK.cs new file mode 100644 index 0000000..08f9b25 --- /dev/null +++ b/sdk/WeChatSDK.cs @@ -0,0 +1,56 @@ +using System; +using System.Runtime.InteropServices; + +namespace WeChatSDK +{ + class WeChatSDK + { + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public uint WXOpenWechat(); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public bool WXIsWechatAlive(uint pid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXInitialize(uint pid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXUninitialize(uint pid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public bool WXIsWechatSDKOk(uint pid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXGetWechat(string wxid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXAntiRevokeMsg(uint pid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXUnAntiRevokeMsg(uint pid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)] + extern static public int WXSaveVoiceMsg(uint pid, string path); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXUnSaveVoiceMsg(uint pid); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)] + extern static public int WXSendTextMsg(uint pid, string wxid, string msg); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Unicode)] + public delegate int RecvMsgCallback(uint pid, string wxid, string msg); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Unicode)] + public delegate int RecvPayMsgCallback(uint pid, string wxid, string id, string msg); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXRecvTextMsg(uint pid, RecvMsgCallback funptr); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXRecvTransferMsg(uint pid, RecvPayMsgCallback funptr); + + [DllImport(@"WeChatSDK.dll", CallingConvention = CallingConvention.Cdecl)] + extern static public int WXRecvPayMsg(uint pid, RecvPayMsgCallback funptr); + } +} \ No newline at end of file diff --git a/sdk/WeChatSDK.dll b/sdk/WeChatSDK.dll index f68f2e8..06e8b29 100644 Binary files a/sdk/WeChatSDK.dll and b/sdk/WeChatSDK.dll differ diff --git a/src/WeChatSDKJava/WeChatSDK.java b/sdk/WeChatSDK.java similarity index 100% rename from src/WeChatSDKJava/WeChatSDK.java rename to sdk/WeChatSDK.java diff --git a/src/WeChatSDKPy/sdk.py b/sdk/WeChatSDK.py similarity index 100% rename from src/WeChatSDKPy/sdk.py rename to sdk/WeChatSDK.py diff --git a/sdk/WeChatSDKCore.dll b/sdk/WeChatSDKCore.dll index 5c10f59..bd400e6 100644 Binary files a/sdk/WeChatSDKCore.dll and b/sdk/WeChatSDKCore.dll differ diff --git a/sdk/sdk.h b/sdk/sdk.h index 148c68e..933055d 100644 --- a/sdk/sdk.h +++ b/sdk/sdk.h @@ -6,12 +6,22 @@ int WXInitialize(DWORD pid); int WXUninitialize(DWORD pid); bool WXIsWechatSDKOk(DWORD pid); +int WXGetWechat(const wchar_t* wxid);//Ѿ΢ + int WXAntiRevokeMsg(DWORD pid); int WXUnAntiRevokeMsg(DWORD pid); int WXSaveVoiceMsg(DWORD pid, const wchar_t* path); int WXUnSaveVoiceMsg(DWORD pid); int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg); +int WXSendImageMsg(DWORD pid, const wchar_t* wxid, const wchar_t* path); + +typedef int(*PFNRECVTEXTMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* msg); +int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr); + +typedef int(*PFNRECVMONEYMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* tid, wchar_t* msg); +int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr); +int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr); void WXSendGroupTextMsg(); void WXSendImageMsg(); diff --git a/src/WeChatRc/WeCharRc.def b/src/WeChatRc/WeCharRc.def deleted file mode 100644 index 5d1418a..0000000 --- a/src/WeChatRc/WeCharRc.def +++ /dev/null @@ -1,4 +0,0 @@ -EXPORTS - ConnectSDKServer - DisconnectSDKServer - GetSDKInterface \ No newline at end of file diff --git a/src/WeChatRc/WeChatRc.aps b/src/WeChatRc/WeChatRc.aps deleted file mode 100644 index 70b5433..0000000 Binary files a/src/WeChatRc/WeChatRc.aps and /dev/null differ diff --git a/src/WeChatRc/WeChatRc.rc b/src/WeChatRc/WeChatRc.rc deleted file mode 100644 index a0b4e14..0000000 Binary files a/src/WeChatRc/WeChatRc.rc and /dev/null differ diff --git a/src/WeChatRc/WeChatRc.vcxproj b/src/WeChatRc/WeChatRc.vcxproj deleted file mode 100644 index 315b25e..0000000 --- a/src/WeChatRc/WeChatRc.vcxproj +++ /dev/null @@ -1,187 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333} - Win32Proj - WeChatRc - 10.0.17134.0 - - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - - - false - - - true - - - true - - - false - - - - Use - Level3 - MaxSpeed - true - true - true - WIN32;NDEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - MultiThreaded - - - Windows - true - true - true - WeCharRc.def - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)" - - - - - Use - Level3 - Disabled - true - WIN32;_DEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - - - - - Use - Level3 - Disabled - true - _DEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - - - - - Use - Level3 - MaxSpeed - true - true - true - NDEBUG;WECHATRC_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - true - true - - - - - - - - - - - - - NotUsing - - - NotUsing - - - - Create - Create - Create - Create - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/WeChatRc/WeChatRc.vcxproj.filters b/src/WeChatRc/WeChatRc.vcxproj.filters deleted file mode 100644 index 9567eb1..0000000 --- a/src/WeChatRc/WeChatRc.vcxproj.filters +++ /dev/null @@ -1,64 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;ipp;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - - - 源文件 - - - 源文件 - - - 源文件 - - - 源文件 - - - 源文件 - - - - - 源文件 - - - - - 资源文件 - - - \ No newline at end of file diff --git a/src/WeChatRc/WeChatRc.vcxproj.user b/src/WeChatRc/WeChatRc.vcxproj.user deleted file mode 100644 index be25078..0000000 --- a/src/WeChatRc/WeChatRc.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/WeChatRc/dllmain.cpp b/src/WeChatRc/dllmain.cpp deleted file mode 100644 index bc73c03..0000000 Binary files a/src/WeChatRc/dllmain.cpp and /dev/null differ diff --git a/src/WeChatRc/resource.h b/src/WeChatRc/resource.h deleted file mode 100644 index 2f32917..0000000 --- a/src/WeChatRc/resource.h +++ /dev/null @@ -1,14 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by WeChatRc.rc - -// ¶һĬֵ -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/WeChatRc/sdk.cpp b/src/WeChatRc/sdk.cpp deleted file mode 100644 index cc091d5..0000000 Binary files a/src/WeChatRc/sdk.cpp and /dev/null differ diff --git a/src/WeChatRc/stdafx.cpp b/src/WeChatRc/stdafx.cpp deleted file mode 100644 index 08343af..0000000 Binary files a/src/WeChatRc/stdafx.cpp and /dev/null differ diff --git a/src/WeChatRc/stdafx.h b/src/WeChatRc/stdafx.h deleted file mode 100644 index 7e9fc49..0000000 Binary files a/src/WeChatRc/stdafx.h and /dev/null differ diff --git a/src/WeChatRc/targetver.h b/src/WeChatRc/targetver.h deleted file mode 100644 index 7f8bdf0..0000000 Binary files a/src/WeChatRc/targetver.h and /dev/null differ diff --git a/src/WeChatRs/WeChatRs.aps b/src/WeChatRs/WeChatRs.aps deleted file mode 100644 index b60483c..0000000 Binary files a/src/WeChatRs/WeChatRs.aps and /dev/null differ diff --git a/src/WeChatRs/WeChatRs.def b/src/WeChatRs/WeChatRs.def deleted file mode 100644 index 949f487..0000000 --- a/src/WeChatRs/WeChatRs.def +++ /dev/null @@ -1,3 +0,0 @@ -EXPORTS - StartSDKServer - StopSDKServer \ No newline at end of file diff --git a/src/WeChatRs/WeChatRs.rc b/src/WeChatRs/WeChatRs.rc deleted file mode 100644 index 190bad4..0000000 Binary files a/src/WeChatRs/WeChatRs.rc and /dev/null differ diff --git a/src/WeChatRs/WeChatRs.vcxproj b/src/WeChatRs/WeChatRs.vcxproj deleted file mode 100644 index 863fdfa..0000000 --- a/src/WeChatRs/WeChatRs.vcxproj +++ /dev/null @@ -1,191 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {F980CB45-B702-44D4-976E-F32FCB35D085} - Win32Proj - WeChatRs - 10.0.17134.0 - - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - - - false - - - true - - - true - - - false - - - - Use - Level3 - MaxSpeed - true - true - true - WIN32;NDEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - MultiThreaded - - - Windows - true - true - true - WeChatRs.def - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)" - - - - - Use - Level3 - Disabled - true - WIN32;_DEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - - - - - Use - Level3 - Disabled - true - _DEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - - - - - Use - Level3 - MaxSpeed - true - true - true - NDEBUG;WECHATRS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - - - Windows - true - true - true - - - - - - - - - - - - - NotUsing - - - - NotUsing - - - Create - Create - Create - Create - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/WeChatRs/WeChatRs.vcxproj.filters b/src/WeChatRs/WeChatRs.vcxproj.filters deleted file mode 100644 index 4fbe060..0000000 --- a/src/WeChatRs/WeChatRs.vcxproj.filters +++ /dev/null @@ -1,70 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;ipp;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - - - 源文件 - - - 源文件 - - - 源文件 - - - 源文件 - - - 源文件 - - - - - - 源文件 - - - - - 源文件 - - - - - 资源文件 - - - \ No newline at end of file diff --git a/src/WeChatRs/WeChatRs.vcxproj.user b/src/WeChatRs/WeChatRs.vcxproj.user deleted file mode 100644 index be25078..0000000 --- a/src/WeChatRs/WeChatRs.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/WeChatRs/dllmain.cpp b/src/WeChatRs/dllmain.cpp deleted file mode 100644 index bc73c03..0000000 Binary files a/src/WeChatRs/dllmain.cpp and /dev/null differ diff --git a/src/WeChatRs/resource.h b/src/WeChatRs/resource.h deleted file mode 100644 index b1f4a99..0000000 --- a/src/WeChatRs/resource.h +++ /dev/null @@ -1,14 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by WeChatRs.rc - -// ¶һĬֵ -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/src/WeChatRs/sdk.cpp b/src/WeChatRs/sdk.cpp deleted file mode 100644 index 4ef8902..0000000 Binary files a/src/WeChatRs/sdk.cpp and /dev/null differ diff --git a/src/WeChatRs/sdkdef.idl b/src/WeChatRs/sdkdef.idl deleted file mode 100644 index 54102ce..0000000 --- a/src/WeChatRs/sdkdef.idl +++ /dev/null @@ -1,14 +0,0 @@ -[ - uuid(EC3A7CE8-8F99-47ef-9705-DA5DF14F9A4C), - version(1.0) -] - -interface WechatSDK -{ - int Initialize(); - int AntiRevokeMsg(); - int UnAntiRevokeMsg(); - int StartSaveVoiceMsg([in, string]wchar_t* path); - int StopSaveVoiceMsg(); - int SendTextMsg([in, string]wchar_t* wxid, [in, string]wchar_t* msg); -} \ No newline at end of file diff --git a/src/WeChatRs/stdafx.cpp b/src/WeChatRs/stdafx.cpp deleted file mode 100644 index 08343af..0000000 Binary files a/src/WeChatRs/stdafx.cpp and /dev/null differ diff --git a/src/WeChatRs/stdafx.h b/src/WeChatRs/stdafx.h deleted file mode 100644 index 7e9fc49..0000000 Binary files a/src/WeChatRs/stdafx.h and /dev/null differ diff --git a/src/WeChatRs/targetver.h b/src/WeChatRs/targetver.h deleted file mode 100644 index 7f8bdf0..0000000 Binary files a/src/WeChatRs/targetver.h and /dev/null differ diff --git a/src/WeChatSDK/WeChatSDK.vcxproj b/src/WeChatSDK/WeChatSDK.vcxproj index 5ed0e3a..3dd3294 100644 --- a/src/WeChatSDK/WeChatSDK.vcxproj +++ b/src/WeChatSDK/WeChatSDK.vcxproj @@ -103,7 +103,8 @@ sdk.def - copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)" + copy "$(OutDir)$(TargetName)$(TargetExt)" "../../sdk/$(TargetName)$(TargetExt)" +copy "sdk.h" "../../sdk/sdk.h" @@ -153,17 +154,33 @@ + + + + + + + NotUsing + + + NotUsing + + + NotUsing + + + Create Create diff --git a/src/WeChatSDK/WeChatSDK.vcxproj.filters b/src/WeChatSDK/WeChatSDK.vcxproj.filters index b2881aa..30f3bba 100644 --- a/src/WeChatSDK/WeChatSDK.vcxproj.filters +++ b/src/WeChatSDK/WeChatSDK.vcxproj.filters @@ -13,6 +13,9 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {f2c8e71e-ece9-4410-a55b-b86768c50a6b} + @@ -33,6 +36,21 @@ 头文件 + + rpc + + + rpc + + + rpc + + + rpc + + + rpc + @@ -47,6 +65,21 @@ 源文件 + + rpc + + + rpc + + + rpc + + + rpc + + + 源文件 + diff --git a/src/WeChatSDK/inject.h b/src/WeChatSDK/inject.h index 7ab3e62..522795d 100644 --- a/src/WeChatSDK/inject.h +++ b/src/WeChatSDK/inject.h @@ -9,4 +9,6 @@ int GetProcID(const WCHAR* _proc_name); bool InjectDll(const WCHAR* path, const WCHAR* dllpath); //pid: process id //dllpath: dll full path -bool InjectDll1(DWORD pid, const WCHAR* dllpath); \ No newline at end of file +bool InjectDll1(DWORD pid, const WCHAR* dllpath); +// +bool EnjectDll(DWORD pid, const WCHAR* dllname); \ No newline at end of file diff --git a/src/WeChatSDK/inject.lib b/src/WeChatSDK/inject.lib index ead1134..0f823a2 100644 Binary files a/src/WeChatSDK/inject.lib and b/src/WeChatSDK/inject.lib differ diff --git a/src/WeChatSDK/rpcutil.cpp b/src/WeChatSDK/rpcutil.cpp new file mode 100644 index 0000000..fa8a8c2 --- /dev/null +++ b/src/WeChatSDK/rpcutil.cpp @@ -0,0 +1,35 @@ +#include "stdafx.h" +#include "../common/rpcdef.h" +#include "../common/rpc.h" +#include "../WeChatSDKCore/sdkdef_h.h" +#include "../WeChatSDKCore/sdkclk_h.h" + +// for sdkdef.idl + +int ConnectSDKServer(DWORD pid, RPC_WSTR* StringBinding) +{ + WCHAR wszEndPoint[MAX_PATH] = { 0 }; + wsprintf(wszEndPoint, L"%ws_%d", g_Endpoint, pid); + RPC_STATUS status = RpcConnectServer((RPC_WSTR)wszEndPoint, &WechatRs_IfHandle, StringBinding); + return status; +} + +int DisconnectSDKServer(DWORD pid, RPC_WSTR* StringBinding) +{ + RpcDisconnectServer(&WechatRs_IfHandle, StringBinding); + return 0; +} + +//for sdkclk.idl + +int StartSDKClkServer() +{ + WCHAR wszEndPoint[MAX_PATH] = { 0 }; + wsprintf(wszEndPoint, L"%ws", g_ClkEndpoint); + return RpcStartService((RPC_WSTR)wszEndPoint, WechatSDKClk_v1_0_s_ifspec); +} + +void StopSDKClkServer() +{ + RpcStopService(); +} diff --git a/src/WeChatSDK/rpcutil.h b/src/WeChatSDK/rpcutil.h new file mode 100644 index 0000000..a5d0170 --- /dev/null +++ b/src/WeChatSDK/rpcutil.h @@ -0,0 +1,8 @@ +#pragma once + +#include "stdafx.h" + +int ConnectSDKServer(DWORD pid, RPC_WSTR* StringBinding); +int DisconnectSDKServer(DWORD pid, RPC_WSTR* StringBinding); +int StartSDKClkServer(); +void StopSDKClkServer(); \ No newline at end of file diff --git a/src/WeChatSDK/sdk.cpp b/src/WeChatSDK/sdk.cpp index 26e6d61..508c779 100644 --- a/src/WeChatSDK/sdk.cpp +++ b/src/WeChatSDK/sdk.cpp @@ -6,24 +6,44 @@ #include "sdk.h" #include "inject.h" -#include "../common/sdkinf.h" -#pragma comment(lib, "..\\WeChatSDKCore\\Release\\WeChatRc.lib") +//#include "../common/sdkinf.h" +#include "../WeChatSDKCore/sdkdef_h.h" +#include "rpcutil.h" + +//#pragma comment(lib, "..\\WeChatSDKCore\\Release\\WeChatRc.lib") #pragma comment(lib, "inject.lib") +#define WECHAREXE L"WeChat.exe" #define WECHATWINDLL L"WeChatWin.dll" #define WECHATSDKDLL L"WeChatSDK.dll" #define WECHATINJECTDLL L"WeChatSDKCore.dll" //TODO: edit the file to add interface -//int ConnectSDKServer0(DWORD pid); -//int DisconnectSDKServer0(DWORD pid); +bool g_IsSDKInited = false; + -int ConnectSDKServer(DWORD pid, RPC_WSTR* StringBinding); -int DisconnectSDKServer(DWORD pid, RPC_WSTR* StringBinding); -int GetSDKInterface(PWechatSDKInterface p); +void RpcLoop() +{ + OutputDebugString(L"start wechatsdk rpc"); + StartSDKClkServer(); + OutputDebugString(L"exit..wechatsdk.rpc"); +} + +int InitSDK() +{ + CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RpcLoop, NULL, 0, NULL); + return ERROR_SUCCESS; +} + +void UninitSDK() +{ + if (g_IsSDKInited) { + g_IsSDKInited = false; + StopSDKClkServer(); + } +} -WechatSDKInterface g_SDKInf = { 0 }; int WXOpenWechat() { @@ -35,6 +55,28 @@ int WXOpenWechat() return pid; } +int WXGetWechat(const wchar_t* wxid) +{ + int ret = 0; + PROCESSENTRY32 pe32 = { sizeof(pe32) }; + + HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnap == INVALID_HANDLE_VALUE) { + return 0; + } + + if (Process32First(hSnap, &pe32)) { + do { + if (!_wcsnicmp(pe32.szExeFile, WECHAREXE, wcslen(WECHAREXE))) { + ret = pe32.th32ProcessID; + //TODO: //WXGetSelfWxid(); + break; + } + } while (Process32Next(hSnap, &pe32)); + } + return ret; +} + bool WXIsWechatAlive(DWORD pid) { bool ret = false; @@ -56,6 +98,8 @@ bool WXIsWechatAlive(DWORD pid) return ret; } +//for sdk interface + int WXInitialize(DWORD pid) { WCHAR DllPath[MAX_PATH] = { 0 }; @@ -76,8 +120,12 @@ int WXInitialize(DWORD pid) return -1; } - if (g_SDKInf.Initialize == NULL) { - GetSDKInterface(&g_SDKInf); + //WSDKInitialize(); //rpcδ + + if (!g_IsSDKInited) { + if (InitSDK() == ERROR_SUCCESS) { + g_IsSDKInited = true; + } } return ERROR_SUCCESS; @@ -85,8 +133,29 @@ int WXInitialize(DWORD pid) int WXUninitialize(DWORD pid) { + UninitSDK(); //EnjectDll - return 0; + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(pid, &StringBinding); + if (ret == ERROR_SUCCESS) { + RpcTryExcept + { + ret = WSDKUninitialize(); + } + RpcExcept(1) + { + //printf("RPC Exception %d/n", RpcExceptionCode()); + return false; + } + RpcEndExcept + + DisconnectSDKServer(pid, &StringBinding); + + EnjectDll(pid, WECHATINJECTDLL); + + return ERROR_SUCCESS; + } + return -1; } bool WXIsWechatSDKOk(DWORD pid) @@ -96,7 +165,7 @@ bool WXIsWechatSDKOk(DWORD pid) if (ret == ERROR_SUCCESS) { RpcTryExcept { - ret = g_SDKInf.Initialize(); + ret = WSDKInitialize(); } RpcExcept(1) { @@ -119,7 +188,7 @@ int WXAntiRevokeMsg(DWORD pid) // ǵ÷˵ĺ RpcTryExcept { - ret = g_SDKInf.AntiRevokeMsg(); + ret = WSDKAntiRevokeMsg(); } RpcExcept(1) { @@ -140,7 +209,7 @@ int WXUnAntiRevokeMsg(DWORD pid) // ǵ÷˵ĺ RpcTryExcept { - ret = g_SDKInf.UnAntiRevokeMsg(); + ret = WSDKUnAntiRevokeMsg(); } RpcExcept(1) { @@ -161,7 +230,7 @@ int WXSaveVoiceMsg(DWORD pid, const wchar_t* path) // ǵ÷˵ĺ RpcTryExcept { - ret = g_SDKInf.StartSaveVoiceMsg((wchar_t *)path); + ret = WSDKStartSaveVoiceMsg((wchar_t *)path); } RpcExcept(1) { @@ -181,7 +250,7 @@ int WXUnSaveVoiceMsg(DWORD pid) // ǵ÷˵ĺ RpcTryExcept { - ret = g_SDKInf.StopSaveVoiceMsg(); + ret = WSDKStopSaveVoiceMsg(); } RpcExcept(1) { @@ -202,7 +271,7 @@ int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg) // ǵ÷˵ĺ RpcTryExcept { - ret = g_SDKInf.SendTextMsg((wchar_t*)wxid, (wchar_t*)msg); + ret = WSDKSendTextMsg((wchar_t*)wxid, (wchar_t*)msg); } RpcExcept(1) { @@ -213,4 +282,88 @@ int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg) DisconnectSDKServer(pid, &StringBinding); } return ret; +} + +int WXSendImageMsg(DWORD pid, const wchar_t* wxid, const wchar_t* path) +{ + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(pid, &StringBinding); + if (ret == 0) { + // ǵ÷˵ĺ + RpcTryExcept + { + ret = WSDKSendImageMsg((wchar_t*)wxid, (wchar_t*)path); + } + RpcExcept(1) + { + printf("RPC Exception %d/n", RpcExceptionCode()); + } + RpcEndExcept + + DisconnectSDKServer(pid, &StringBinding); + } + return ret; +} + +int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr) +{ + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(pid, &StringBinding); + if (ret == 0) { + // ǵ÷˵ĺ + RpcTryExcept + { + ret = WSDKRecvTextMsg((unsigned int)funptr); + } + RpcExcept(1) + { + printf("RPC Exception %d/n", RpcExceptionCode()); + } + RpcEndExcept + + DisconnectSDKServer(pid, &StringBinding); + } + return ret; +} + +int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr) +{ + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(pid, &StringBinding); + if (ret == 0) { + // ǵ÷˵ĺ + RpcTryExcept + { + ret = WSDKRecvTransferMsg((unsigned int)funptr); + } + RpcExcept(1) + { + printf("RPC Exception %d/n", RpcExceptionCode()); + } + RpcEndExcept + + DisconnectSDKServer(pid, &StringBinding); + } + return ret; +} + +int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr) +{ + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(pid, &StringBinding); + if (ret == 0) { + // ǵ÷˵ĺ + RpcTryExcept + { + ret = WSDKRecvPayMsg((unsigned int)funptr); + } + RpcExcept(1) + { + printf("RPC Exception %d/n", RpcExceptionCode()); + } + RpcEndExcept + + DisconnectSDKServer(pid, &StringBinding); + } + return ret; } \ No newline at end of file diff --git a/src/WeChatSDK/sdk.def b/src/WeChatSDK/sdk.def index 411e340..0a2b69a 100644 --- a/src/WeChatSDK/sdk.def +++ b/src/WeChatSDK/sdk.def @@ -1,5 +1,6 @@ EXPORTS WXOpenWechat + WXGetWechat WXIsWechatAlive WXInitialize WXUninitialize @@ -8,4 +9,8 @@ EXPORTS WXUnAntiRevokeMsg WXSaveVoiceMsg WXUnSaveVoiceMsg - WXSendTextMsg \ No newline at end of file + WXSendTextMsg + ;WXSendImageMsg + WXRecvTextMsg + WXRecvTransferMsg + WXRecvPayMsg \ No newline at end of file diff --git a/src/WeChatSDK/sdk.h b/src/WeChatSDK/sdk.h index 148c68e..933055d 100644 --- a/src/WeChatSDK/sdk.h +++ b/src/WeChatSDK/sdk.h @@ -6,12 +6,22 @@ int WXInitialize(DWORD pid); int WXUninitialize(DWORD pid); bool WXIsWechatSDKOk(DWORD pid); +int WXGetWechat(const wchar_t* wxid);//Ѿ΢ + int WXAntiRevokeMsg(DWORD pid); int WXUnAntiRevokeMsg(DWORD pid); int WXSaveVoiceMsg(DWORD pid, const wchar_t* path); int WXUnSaveVoiceMsg(DWORD pid); int WXSendTextMsg(DWORD pid, const wchar_t* wxid, const wchar_t* msg); +int WXSendImageMsg(DWORD pid, const wchar_t* wxid, const wchar_t* path); + +typedef int(*PFNRECVTEXTMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* msg); +int WXRecvTextMsg(DWORD pid, PFNRECVTEXTMSG_CALLBACK funptr); + +typedef int(*PFNRECVMONEYMSG_CALLBACK)(int pid, wchar_t* wxid, wchar_t* tid, wchar_t* msg); +int WXRecvTransferMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr); +int WXRecvPayMsg(DWORD pid, PFNRECVMONEYMSG_CALLBACK funptr); void WXSendGroupTextMsg(); void WXSendImageMsg(); diff --git a/src/WeChatSDK/sdkclk.cpp b/src/WeChatSDK/sdkclk.cpp new file mode 100644 index 0000000..eb307a8 --- /dev/null +++ b/src/WeChatSDK/sdkclk.cpp @@ -0,0 +1,49 @@ +#include "stdafx.h" +#include "sdk.h" +#include "../WeChatSDKCore/sdkclk_h.h" + +//callback + +int WSDKClkRecvTextMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *msg) +{ + OutputDebugStringA("sdkclk: WSDKClkRecvTextMsg"); + if (funptr) + { + ((PFNRECVTEXTMSG_CALLBACK)funptr)(pid, wxid, msg); + } + return 0; +} + +int WSDKClkRecvTransferMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t* tid, + /* [string][in] */ wchar_t *msg) +{ + OutputDebugStringA("sdkclk: WSDKClkRecvTransferMsg"); + if (funptr) + { + ((PFNRECVMONEYMSG_CALLBACK)funptr)(pid, wxid, tid, msg); + } + return 0; +} + +int WSDKClkRecvPayMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t* tid, + /* [string][in] */ wchar_t *msg) +{ + OutputDebugStringA("sdkclk: WSDKClkRecvPayMsg"); + if (funptr) + { + ((PFNRECVMONEYMSG_CALLBACK)funptr)(pid, wxid, tid, msg); + } + return 0; +} \ No newline at end of file diff --git a/src/WeChatSDKCore/WeChatResource.vcxproj b/src/WeChatSDKCore/WeChatResource.vcxproj index 458f769..22b8ee3 100644 --- a/src/WeChatSDKCore/WeChatResource.vcxproj +++ b/src/WeChatSDKCore/WeChatResource.vcxproj @@ -118,11 +118,12 @@ Level3 Disabled true - true + false true WIN32;NDEBUG;WECHATRESOURCE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) true MultiThreaded + false Windows @@ -155,12 +156,18 @@ + + + + + + @@ -169,6 +176,9 @@ + + NotUsing + NotUsing @@ -176,7 +186,18 @@ + + + NotUsing + + + + NotUsing + + + NotUsing + Create @@ -184,6 +205,7 @@ Create Create + @@ -198,6 +220,12 @@ + + + + + + diff --git a/src/WeChatSDKCore/WeChatResource.vcxproj.filters b/src/WeChatSDKCore/WeChatResource.vcxproj.filters index 80e3a8f..d6c2adf 100644 --- a/src/WeChatSDKCore/WeChatResource.vcxproj.filters +++ b/src/WeChatSDKCore/WeChatResource.vcxproj.filters @@ -13,6 +13,9 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {83ef953c-a900-4334-80a8-f68db0740031} + @@ -51,6 +54,24 @@ 头文件 + + rpc + + + rpc + + + 头文件 + + + rpc + + + rpc + + + rpc + @@ -86,6 +107,27 @@ 源文件 + + 源文件 + + + rpc + + + rpc + + + rpc + + + rpc + + + 源文件 + + + 源文件 + @@ -96,5 +138,19 @@ 源文件 + + rpc + + + rpc + + + + + rpc + + + rpc + \ No newline at end of file diff --git a/src/WeChatSDKCore/WeChatSDKCore.sln b/src/WeChatSDKCore/WeChatSDKCore.sln index 42040e3..ad4bb93 100644 --- a/src/WeChatSDKCore/WeChatSDKCore.sln +++ b/src/WeChatSDKCore/WeChatSDKCore.sln @@ -3,15 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.28010.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatCore", "WeChatResource.vcxproj", "{CC8544D5-1A6E-4515-B737-4DA205371032}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatSDKCore", "WeChatResource.vcxproj", "{CC8544D5-1A6E-4515-B737-4DA205371032}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatSDK", "..\WeChatSDK\WeChatSDK.vcxproj", "{3863B180-E079-4735-ABF7-13552EE0C3F1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatSDKTest", "..\WeChatSDKTest\WeChatSDKTest.vcxproj", "{00EC6E77-8926-4860-A73F-3E5DBBE6221B}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatRc", "..\WeChatRc\WeChatRc.vcxproj", "{FF7BD19B-CD33-4EEB-98A3-0E25743D3333}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChatRs", "..\WeChatRs\WeChatRs.vcxproj", "{F980CB45-B702-44D4-976E-F32FCB35D085}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inject", "..\inject\inject.vcxproj", "{F1DD9E37-B005-40EA-9A61-C952F08A35E9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -45,22 +43,14 @@ Global {00EC6E77-8926-4860-A73F-3E5DBBE6221B}.Release|x64.Build.0 = Release|x64 {00EC6E77-8926-4860-A73F-3E5DBBE6221B}.Release|x86.ActiveCfg = Release|Win32 {00EC6E77-8926-4860-A73F-3E5DBBE6221B}.Release|x86.Build.0 = Release|Win32 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x64.ActiveCfg = Debug|x64 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x64.Build.0 = Debug|x64 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x86.ActiveCfg = Debug|Win32 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Debug|x86.Build.0 = Debug|Win32 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x64.ActiveCfg = Release|x64 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x64.Build.0 = Release|x64 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x86.ActiveCfg = Release|Win32 - {FF7BD19B-CD33-4EEB-98A3-0E25743D3333}.Release|x86.Build.0 = Release|Win32 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x64.ActiveCfg = Debug|x64 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x64.Build.0 = Debug|x64 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x86.ActiveCfg = Debug|Win32 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Debug|x86.Build.0 = Debug|Win32 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x64.ActiveCfg = Release|x64 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x64.Build.0 = Release|x64 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x86.ActiveCfg = Release|Win32 - {F980CB45-B702-44D4-976E-F32FCB35D085}.Release|x86.Build.0 = Release|Win32 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x64.ActiveCfg = Debug|x64 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x64.Build.0 = Debug|x64 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x86.ActiveCfg = Debug|Win32 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Debug|x86.Build.0 = Debug|Win32 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x64.ActiveCfg = Release|x64 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x64.Build.0 = Release|x64 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x86.ActiveCfg = Release|Win32 + {F1DD9E37-B005-40EA-9A61-C952F08A35E9}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/WeChatSDKCore/common.cpp b/src/WeChatSDKCore/common.cpp index 75c6ed2..a998b9c 100644 --- a/src/WeChatSDKCore/common.cpp +++ b/src/WeChatSDKCore/common.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "common.h" #include "util.h" +#include "mhook.h" bool IsSupportedWxVersion( const SuppWxCfg* cfg, @@ -45,4 +46,26 @@ bool IsSupportedWxVersion( } return false; +} + +int HookTemplate(HMODULE hMod, const SuppWxCfg* OffArray, int len, PVOID* orig, PVOID fake) +{ + DWORD offset = 0; + if (IsSupportedWxVersion( + OffArray, + len, + &offset)) + { + *orig = (PVOID)((DWORD)hMod + offset); + if (!Mhook_SetHook((PVOID*)orig, fake)) { + *orig = NULL; + return ERROR_INVALID_ADDRESS; + } + else { + return ERROR_SUCCESS; + } + } + else { + return ERROR_NOT_SUPPORTED; + } } \ No newline at end of file diff --git a/src/WeChatSDKCore/common.h b/src/WeChatSDKCore/common.h index e2d756d..9475679 100644 --- a/src/WeChatSDKCore/common.h +++ b/src/WeChatSDKCore/common.h @@ -28,4 +28,6 @@ bool IsSupportedWxVersion( BYTE* orig_code = NULL, DWORD* orig_code_count = NULL, BYTE* fake_code = NULL, - DWORD* fake_code_count = NULL); \ No newline at end of file + DWORD* fake_code_count = NULL); + +int HookTemplate(HMODULE hMod, const SuppWxCfg* OffArray, int len, PVOID* orig, PVOID fake); \ No newline at end of file diff --git a/src/WeChatSDKCore/recvmsg.cpp b/src/WeChatSDKCore/recvmsg.cpp new file mode 100644 index 0000000..f51c4ee --- /dev/null +++ b/src/WeChatSDKCore/recvmsg.cpp @@ -0,0 +1,301 @@ + +#include "stdafx.h" +#include "mhook.h" +#include +#include "weixin.h" +#include "sdk.h" +#include +#include + +#pragma comment(lib, "User32.lib") + +const SuppWxCfg g_Supported_wxTextMsg_Version[] = { + { TEXT("2.6.7.40"), 0x2E7980 ,{0}}, // +}; + +const SuppWxCfg g_Supported_wxMoneyMsg_Version[] = { + //{ TEXT("2.6.7.40"), 0x235C30 ,{0}}, //voiicemsg + { TEXT("2.6.7.40"), 0x180730 ,{0}}, // +}; + +typedef int(__stdcall* PFNVoiceDecode)(int a1, int a2, int voice); +typedef int(__stdcall* PFNVoiceDecodeInternal)(int voice, int size, int from, int a4); + +//typedef void(__stdcall* PFNRecvMoney)(int a1, pwxmsg msg, int msg1); +typedef void(__stdcall* PFNRecvMoney)(); +PFNRecvMoney pfnRecvMoneyMsg = NULL; +unsigned int pfnRecvTransferMsgClk = NULL; +unsigned int pfnRecvPayMsgClk = NULL; + + +// +//typedef struct _RECV_MSG +//{ +// char unk[0x40];// +// wstring wxid1;//40 +// wstring wxid2;//4c +// char unk1[0x10];//58 +// wstring msg;//68 +// char unk2[0x10];//74 +// ;//84 +//} + +typedef struct _RECV_MSG_PACK +{ + pwxmsg msg; + pwxmsg msg_end; + void* unk; +}RecvMsgPack, *PRecvMsgPack; + +typedef int(__stdcall* PFNRecvMsg)(PRecvMsgPack msg); +PFNRecvMsg pfnRecvTextMsg = NULL; +unsigned int pfnRecvTextMsgClk = NULL; + +int __stdcall fakeRecvTextMsg(PRecvMsgPack msg) +{ + __asm { + pushad; + pushfd; + } + int this_ = 0; + __asm mov this_, ecx; + + if (msg && msg->msg) { + if (pfnRecvTextMsgClk) { + CoreWSDKClkRecvTextMsg( + pfnRecvTextMsgClk, + msg->msg->wxid1.buf, + msg->msg->msg.buf + ); + } + } + + __asm { + popfd; + popad; + } + + //__asm mov ecx, this_; + //int ret = pfnRecvTextMsg(msg); + int result = 0; + + __asm { + mov eax, msg; //ERROR: lea eax, msg + push eax; + mov ecx, this_; + call pfnRecvTextMsg; + mov result, eax; + } + + return result; +} + +void fakeRecvMoneyInternal(pwxmsg msg) +{ + //OutputDebugStringW(msg->msg.buf); + if (wcsstr(msg->msg.buf, L"![CDATA[΢ת]]")) + { + wchar_t* money = SplitStr(msg->msg.buf, + L"![CDATA[΢ת]]>msg.buf, + L""); + + if (money) { + /*wchar_t recv_msg[4000] = { 0 }; + wsprintfW(recv_msg, L"%ws: %ws", msg->wxid1.buf, money); + OutputDebugStringW(recv_msg);*/ + + if (pfnRecvTransferMsgClk) { + CoreWSDKClkRecvTransferMsg( + pfnRecvTransferMsgClk, + msg->wxid1.buf, + transferid, + money + ); + } + + delete[] money; + } + if (transferid) { + delete[] transferid; + } + } + else if (wcsstr(msg->msg.buf, L"9")) + { + wchar_t* tradeno = SplitStr(msg->msg.buf, + L"", + L""); + + if (tradeno) { + wchar_t* username = SplitStr(msg->msg.buf, + L""); + + wchar_t* money = SplitStr(msg->msg.buf, + L"", + L""); + + //OutputDebugStringW(money); + + wchar_t money1[100] = { 0 }; + int mm = _wtoi(money); + if (mm < 100) { + double m = (double)mm / 100; + StringCbPrintfW(money1, 100, L"%.2f", m); + } + else { + int m = mm / 100; + StringCbPrintfW(money1, 100, L"%d", m); + } + + if (money && username) { + + /*OutputDebugStringW(msg->msg.buf); + + OutputDebugStringW(money1); + OutputDebugStringW(tradeno); + OutputDebugStringW(username);*/ + + if (pfnRecvPayMsgClk) { + CoreWSDKClkRecvPayMsg( + pfnRecvPayMsgClk, + username, + tradeno, + money1 + ); + } + + delete[] username; + delete[] money; + } + } + } +} + +// void __stdcall fakeRecvMoney(int a1, pwxmsg msg, int msg1) //0x235C30 2.6.7.40 +void __stdcall fakeRecvMoney() +{ + __asm { + pushad; + pushfd; + } + + DWORD dwEcx = 0; + __asm mov dwEcx, ecx; + + fakeRecvMoneyInternal((pwxmsg)dwEcx); + + __asm { + popfd; + popad; + } + + if (pfnRecvMoneyMsg) { + __asm mov ecx, dwEcx; + pfnRecvMoneyMsg(); + } +} + +int InitRecvTextMsg() +{ + HMODULE hMod = GetModuleHandleA("WechatWin.dll"); + if (hMod == NULL) { + return ERROR_NOT_ALL_ASSIGNED; + } + + if (pfnRecvTextMsg) { + return ERROR_SUCCESS; + } + + int ret = HookTemplate(hMod, + g_Supported_wxTextMsg_Version, + ARRAYSIZE(g_Supported_wxTextMsg_Version), + (PVOID*)&pfnRecvTextMsg, + fakeRecvTextMsg); + + return ret; +} + +void UnInitRecvTextMsg() +{ + if (pfnRecvTextMsg) { + Mhook_Unhook((PVOID*)&pfnRecvTextMsg); + } +} + +int InitRecvMoneyMsg() +{ + HMODULE hMod = GetModuleHandleA("WechatWin.dll"); + if (hMod == NULL) { + return ERROR_NOT_ALL_ASSIGNED; + } + + if (pfnRecvMoneyMsg) { + return ERROR_SUCCESS; + } + + int ret = HookTemplate(hMod, + g_Supported_wxMoneyMsg_Version, + ARRAYSIZE(g_Supported_wxMoneyMsg_Version), + (PVOID*)&pfnRecvMoneyMsg, + fakeRecvMoney); + + return ret; +} + +void UnInitRecvMoneyMsg() +{ + if (pfnRecvMoneyMsg) { + Mhook_Unhook((PVOID*)&pfnRecvMoneyMsg); + } +} + +int CoreRecvTextMsg(unsigned int funptr) +{ + if (funptr) { + int ret = InitRecvTextMsg(); + if (ret == ERROR_SUCCESS) { + pfnRecvTextMsgClk = funptr; + } + return ret; + } + else { + UnInitRecvTextMsg(); + pfnRecvTextMsgClk = NULL; + return ERROR_SUCCESS; + } +} + +int CoreRecvTransferMsg(unsigned int funptr) +{ + if (funptr) { + int ret = InitRecvMoneyMsg(); + if (ret == ERROR_SUCCESS) { + pfnRecvTransferMsgClk = funptr; + } + return ret; + } + else { + UnInitRecvMoneyMsg(); + pfnRecvTransferMsgClk = NULL; + return ERROR_SUCCESS; + } +} + +int CoreRecvPayMsg(unsigned int funptr) +{ + if (funptr) { + int ret = InitRecvMoneyMsg(); + if (ret == ERROR_SUCCESS) { + pfnRecvPayMsgClk = funptr; + } + return ret; + } + else { + UnInitRecvMoneyMsg(); + pfnRecvPayMsgClk = NULL; + return ERROR_SUCCESS; + } +} \ No newline at end of file diff --git a/src/WeChatSDKCore/revoke.cpp b/src/WeChatSDKCore/revoke.cpp index 40cc141..4fbf433 100644 Binary files a/src/WeChatSDKCore/revoke.cpp and b/src/WeChatSDKCore/revoke.cpp differ diff --git a/src/WeChatSDKCore/rpcutil.cpp b/src/WeChatSDKCore/rpcutil.cpp new file mode 100644 index 0000000..aec8968 --- /dev/null +++ b/src/WeChatSDKCore/rpcutil.cpp @@ -0,0 +1,34 @@ + +#include "rpcutil.h" +#include "../common/rpcdef.h" +#include "sdkdef_h.h" +#include "sdkclk_h.h" +//for sdkdef.idl + +int StartSDKServer(DWORD pid) +{ + WCHAR wszEndPoint[MAX_PATH] = { 0 }; + wsprintf(wszEndPoint, L"%ws_%d", g_Endpoint, pid); + return RpcStartService((RPC_WSTR)wszEndPoint, WechatSDK_v1_0_s_ifspec); +} + +void StopSDKServer() +{ + RpcStopService(); +} + +//for sdkclk.idl + +int ConnectSDKServer(RPC_WSTR* StringBinding) +{ + WCHAR wszEndPoint[MAX_PATH] = { 0 }; + wsprintf(wszEndPoint, L"%ws", g_ClkEndpoint); + RPC_STATUS status = RpcConnectServer((RPC_WSTR)wszEndPoint, &WechatRsClk_IfHandle, StringBinding); + return status; +} + +int DisconnectSDKServer(RPC_WSTR* StringBinding) +{ + RpcDisconnectServer(&WechatRsClk_IfHandle, StringBinding); + return 0; +} \ No newline at end of file diff --git a/src/WeChatSDKCore/rpcutil.h b/src/WeChatSDKCore/rpcutil.h new file mode 100644 index 0000000..44e7dba --- /dev/null +++ b/src/WeChatSDKCore/rpcutil.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include "../common/rpc.h" + +int StartSDKServer(DWORD pid); +void StopSDKServer(); +int ConnectSDKServer(RPC_WSTR* StringBinding); +int DisconnectSDKServer(RPC_WSTR* StringBinding); \ No newline at end of file diff --git a/src/WeChatSDKCore/sdk.cpp b/src/WeChatSDKCore/sdk.cpp index 4c4e77f..29ff342 100644 --- a/src/WeChatSDKCore/sdk.cpp +++ b/src/WeChatSDKCore/sdk.cpp @@ -2,21 +2,19 @@ #include "sdk.h" #include "weixin.h" -#include "../common/sdkinf.h" +//#include "../common/sdkinf.h" //https ://blog.csdn.net/xxxluozhen/article/details/5605818 -#pragma comment(lib, "..\\WeChatSDKCore\\Release\\WeChatRs.lib") +//#pragma comment(lib, "..\\WeChatSDKCore\\Release\\WeChatRs.lib") +//#include "../../common/sdkinf.h" +#include "sdkdef_h.h" +#include "rpcutil.h" //TODO: edit the file to add interface -int GetSDKInterface(PWechatSDKInterface p); -int StartSDKServer(DWORD pid, PWechatSDKInterface p); -void StopSDKServer(); void RpcLoop() { - WechatSDKInterface p = { 0 }; - GetSDKInterface(&p); - StartSDKServer(GetCurrentProcessId(), &p); + StartSDKServer(GetCurrentProcessId()); OutputDebugString(L"exit...rpc"); } @@ -31,57 +29,77 @@ void UnInitSDK() StopSDKServer(); } -int Initialize(void) +//sdkdef.idl + +int WSDKInitialize(void) { OutputDebugString(L"sdk::Initialize"); return 0; } -int AntiRevokeMsg(void) +int WSDKUninitialize() +{ + OutputDebugString(L"sdk::Uninitialize"); + //TODO: uninit + return 0; +} + +int WSDKAntiRevokeMsg(void) { OutputDebugString(L"sdk::AntiRevokeMsg"); - return FakeRevokeMsg(); + return CoreFakeRevokeMsg(); } -int UnAntiRevokeMsg(void) +int WSDKUnAntiRevokeMsg(void) { OutputDebugString(L"sdk::UnAntiRevokeMsg"); - RestoreRevokeMsg(); + CoreRestoreRevokeMsg(); return 0; } -int StartSaveVoiceMsg( +int WSDKStartSaveVoiceMsg( /* [string][in] */ wchar_t *path) { OutputDebugString(L"sdk::StartSaveVoiceMsg"); - return SaveVoiceMsg(path); + return CoreSaveVoiceMsg(path); } -int StopSaveVoiceMsg(void) +int WSDKStopSaveVoiceMsg(void) { OutputDebugString(L"sdk::StopSaveVoiceMsg"); - return UnSaveVoiceMsg(); + return CoreUnSaveVoiceMsg(); } -int SendTextMsg( +int WSDKSendTextMsg( /* [string][in] */ wchar_t *wxid, /* [string][in] */ wchar_t *msg) { OutputDebugString(L"sdk::SendTextMsg"); - return SendTxtMsg(wxid, msg); + return CoreSendTxtMsg(wxid, msg); +} + +int WSDKSendImageMsg( + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *path) +{ + OutputDebugString(L"sdk::SendImageMsg"); + return CoreSendImageMsg(wxid, path); } -//put the function pointer to WeChatRs.dll -int GetSDKInterface(PWechatSDKInterface p) +int WSDKRecvTextMsg(unsigned int funptr) { - if (p) { - p->Initialize = Initialize; - p->AntiRevokeMsg = AntiRevokeMsg; - p->UnAntiRevokeMsg = UnAntiRevokeMsg; - p->StartSaveVoiceMsg = StartSaveVoiceMsg; - p->StopSaveVoiceMsg = StopSaveVoiceMsg; - p->SendTextMsg = SendTextMsg; - } + OutputDebugString(L"sdk::RecvTextMsg"); + return CoreRecvTextMsg(funptr); +} - return 0; +int WSDKRecvTransferMsg(unsigned int funptr) +{ + OutputDebugString(L"sdk::RecvTransferMsg"); + return CoreRecvTransferMsg(funptr); +} + +int WSDKRecvPayMsg(unsigned int funptr) +{ + OutputDebugString(L"sdk::RecvPayMsg"); + return CoreRecvPayMsg(funptr); } \ No newline at end of file diff --git a/src/WeChatSDKCore/sdk.h b/src/WeChatSDKCore/sdk.h index 3f59c93..01b484e 100644 --- a/src/WeChatSDKCore/sdk.h +++ b/src/WeChatSDKCore/sdk.h @@ -1,2 +1,18 @@ #pragma once +int CoreWSDKClkRecvTextMsg( + /* [in] */ unsigned int funptr, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *msg); + +int CoreWSDKClkRecvTransferMsg( + /* [in] */ unsigned int funptr, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg); + +int CoreWSDKClkRecvPayMsg( + /* [in] */ unsigned int funptr, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg); \ No newline at end of file diff --git a/src/WeChatSDKCore/sdkclk.acf b/src/WeChatSDKCore/sdkclk.acf new file mode 100644 index 0000000..bff4320 --- /dev/null +++ b/src/WeChatSDKCore/sdkclk.acf @@ -0,0 +1,8 @@ +[ + implicit_handle (handle_t WechatRsClk_IfHandle) +] + +interface WechatSDKClk +{ + +} \ No newline at end of file diff --git a/src/WeChatSDKCore/sdkclk.cpp b/src/WeChatSDKCore/sdkclk.cpp new file mode 100644 index 0000000..5736598 --- /dev/null +++ b/src/WeChatSDKCore/sdkclk.cpp @@ -0,0 +1,80 @@ +#include "stdafx.h" +#include "sdk.h" +#include "rpcutil.h" +#include "sdkclk_h.h" + +//for sdkclk.idl + +int CoreWSDKClkRecvTextMsg( + /* [in] */ unsigned int funptr, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *msg) +{ + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(&StringBinding); + if (ret == 0) { + // ǵ÷˵ĺ + RpcTryExcept + { + ret = WSDKClkRecvTextMsg(funptr, GetCurrentProcessId(), wxid, msg); + } + RpcExcept(1) + { + printf("RPC Exception %d/n", RpcExceptionCode()); + } + RpcEndExcept + + DisconnectSDKServer(&StringBinding); + } + return ret; +} + +int CoreWSDKClkRecvTransferMsg( + /* [in] */ unsigned int funptr, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg) +{ + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(&StringBinding); + if (ret == 0) { + // ǵ÷˵ĺ + RpcTryExcept + { + ret = WSDKClkRecvTransferMsg(funptr, GetCurrentProcessId(), wxid, tid, msg); + } + RpcExcept(1) + { + printf("RPC Exception %d/n", RpcExceptionCode()); + } + RpcEndExcept + + DisconnectSDKServer(&StringBinding); + } + return ret; +} + +int CoreWSDKClkRecvPayMsg( + /* [in] */ unsigned int funptr, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg) +{ + RPC_WSTR StringBinding = NULL; + int ret = ConnectSDKServer(&StringBinding); + if (ret == 0) { + // ǵ÷˵ĺ + RpcTryExcept + { + ret = WSDKClkRecvPayMsg(funptr, GetCurrentProcessId(), wxid, tid, msg); + } + RpcExcept(1) + { + printf("RPC Exception %d/n", RpcExceptionCode()); + } + RpcEndExcept + + DisconnectSDKServer(&StringBinding); + } + return ret; +} \ No newline at end of file diff --git a/src/WeChatSDKCore/sdkclk.idl b/src/WeChatSDKCore/sdkclk.idl new file mode 100644 index 0000000..dfa820e --- /dev/null +++ b/src/WeChatSDKCore/sdkclk.idl @@ -0,0 +1,11 @@ +[ + uuid(B3A3F08E-FB79-4673-82E2-185BCF29AA99), + version(1.0) +] + +interface WechatSDKClk +{ + int WSDKClkRecvTextMsg([in]unsigned int funptr, [in]int pid, [in, string]wchar_t* wxid, [in, string]wchar_t* msg); + int WSDKClkRecvTransferMsg([in]unsigned int funptr, [in]int pid, [in, string]wchar_t* wxid, [in, string]wchar_t* tid, [in, string]wchar_t* msg); + int WSDKClkRecvPayMsg([in]unsigned int funptr, [in]int pid, [in, string]wchar_t* wxid, [in, string]wchar_t* tid, [in, string]wchar_t* msg); +} \ No newline at end of file diff --git a/src/WeChatSDKCore/sdkclk_c.c b/src/WeChatSDKCore/sdkclk_c.c new file mode 100644 index 0000000..bb9e139 --- /dev/null +++ b/src/WeChatSDKCore/sdkclk_c.c @@ -0,0 +1,389 @@ + + +/* this ALWAYS GENERATED file contains the RPC client stubs */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Tue Jan 19 11:14:07 2038 + */ +/* Compiler settings for sdkclk.idl: + Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) + + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */ + +#pragma optimize("", off ) + +#include + +#include "sdkclk_h.h" + +#define TYPE_FORMAT_STRING_SIZE 7 +#define PROC_FORMAT_STRING_SIZE 175 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 0 + +typedef struct _sdkclk_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } sdkclk_MIDL_TYPE_FORMAT_STRING; + +typedef struct _sdkclk_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } sdkclk_MIDL_PROC_FORMAT_STRING; + +typedef struct _sdkclk_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } sdkclk_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + + +extern const sdkclk_MIDL_TYPE_FORMAT_STRING sdkclk__MIDL_TypeFormatString; +extern const sdkclk_MIDL_PROC_FORMAT_STRING sdkclk__MIDL_ProcFormatString; +extern const sdkclk_MIDL_EXPR_FORMAT_STRING sdkclk__MIDL_ExprFormatString; + +#define GENERIC_BINDING_TABLE_SIZE 0 + + +/* Standard interface: WechatSDKClk, ver. 1.0, + GUID={0xB3A3F08E,0xFB79,0x4673,{0x82,0xE2,0x18,0x5B,0xCF,0x29,0xAA,0x99}} */ + +handle_t WechatRsClk_IfHandle; + + +static const RPC_CLIENT_INTERFACE WechatSDKClk___RpcClientInterface = + { + sizeof(RPC_CLIENT_INTERFACE), + {{0xB3A3F08E,0xFB79,0x4673,{0x82,0xE2,0x18,0x5B,0xCF,0x29,0xAA,0x99}},{1,0}}, + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + 0, + 0, + 0, + 0, + 0, + 0x00000000 + }; +RPC_IF_HANDLE WechatSDKClk_v1_0_c_ifspec = (RPC_IF_HANDLE)& WechatSDKClk___RpcClientInterface; + +extern const MIDL_STUB_DESC WechatSDKClk_StubDesc; + +static RPC_BINDING_HANDLE WechatSDKClk__MIDL_AutoBindHandle; + + +int WSDKClkRecvTextMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *msg) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDKClk_StubDesc, + (PFORMAT_STRING) &sdkclk__MIDL_ProcFormatString.Format[0], + ( unsigned char * )&funptr); + return ( int )_RetVal.Simple; + +} + + +int WSDKClkRecvTransferMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDKClk_StubDesc, + (PFORMAT_STRING) &sdkclk__MIDL_ProcFormatString.Format[54], + ( unsigned char * )&funptr); + return ( int )_RetVal.Simple; + +} + + +int WSDKClkRecvPayMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDKClk_StubDesc, + (PFORMAT_STRING) &sdkclk__MIDL_ProcFormatString.Format[114], + ( unsigned char * )&funptr); + return ( int )_RetVal.Simple; + +} + + +#if !defined(__RPC_WIN32__) +#error Invalid build platform for this stub. +#endif +#if !(TARGET_IS_NT60_OR_LATER) +#error You need Windows Vista or later to run this stub because it uses these features: +#error compiled for Windows Vista. +#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems. +#error This app will fail with the RPC_X_WRONG_STUB_VERSION error. +#endif + + +static const sdkclk_MIDL_PROC_FORMAT_STRING sdkclk__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure WSDKClkRecvTextMsg */ + + 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x0 ), /* 0 */ +/* 8 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 10 */ NdrFcShort( 0x10 ), /* 16 */ +/* 12 */ NdrFcShort( 0x8 ), /* 8 */ +/* 14 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 16 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 18 */ NdrFcShort( 0x0 ), /* 0 */ +/* 20 */ NdrFcShort( 0x0 ), /* 0 */ +/* 22 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 24 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 26 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 28 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter pid */ + +/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 32 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 34 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter wxid */ + +/* 36 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 38 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 40 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter msg */ + +/* 42 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 46 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 48 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 50 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 52 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKClkRecvTransferMsg */ + +/* 54 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 56 */ NdrFcLong( 0x0 ), /* 0 */ +/* 60 */ NdrFcShort( 0x1 ), /* 1 */ +/* 62 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 64 */ NdrFcShort( 0x10 ), /* 16 */ +/* 66 */ NdrFcShort( 0x8 ), /* 8 */ +/* 68 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x6, /* 6 */ +/* 70 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 72 */ NdrFcShort( 0x0 ), /* 0 */ +/* 74 */ NdrFcShort( 0x0 ), /* 0 */ +/* 76 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 78 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 80 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 82 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter pid */ + +/* 84 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 86 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 88 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter wxid */ + +/* 90 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 92 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 94 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter tid */ + +/* 96 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 98 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 100 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter msg */ + +/* 102 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 104 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 106 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 110 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKClkRecvPayMsg */ + +/* 114 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 116 */ NdrFcLong( 0x0 ), /* 0 */ +/* 120 */ NdrFcShort( 0x2 ), /* 2 */ +/* 122 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 124 */ NdrFcShort( 0x10 ), /* 16 */ +/* 126 */ NdrFcShort( 0x8 ), /* 8 */ +/* 128 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x6, /* 6 */ +/* 130 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 132 */ NdrFcShort( 0x0 ), /* 0 */ +/* 134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 136 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 138 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 140 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 142 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter pid */ + +/* 144 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 146 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 148 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter wxid */ + +/* 150 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 152 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 154 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter tid */ + +/* 156 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 158 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 160 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter msg */ + +/* 162 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 164 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 166 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 168 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 170 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 172 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const sdkclk_MIDL_TYPE_FORMAT_STRING sdkclk__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x8, /* FC_RP [simple_pointer] */ +/* 4 */ + 0x25, /* FC_C_WSTRING */ + 0x5c, /* FC_PAD */ + + 0x0 + } + }; + +static const unsigned short WechatSDKClk_FormatStringOffsetTable[] = + { + 0, + 54, + 114 + }; + + +static const MIDL_STUB_DESC WechatSDKClk_StubDesc = + { + (void *)& WechatSDKClk___RpcClientInterface, + MIDL_user_allocate, + MIDL_user_free, + &WechatRsClk_IfHandle, + 0, + 0, + 0, + 0, + sdkclk__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x60001, /* Ndr library version */ + 0, + 0x801026e, /* MIDL Version 8.1.622 */ + 0, + 0, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; +#pragma optimize("", on ) +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) */ + diff --git a/src/WeChatSDKCore/sdkclk_h.h b/src/WeChatSDKCore/sdkclk_h.h new file mode 100644 index 0000000..c82cf93 --- /dev/null +++ b/src/WeChatSDKCore/sdkclk_h.h @@ -0,0 +1,92 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Tue Jan 19 11:14:07 2038 + */ +/* Compiler settings for sdkclk.idl: + Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif /* __RPCNDR_H_VERSION__ */ + + +#ifndef __sdkclk_h_h__ +#define __sdkclk_h_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifdef __cplusplus +extern "C"{ +#endif + + +#ifndef __WechatSDKClk_INTERFACE_DEFINED__ +#define __WechatSDKClk_INTERFACE_DEFINED__ + +/* interface WechatSDKClk */ +/* [implicit_handle][version][uuid] */ + +int WSDKClkRecvTextMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *msg); + +int WSDKClkRecvTransferMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg); + +int WSDKClkRecvPayMsg( + /* [in] */ unsigned int funptr, + /* [in] */ int pid, + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *tid, + /* [string][in] */ wchar_t *msg); + + +extern handle_t WechatRsClk_IfHandle; + + +extern RPC_IF_HANDLE WechatSDKClk_v1_0_c_ifspec; +extern RPC_IF_HANDLE WechatSDKClk_v1_0_s_ifspec; +#endif /* __WechatSDKClk_INTERFACE_DEFINED__ */ + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/src/WeChatSDKCore/sdkclk_s.c b/src/WeChatSDKCore/sdkclk_s.c new file mode 100644 index 0000000..9a47424 --- /dev/null +++ b/src/WeChatSDKCore/sdkclk_s.c @@ -0,0 +1,359 @@ + + +/* this ALWAYS GENERATED file contains the RPC server stubs */ + + + /* File created by MIDL compiler version 8.01.0622 */ +/* at Tue Jan 19 11:14:07 2038 + */ +/* Compiler settings for sdkclk.idl: + Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0622 + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +/* @@MIDL_FILE_HEADING( ) */ + +#if !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) + + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif + +#pragma warning( disable: 4211 ) /* redefine extern to static */ +#pragma warning( disable: 4232 ) /* dllimport identity*/ +#pragma warning( disable: 4024 ) /* array to pointer mapping*/ +#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */ + +#pragma optimize("", off ) + +#include +#include "sdkclk_h.h" + +#define TYPE_FORMAT_STRING_SIZE 7 +#define PROC_FORMAT_STRING_SIZE 175 +#define EXPR_FORMAT_STRING_SIZE 1 +#define TRANSMIT_AS_TABLE_SIZE 0 +#define WIRE_MARSHAL_TABLE_SIZE 0 + +typedef struct _sdkclk_MIDL_TYPE_FORMAT_STRING + { + short Pad; + unsigned char Format[ TYPE_FORMAT_STRING_SIZE ]; + } sdkclk_MIDL_TYPE_FORMAT_STRING; + +typedef struct _sdkclk_MIDL_PROC_FORMAT_STRING + { + short Pad; + unsigned char Format[ PROC_FORMAT_STRING_SIZE ]; + } sdkclk_MIDL_PROC_FORMAT_STRING; + +typedef struct _sdkclk_MIDL_EXPR_FORMAT_STRING + { + long Pad; + unsigned char Format[ EXPR_FORMAT_STRING_SIZE ]; + } sdkclk_MIDL_EXPR_FORMAT_STRING; + + +static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax = +{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}; + +extern const sdkclk_MIDL_TYPE_FORMAT_STRING sdkclk__MIDL_TypeFormatString; +extern const sdkclk_MIDL_PROC_FORMAT_STRING sdkclk__MIDL_ProcFormatString; +extern const sdkclk_MIDL_EXPR_FORMAT_STRING sdkclk__MIDL_ExprFormatString; + +/* Standard interface: WechatSDKClk, ver. 1.0, + GUID={0xB3A3F08E,0xFB79,0x4673,{0x82,0xE2,0x18,0x5B,0xCF,0x29,0xAA,0x99}} */ + + +extern const MIDL_SERVER_INFO WechatSDKClk_ServerInfo; + +extern const RPC_DISPATCH_TABLE WechatSDKClk_v1_0_DispatchTable; + +static const RPC_SERVER_INTERFACE WechatSDKClk___RpcServerInterface = + { + sizeof(RPC_SERVER_INTERFACE), + {{0xB3A3F08E,0xFB79,0x4673,{0x82,0xE2,0x18,0x5B,0xCF,0x29,0xAA,0x99}},{1,0}}, + {{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}}, + (RPC_DISPATCH_TABLE*)&WechatSDKClk_v1_0_DispatchTable, + 0, + 0, + 0, + &WechatSDKClk_ServerInfo, + 0x04000000 + }; +RPC_IF_HANDLE WechatSDKClk_v1_0_s_ifspec = (RPC_IF_HANDLE)& WechatSDKClk___RpcServerInterface; + +extern const MIDL_STUB_DESC WechatSDKClk_StubDesc; + + +#if !defined(__RPC_WIN32__) +#error Invalid build platform for this stub. +#endif +#if !(TARGET_IS_NT60_OR_LATER) +#error You need Windows Vista or later to run this stub because it uses these features: +#error compiled for Windows Vista. +#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems. +#error This app will fail with the RPC_X_WRONG_STUB_VERSION error. +#endif + + +static const sdkclk_MIDL_PROC_FORMAT_STRING sdkclk__MIDL_ProcFormatString = + { + 0, + { + + /* Procedure WSDKClkRecvTextMsg */ + + 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 2 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6 */ NdrFcShort( 0x0 ), /* 0 */ +/* 8 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 10 */ NdrFcShort( 0x10 ), /* 16 */ +/* 12 */ NdrFcShort( 0x8 ), /* 8 */ +/* 14 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x5, /* 5 */ +/* 16 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 18 */ NdrFcShort( 0x0 ), /* 0 */ +/* 20 */ NdrFcShort( 0x0 ), /* 0 */ +/* 22 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 24 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 26 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 28 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter pid */ + +/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 32 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 34 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter wxid */ + +/* 36 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 38 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 40 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter msg */ + +/* 42 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 46 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 48 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 50 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 52 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKClkRecvTransferMsg */ + +/* 54 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 56 */ NdrFcLong( 0x0 ), /* 0 */ +/* 60 */ NdrFcShort( 0x1 ), /* 1 */ +/* 62 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 64 */ NdrFcShort( 0x10 ), /* 16 */ +/* 66 */ NdrFcShort( 0x8 ), /* 8 */ +/* 68 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x6, /* 6 */ +/* 70 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 72 */ NdrFcShort( 0x0 ), /* 0 */ +/* 74 */ NdrFcShort( 0x0 ), /* 0 */ +/* 76 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 78 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 80 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 82 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter pid */ + +/* 84 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 86 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 88 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter wxid */ + +/* 90 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 92 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 94 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter tid */ + +/* 96 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 98 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 100 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter msg */ + +/* 102 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 104 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 106 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 110 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 112 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKClkRecvPayMsg */ + +/* 114 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 116 */ NdrFcLong( 0x0 ), /* 0 */ +/* 120 */ NdrFcShort( 0x2 ), /* 2 */ +/* 122 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 124 */ NdrFcShort( 0x10 ), /* 16 */ +/* 126 */ NdrFcShort( 0x8 ), /* 8 */ +/* 128 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x6, /* 6 */ +/* 130 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 132 */ NdrFcShort( 0x0 ), /* 0 */ +/* 134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 136 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 138 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 140 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 142 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter pid */ + +/* 144 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 146 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 148 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter wxid */ + +/* 150 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 152 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 154 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter tid */ + +/* 156 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 158 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 160 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter msg */ + +/* 162 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 164 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 166 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 168 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 170 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 172 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + 0x0 + } + }; + +static const sdkclk_MIDL_TYPE_FORMAT_STRING sdkclk__MIDL_TypeFormatString = + { + 0, + { + NdrFcShort( 0x0 ), /* 0 */ +/* 2 */ + 0x11, 0x8, /* FC_RP [simple_pointer] */ +/* 4 */ + 0x25, /* FC_C_WSTRING */ + 0x5c, /* FC_PAD */ + + 0x0 + } + }; + +static const unsigned short WechatSDKClk_FormatStringOffsetTable[] = + { + 0, + 54, + 114 + }; + + +static const MIDL_STUB_DESC WechatSDKClk_StubDesc = + { + (void *)& WechatSDKClk___RpcServerInterface, + MIDL_user_allocate, + MIDL_user_free, + 0, + 0, + 0, + 0, + 0, + sdkclk__MIDL_TypeFormatString.Format, + 1, /* -error bounds_check flag */ + 0x60001, /* Ndr library version */ + 0, + 0x801026e, /* MIDL Version 8.1.622 */ + 0, + 0, + 0, /* notify & notify_flag routine table */ + 0x1, /* MIDL flag */ + 0, /* cs routines */ + 0, /* proxy/server info */ + 0 + }; + +static const RPC_DISPATCH_FUNCTION WechatSDKClk_table[] = + { + NdrServerCall2, + NdrServerCall2, + NdrServerCall2, + 0 + }; +static const RPC_DISPATCH_TABLE WechatSDKClk_v1_0_DispatchTable = + { + 3, + (RPC_DISPATCH_FUNCTION*)WechatSDKClk_table + }; + +static const SERVER_ROUTINE WechatSDKClk_ServerRoutineTable[] = + { + (SERVER_ROUTINE)WSDKClkRecvTextMsg, + (SERVER_ROUTINE)WSDKClkRecvTransferMsg, + (SERVER_ROUTINE)WSDKClkRecvPayMsg + }; + +static const MIDL_SERVER_INFO WechatSDKClk_ServerInfo = + { + &WechatSDKClk_StubDesc, + WechatSDKClk_ServerRoutineTable, + sdkclk__MIDL_ProcFormatString.Format, + WechatSDKClk_FormatStringOffsetTable, + 0, + 0, + 0, + 0}; +#pragma optimize("", on ) +#if _MSC_VER >= 1200 +#pragma warning(pop) +#endif + + +#endif /* !defined(_M_IA64) && !defined(_M_AMD64) && !defined(_ARM_) */ + diff --git a/src/WeChatRs/sdkdef.acf b/src/WeChatSDKCore/sdkdef.acf similarity index 100% rename from src/WeChatRs/sdkdef.acf rename to src/WeChatSDKCore/sdkdef.acf diff --git a/src/WeChatSDKCore/sdkdef.idl b/src/WeChatSDKCore/sdkdef.idl new file mode 100644 index 0000000..28479b8 --- /dev/null +++ b/src/WeChatSDKCore/sdkdef.idl @@ -0,0 +1,19 @@ +[ + uuid(EC3A7CE8-8F99-47ef-9705-DA5DF14F9A4C), + version(1.0) +] + +interface WechatSDK +{ + int WSDKInitialize(); + int WSDKUninitialize(); + int WSDKAntiRevokeMsg(); + int WSDKUnAntiRevokeMsg(); + int WSDKStartSaveVoiceMsg([in, string]wchar_t* path); + int WSDKStopSaveVoiceMsg(); + int WSDKSendTextMsg([in, string]wchar_t* wxid, [in, string]wchar_t* msg); + int WSDKSendImageMsg([in, string]wchar_t* wxid, [in, string]wchar_t* path); + int WSDKRecvTextMsg([in]unsigned int funptr); + int WSDKRecvTransferMsg([in]unsigned int funptr); + int WSDKRecvPayMsg([in]unsigned int funptr); +} \ No newline at end of file diff --git a/src/WeChatRs/sdkdef_c.c b/src/WeChatSDKCore/sdkdef_c.c similarity index 53% rename from src/WeChatRs/sdkdef_c.c rename to src/WeChatSDKCore/sdkdef_c.c index d45ef9d..aca94bf 100644 --- a/src/WeChatRs/sdkdef_c.c +++ b/src/WeChatSDKCore/sdkdef_c.c @@ -35,7 +35,7 @@ #include "sdkdef_h.h" #define TYPE_FORMAT_STRING_SIZE 7 -#define PROC_FORMAT_STRING_SIZE 199 +#define PROC_FORMAT_STRING_SIZE 379 #define EXPR_FORMAT_STRING_SIZE 1 #define TRANSMIT_AS_TABLE_SIZE 0 #define WIRE_MARSHAL_TABLE_SIZE 0 @@ -95,7 +95,7 @@ extern const MIDL_STUB_DESC WechatSDK_StubDesc; static RPC_BINDING_HANDLE WechatSDK__MIDL_AutoBindHandle; -int Initialize( void) +int WSDKInitialize( void) { CLIENT_CALL_RETURN _RetVal; @@ -109,7 +109,7 @@ int Initialize( void) } -int AntiRevokeMsg( void) +int WSDKUninitialize( void) { CLIENT_CALL_RETURN _RetVal; @@ -123,7 +123,7 @@ int AntiRevokeMsg( void) } -int UnAntiRevokeMsg( void) +int WSDKAntiRevokeMsg( void) { CLIENT_CALL_RETURN _RetVal; @@ -137,8 +137,7 @@ int UnAntiRevokeMsg( void) } -int StartSaveVoiceMsg( - /* [string][in] */ wchar_t *path) +int WSDKUnAntiRevokeMsg( void) { CLIENT_CALL_RETURN _RetVal; @@ -146,27 +145,42 @@ int StartSaveVoiceMsg( _RetVal = NdrClientCall2( ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[90], + ( unsigned char * )0); + return ( int )_RetVal.Simple; + +} + + +int WSDKStartSaveVoiceMsg( + /* [string][in] */ wchar_t *path) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, + (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[120], ( unsigned char * )&path); return ( int )_RetVal.Simple; } -int StopSaveVoiceMsg( void) +int WSDKStopSaveVoiceMsg( void) { CLIENT_CALL_RETURN _RetVal; _RetVal = NdrClientCall2( ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, - (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[126], + (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[156], ( unsigned char * )0); return ( int )_RetVal.Simple; } -int SendTextMsg( +int WSDKSendTextMsg( /* [string][in] */ wchar_t *wxid, /* [string][in] */ wchar_t *msg) { @@ -175,13 +189,74 @@ int SendTextMsg( _RetVal = NdrClientCall2( ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, - (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[156], + (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[186], ( unsigned char * )&wxid); return ( int )_RetVal.Simple; } +int WSDKSendImageMsg( + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *path) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, + (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[228], + ( unsigned char * )&wxid); + return ( int )_RetVal.Simple; + +} + + +int WSDKRecvTextMsg( + /* [in] */ unsigned int funptr) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, + (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[270], + ( unsigned char * )&funptr); + return ( int )_RetVal.Simple; + +} + + +int WSDKRecvTransferMsg( + /* [in] */ unsigned int funptr) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, + (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[306], + ( unsigned char * )&funptr); + return ( int )_RetVal.Simple; + +} + + +int WSDKRecvPayMsg( + /* [in] */ unsigned int funptr) +{ + + CLIENT_CALL_RETURN _RetVal; + + _RetVal = NdrClientCall2( + ( PMIDL_STUB_DESC )&WechatSDK_StubDesc, + (PFORMAT_STRING) &sdkdef__MIDL_ProcFormatString.Format[342], + ( unsigned char * )&funptr); + return ( int )_RetVal.Simple; + +} + + #if !defined(__RPC_WIN32__) #error Invalid build platform for this stub. #endif @@ -198,7 +273,7 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = 0, { - /* Procedure Initialize */ + /* Procedure WSDKInitialize */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ @@ -222,7 +297,7 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = /* 28 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure AntiRevokeMsg */ + /* Procedure WSDKUninitialize */ /* 30 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ @@ -246,7 +321,7 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = /* 58 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure UnAntiRevokeMsg */ + /* Procedure WSDKAntiRevokeMsg */ /* 60 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ @@ -270,94 +345,247 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = /* 88 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure StartSaveVoiceMsg */ + /* Procedure WSDKUnAntiRevokeMsg */ /* 90 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ /* 92 */ NdrFcLong( 0x0 ), /* 0 */ /* 96 */ NdrFcShort( 0x3 ), /* 3 */ -/* 98 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 100 */ NdrFcShort( 0x0 ), /* 0 */ /* 102 */ NdrFcShort( 0x8 ), /* 8 */ -/* 104 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ - 0x2, /* 2 */ +/* 104 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ /* 106 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 108 */ NdrFcShort( 0x0 ), /* 0 */ /* 110 */ NdrFcShort( 0x0 ), /* 0 */ /* 112 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter path */ - -/* 114 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 116 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ -/* 118 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ - /* Return value */ -/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 122 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 124 */ 0x8, /* FC_LONG */ +/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 116 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 118 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure StopSaveVoiceMsg */ + /* Procedure WSDKStartSaveVoiceMsg */ -/* 126 */ 0x32, /* FC_BIND_PRIMITIVE */ +/* 120 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ -/* 128 */ NdrFcLong( 0x0 ), /* 0 */ -/* 132 */ NdrFcShort( 0x4 ), /* 4 */ -/* 134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 136 */ NdrFcShort( 0x0 ), /* 0 */ -/* 138 */ NdrFcShort( 0x8 ), /* 8 */ -/* 140 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x1, /* 1 */ -/* 142 */ 0x8, /* 8 */ +/* 122 */ NdrFcLong( 0x0 ), /* 0 */ +/* 126 */ NdrFcShort( 0x4 ), /* 4 */ +/* 128 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 130 */ NdrFcShort( 0x0 ), /* 0 */ +/* 132 */ NdrFcShort( 0x8 ), /* 8 */ +/* 134 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 136 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 144 */ NdrFcShort( 0x0 ), /* 0 */ -/* 146 */ NdrFcShort( 0x0 ), /* 0 */ -/* 148 */ NdrFcShort( 0x0 ), /* 0 */ +/* 138 */ NdrFcShort( 0x0 ), /* 0 */ +/* 140 */ NdrFcShort( 0x0 ), /* 0 */ +/* 142 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter path */ + +/* 144 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 146 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 148 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ /* Return value */ /* 150 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 152 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 152 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 154 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure SendTextMsg */ + /* Procedure WSDKStopSaveVoiceMsg */ /* 156 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ /* 158 */ NdrFcLong( 0x0 ), /* 0 */ /* 162 */ NdrFcShort( 0x5 ), /* 5 */ -/* 164 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 164 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 166 */ NdrFcShort( 0x0 ), /* 0 */ /* 168 */ NdrFcShort( 0x8 ), /* 8 */ -/* 170 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ - 0x3, /* 3 */ +/* 170 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ /* 172 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 174 */ NdrFcShort( 0x0 ), /* 0 */ /* 176 */ NdrFcShort( 0x0 ), /* 0 */ /* 178 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter wxid */ + /* Return value */ -/* 180 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 180 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 182 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ -/* 184 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ +/* 184 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKSendTextMsg */ + +/* 186 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 188 */ NdrFcLong( 0x0 ), /* 0 */ +/* 192 */ NdrFcShort( 0x6 ), /* 6 */ +/* 194 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 196 */ NdrFcShort( 0x0 ), /* 0 */ +/* 198 */ NdrFcShort( 0x8 ), /* 8 */ +/* 200 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 202 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 208 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter wxid */ + +/* 210 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 212 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 214 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ /* Parameter msg */ -/* 186 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 188 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 190 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ +/* 216 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 218 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 220 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 222 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 224 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 226 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKSendImageMsg */ + +/* 228 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 230 */ NdrFcLong( 0x0 ), /* 0 */ +/* 234 */ NdrFcShort( 0x7 ), /* 7 */ +/* 236 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 238 */ NdrFcShort( 0x0 ), /* 0 */ +/* 240 */ NdrFcShort( 0x8 ), /* 8 */ +/* 242 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 244 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 246 */ NdrFcShort( 0x0 ), /* 0 */ +/* 248 */ NdrFcShort( 0x0 ), /* 0 */ +/* 250 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter wxid */ + +/* 252 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 254 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 256 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter path */ + +/* 258 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 262 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 264 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 266 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 268 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKRecvTextMsg */ + +/* 270 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 272 */ NdrFcLong( 0x0 ), /* 0 */ +/* 276 */ NdrFcShort( 0x8 ), /* 8 */ +/* 278 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 280 */ NdrFcShort( 0x8 ), /* 8 */ +/* 282 */ NdrFcShort( 0x8 ), /* 8 */ +/* 284 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 286 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 288 */ NdrFcShort( 0x0 ), /* 0 */ +/* 290 */ NdrFcShort( 0x0 ), /* 0 */ +/* 292 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 294 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 296 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 298 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 300 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 302 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 304 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKRecvTransferMsg */ + +/* 306 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 308 */ NdrFcLong( 0x0 ), /* 0 */ +/* 312 */ NdrFcShort( 0x9 ), /* 9 */ +/* 314 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 316 */ NdrFcShort( 0x8 ), /* 8 */ +/* 318 */ NdrFcShort( 0x8 ), /* 8 */ +/* 320 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 322 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 324 */ NdrFcShort( 0x0 ), /* 0 */ +/* 326 */ NdrFcShort( 0x0 ), /* 0 */ +/* 328 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 330 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 332 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 334 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 336 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 338 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 340 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKRecvPayMsg */ + +/* 342 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 344 */ NdrFcLong( 0x0 ), /* 0 */ +/* 348 */ NdrFcShort( 0xa ), /* 10 */ +/* 350 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 352 */ NdrFcShort( 0x8 ), /* 8 */ +/* 354 */ NdrFcShort( 0x8 ), /* 8 */ +/* 356 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 358 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 360 */ NdrFcShort( 0x0 ), /* 0 */ +/* 362 */ NdrFcShort( 0x0 ), /* 0 */ +/* 364 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 366 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 368 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 370 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ -/* 192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 194 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 196 */ 0x8, /* FC_LONG */ +/* 372 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 374 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 376 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ 0x0 @@ -385,8 +613,13 @@ static const unsigned short WechatSDK_FormatStringOffsetTable[] = 30, 60, 90, - 126, - 156 + 120, + 156, + 186, + 228, + 270, + 306, + 342 }; diff --git a/src/WeChatRs/sdkdef_h.h b/src/WeChatSDKCore/sdkdef_h.h similarity index 77% rename from src/WeChatRs/sdkdef_h.h rename to src/WeChatSDKCore/sdkdef_h.h index 2ad73a6..a7c9501 100644 --- a/src/WeChatRs/sdkdef_h.h +++ b/src/WeChatSDKCore/sdkdef_h.h @@ -51,21 +51,36 @@ extern "C"{ /* interface WechatSDK */ /* [implicit_handle][version][uuid] */ -int Initialize( void); +int WSDKInitialize( void); -int AntiRevokeMsg( void); +int WSDKUninitialize( void); -int UnAntiRevokeMsg( void); +int WSDKAntiRevokeMsg( void); -int StartSaveVoiceMsg( +int WSDKUnAntiRevokeMsg( void); + +int WSDKStartSaveVoiceMsg( /* [string][in] */ wchar_t *path); -int StopSaveVoiceMsg( void); +int WSDKStopSaveVoiceMsg( void); -int SendTextMsg( +int WSDKSendTextMsg( /* [string][in] */ wchar_t *wxid, /* [string][in] */ wchar_t *msg); +int WSDKSendImageMsg( + /* [string][in] */ wchar_t *wxid, + /* [string][in] */ wchar_t *path); + +int WSDKRecvTextMsg( + /* [in] */ unsigned int funptr); + +int WSDKRecvTransferMsg( + /* [in] */ unsigned int funptr); + +int WSDKRecvPayMsg( + /* [in] */ unsigned int funptr); + extern handle_t WechatRs_IfHandle; diff --git a/src/WeChatRs/sdkdef_s.c b/src/WeChatSDKCore/sdkdef_s.c similarity index 54% rename from src/WeChatRs/sdkdef_s.c rename to src/WeChatSDKCore/sdkdef_s.c index b9dca3e..78552c8 100644 --- a/src/WeChatRs/sdkdef_s.c +++ b/src/WeChatSDKCore/sdkdef_s.c @@ -34,7 +34,7 @@ #include "sdkdef_h.h" #define TYPE_FORMAT_STRING_SIZE 7 -#define PROC_FORMAT_STRING_SIZE 199 +#define PROC_FORMAT_STRING_SIZE 379 #define EXPR_FORMAT_STRING_SIZE 1 #define TRANSMIT_AS_TABLE_SIZE 0 #define WIRE_MARSHAL_TABLE_SIZE 0 @@ -106,7 +106,7 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = 0, { - /* Procedure Initialize */ + /* Procedure WSDKInitialize */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ @@ -130,7 +130,7 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = /* 28 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure AntiRevokeMsg */ + /* Procedure WSDKUninitialize */ /* 30 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ @@ -154,7 +154,7 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = /* 58 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure UnAntiRevokeMsg */ + /* Procedure WSDKAntiRevokeMsg */ /* 60 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ @@ -178,94 +178,247 @@ static const sdkdef_MIDL_PROC_FORMAT_STRING sdkdef__MIDL_ProcFormatString = /* 88 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure StartSaveVoiceMsg */ + /* Procedure WSDKUnAntiRevokeMsg */ /* 90 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ /* 92 */ NdrFcLong( 0x0 ), /* 0 */ /* 96 */ NdrFcShort( 0x3 ), /* 3 */ -/* 98 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 100 */ NdrFcShort( 0x0 ), /* 0 */ /* 102 */ NdrFcShort( 0x8 ), /* 8 */ -/* 104 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ - 0x2, /* 2 */ +/* 104 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ /* 106 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 108 */ NdrFcShort( 0x0 ), /* 0 */ /* 110 */ NdrFcShort( 0x0 ), /* 0 */ /* 112 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter path */ - -/* 114 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 116 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ -/* 118 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ - /* Return value */ -/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 122 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 124 */ 0x8, /* FC_LONG */ +/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 116 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 118 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure StopSaveVoiceMsg */ + /* Procedure WSDKStartSaveVoiceMsg */ -/* 126 */ 0x32, /* FC_BIND_PRIMITIVE */ +/* 120 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ -/* 128 */ NdrFcLong( 0x0 ), /* 0 */ -/* 132 */ NdrFcShort( 0x4 ), /* 4 */ -/* 134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 136 */ NdrFcShort( 0x0 ), /* 0 */ -/* 138 */ NdrFcShort( 0x8 ), /* 8 */ -/* 140 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x1, /* 1 */ -/* 142 */ 0x8, /* 8 */ +/* 122 */ NdrFcLong( 0x0 ), /* 0 */ +/* 126 */ NdrFcShort( 0x4 ), /* 4 */ +/* 128 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 130 */ NdrFcShort( 0x0 ), /* 0 */ +/* 132 */ NdrFcShort( 0x8 ), /* 8 */ +/* 134 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x2, /* 2 */ +/* 136 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 144 */ NdrFcShort( 0x0 ), /* 0 */ -/* 146 */ NdrFcShort( 0x0 ), /* 0 */ -/* 148 */ NdrFcShort( 0x0 ), /* 0 */ +/* 138 */ NdrFcShort( 0x0 ), /* 0 */ +/* 140 */ NdrFcShort( 0x0 ), /* 0 */ +/* 142 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter path */ + +/* 144 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 146 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 148 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ /* Return value */ /* 150 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 152 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 152 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 154 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure SendTextMsg */ + /* Procedure WSDKStopSaveVoiceMsg */ /* 156 */ 0x32, /* FC_BIND_PRIMITIVE */ 0x48, /* Old Flags: */ /* 158 */ NdrFcLong( 0x0 ), /* 0 */ /* 162 */ NdrFcShort( 0x5 ), /* 5 */ -/* 164 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 164 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 166 */ NdrFcShort( 0x0 ), /* 0 */ /* 168 */ NdrFcShort( 0x8 ), /* 8 */ -/* 170 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ - 0x3, /* 3 */ +/* 170 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x1, /* 1 */ /* 172 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 174 */ NdrFcShort( 0x0 ), /* 0 */ /* 176 */ NdrFcShort( 0x0 ), /* 0 */ /* 178 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter wxid */ + /* Return value */ -/* 180 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 180 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 182 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ -/* 184 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ +/* 184 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKSendTextMsg */ + +/* 186 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 188 */ NdrFcLong( 0x0 ), /* 0 */ +/* 192 */ NdrFcShort( 0x6 ), /* 6 */ +/* 194 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 196 */ NdrFcShort( 0x0 ), /* 0 */ +/* 198 */ NdrFcShort( 0x8 ), /* 8 */ +/* 200 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 202 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 208 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter wxid */ + +/* 210 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 212 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 214 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ /* Parameter msg */ -/* 186 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 188 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 190 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ +/* 216 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 218 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 220 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Return value */ + +/* 222 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 224 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 226 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKSendImageMsg */ + +/* 228 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 230 */ NdrFcLong( 0x0 ), /* 0 */ +/* 234 */ NdrFcShort( 0x7 ), /* 7 */ +/* 236 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 238 */ NdrFcShort( 0x0 ), /* 0 */ +/* 240 */ NdrFcShort( 0x8 ), /* 8 */ +/* 242 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 244 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 246 */ NdrFcShort( 0x0 ), /* 0 */ +/* 248 */ NdrFcShort( 0x0 ), /* 0 */ +/* 250 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter wxid */ + +/* 252 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 254 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 256 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ + + /* Parameter path */ + +/* 258 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 262 */ NdrFcShort( 0x4 ), /* Type Offset=4 */ /* Return value */ -/* 192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 194 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 196 */ 0x8, /* FC_LONG */ +/* 264 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 266 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 268 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKRecvTextMsg */ + +/* 270 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 272 */ NdrFcLong( 0x0 ), /* 0 */ +/* 276 */ NdrFcShort( 0x8 ), /* 8 */ +/* 278 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 280 */ NdrFcShort( 0x8 ), /* 8 */ +/* 282 */ NdrFcShort( 0x8 ), /* 8 */ +/* 284 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 286 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 288 */ NdrFcShort( 0x0 ), /* 0 */ +/* 290 */ NdrFcShort( 0x0 ), /* 0 */ +/* 292 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 294 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 296 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 298 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 300 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 302 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 304 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKRecvTransferMsg */ + +/* 306 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 308 */ NdrFcLong( 0x0 ), /* 0 */ +/* 312 */ NdrFcShort( 0x9 ), /* 9 */ +/* 314 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 316 */ NdrFcShort( 0x8 ), /* 8 */ +/* 318 */ NdrFcShort( 0x8 ), /* 8 */ +/* 320 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 322 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 324 */ NdrFcShort( 0x0 ), /* 0 */ +/* 326 */ NdrFcShort( 0x0 ), /* 0 */ +/* 328 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 330 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 332 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 334 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 336 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 338 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 340 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure WSDKRecvPayMsg */ + +/* 342 */ 0x32, /* FC_BIND_PRIMITIVE */ + 0x48, /* Old Flags: */ +/* 344 */ NdrFcLong( 0x0 ), /* 0 */ +/* 348 */ NdrFcShort( 0xa ), /* 10 */ +/* 350 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 352 */ NdrFcShort( 0x8 ), /* 8 */ +/* 354 */ NdrFcShort( 0x8 ), /* 8 */ +/* 356 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 358 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 360 */ NdrFcShort( 0x0 ), /* 0 */ +/* 362 */ NdrFcShort( 0x0 ), /* 0 */ +/* 364 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter funptr */ + +/* 366 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 368 */ NdrFcShort( 0x0 ), /* x86 Stack size/offset = 0 */ +/* 370 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 372 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 374 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 376 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ 0x0 @@ -293,8 +446,13 @@ static const unsigned short WechatSDK_FormatStringOffsetTable[] = 30, 60, 90, - 126, - 156 + 120, + 156, + 186, + 228, + 270, + 306, + 342 }; @@ -330,22 +488,32 @@ static const RPC_DISPATCH_FUNCTION WechatSDK_table[] = NdrServerCall2, NdrServerCall2, NdrServerCall2, + NdrServerCall2, + NdrServerCall2, + NdrServerCall2, + NdrServerCall2, + NdrServerCall2, 0 }; static const RPC_DISPATCH_TABLE WechatSDK_v1_0_DispatchTable = { - 6, + 11, (RPC_DISPATCH_FUNCTION*)WechatSDK_table }; static const SERVER_ROUTINE WechatSDK_ServerRoutineTable[] = { - (SERVER_ROUTINE)Initialize, - (SERVER_ROUTINE)AntiRevokeMsg, - (SERVER_ROUTINE)UnAntiRevokeMsg, - (SERVER_ROUTINE)StartSaveVoiceMsg, - (SERVER_ROUTINE)StopSaveVoiceMsg, - (SERVER_ROUTINE)SendTextMsg + (SERVER_ROUTINE)WSDKInitialize, + (SERVER_ROUTINE)WSDKUninitialize, + (SERVER_ROUTINE)WSDKAntiRevokeMsg, + (SERVER_ROUTINE)WSDKUnAntiRevokeMsg, + (SERVER_ROUTINE)WSDKStartSaveVoiceMsg, + (SERVER_ROUTINE)WSDKStopSaveVoiceMsg, + (SERVER_ROUTINE)WSDKSendTextMsg, + (SERVER_ROUTINE)WSDKSendImageMsg, + (SERVER_ROUTINE)WSDKRecvTextMsg, + (SERVER_ROUTINE)WSDKRecvTransferMsg, + (SERVER_ROUTINE)WSDKRecvPayMsg }; static const MIDL_SERVER_INFO WechatSDK_ServerInfo = diff --git a/src/WeChatSDKCore/sendmsg.cpp b/src/WeChatSDKCore/sendmsg.cpp index e7cc710..7253a6b 100644 --- a/src/WeChatSDKCore/sendmsg.cpp +++ b/src/WeChatSDKCore/sendmsg.cpp @@ -102,7 +102,7 @@ int InitFunction() return ERROR_SUCCESS; } -int SendTxtMsg(WCHAR* wxid, WCHAR* msg) +int CoreSendTxtMsg(WCHAR* wxid, WCHAR* msg) { int ret = InitFunction(); if (ret != ERROR_SUCCESS) { @@ -125,14 +125,15 @@ int SendTxtMsg(WCHAR* wxid, WCHAR* msg) return ret; } -int SendImageMsg(WCHAR* wxid, WCHAR* path) +//˽ +int CoreSendImageMsg(WCHAR* wxid, WCHAR* path) { int ret = InitFunction(); if (ret != ERROR_SUCCESS) { return ret; } - wxstring pimage; + /*wxstring pimage; wxstring pwxid; char msgpack[0x1000] = { 0 }; @@ -149,5 +150,7 @@ int SendImageMsg(WCHAR* wxid, WCHAR* path) { __asm mov ecx, p; pfn_WxSendMsgMgr_SendImageMsg(msgpack, &pwxid, &pimage); - } + }*/ + + return ret; } \ No newline at end of file diff --git a/src/WeChatSDKCore/stdafx.h b/src/WeChatSDKCore/stdafx.h index 86eb081..c80fe0d 100644 Binary files a/src/WeChatSDKCore/stdafx.h and b/src/WeChatSDKCore/stdafx.h differ diff --git a/src/WeChatSDKCore/user.cpp b/src/WeChatSDKCore/user.cpp new file mode 100644 index 0000000..1577c4e --- /dev/null +++ b/src/WeChatSDKCore/user.cpp @@ -0,0 +1 @@ +#include "stdafx.h" \ No newline at end of file diff --git a/src/WeChatSDKCore/util.cpp b/src/WeChatSDKCore/util.cpp index f90211c..e9bf5c6 100644 --- a/src/WeChatSDKCore/util.cpp +++ b/src/WeChatSDKCore/util.cpp @@ -63,4 +63,73 @@ void Patch(PVOID addr, DWORD size, PVOID code) if (!VirtualProtect((LPVOID)addr, size, lpOldPro, &lpOldPro)) { } +} + +PVOID NextAddr(PVOID addr, DWORD asm_size /*= 5*/) +{ + return (char*)addr + asm_size; +} + +LONG JmpOffset(PVOID dst, PVOID next) +{ + return (LONG)dst - (LONG)next; +} + +LONG CallOffset(PVOID addr, DWORD callsize) +{ + return *((LONG*)((char*)addr + callsize)); +} + +LONGLONG CallOffset64(PVOID addr, DWORD callsize) +{ + return *((LONGLONG*)((char*)addr + callsize)); +} + +PVOID CallTarget(PVOID addr, DWORD callsize, DWORD codesize) +{ + PVOID next = NextAddr(addr, codesize); + LONG offset = CallOffset(addr, callsize); + return (PVOID)((LONG)next + offset); +} + +//E8 D0 FC 22 00 call sub_104830B0 +void InlineHookE8(PVOID src, PVOID target, PVOID* orgfun) +{ + BYTE code[5] = { 0xE8, 0x00, 0x00, 0x00, 0x00 }; + + PVOID next = NextAddr((PVOID)src, 5); + LONG offset = JmpOffset(target, next); + + if (orgfun) { + *orgfun = CallTarget(src, 1, 5); + } + + *((DWORD*)&code[1]) = offset; + Patch(src, 5, code); +} + +wchar_t* SplitStr(const wchar_t* src, const wchar_t* f1, const wchar_t* f2) +{ + const wchar_t* p = wcsstr(src, f1); + if (p == NULL) { + return NULL; + } + p = p + wcslen(f1); + const wchar_t* p1 = wcsstr(p, f2); + if (p1 == NULL) { + return NULL; + } + + int len = p1 - p; + if (len <= 0) { + return NULL; + } + wchar_t* dst = new wchar_t[len + 2]; + if (dst == NULL) { + return NULL; + } + memset(dst, 0, (len + 2) * sizeof(wchar_t)); + memcpy(dst, p, len * sizeof(wchar_t)); + + return dst; } \ No newline at end of file diff --git a/src/WeChatSDKCore/util.h b/src/WeChatSDKCore/util.h index e40d618..46dc582 100644 --- a/src/WeChatSDKCore/util.h +++ b/src/WeChatSDKCore/util.h @@ -2,3 +2,5 @@ bool GetFileVersion(LPTSTR lpszFilePath, LPTSTR version); void Patch(PVOID addr, DWORD size, PVOID code); +void InlineHookE8(PVOID src, PVOID target, PVOID* orgfun); +wchar_t* SplitStr(const wchar_t* src, const wchar_t* f1, const wchar_t* f2); \ No newline at end of file diff --git a/src/WeChatSDKCore/voice.cpp b/src/WeChatSDKCore/voice.cpp index 37a5c9d..9ed094c 100644 --- a/src/WeChatSDKCore/voice.cpp +++ b/src/WeChatSDKCore/voice.cpp @@ -135,7 +135,7 @@ int __stdcall fakeVoiceDecodeInternal(int voice, int size, int from, int a4) return pfnVoiceDecodeInternal(voice, size, from, a4); } -int SaveVoiceMsg(wchar_t *path) +int CoreSaveVoiceMsg(wchar_t *path) { HMODULE hMod = GetModuleHandle(WECHATWINDLL); if (hMod == NULL) { @@ -163,7 +163,7 @@ int SaveVoiceMsg(wchar_t *path) } } -int UnSaveVoiceMsg(void) +int CoreUnSaveVoiceMsg(void) { PVOID* p = GetOrigVocieDecodeInternal(); if (*p) { diff --git a/src/WeChatSDKCore/weixin.h b/src/WeChatSDKCore/weixin.h index 233dd41..692b2ee 100644 --- a/src/WeChatSDKCore/weixin.h +++ b/src/WeChatSDKCore/weixin.h @@ -62,30 +62,32 @@ typedef struct _wxmsg //////////////////////////////////////////////////////////////////// //ϵ -typedef struct _USERINFO_NAME +typedef struct _WXBUFFER { union { - char nick[0x10]; + char buf[0x10]; struct { - char* nickbuf; + char* buf; DWORD unk1; DWORD unk2; DWORD unk3; } p; - } nick; - DWORD nick_len;//10 - DWORD nick_len1;//14 >0x10 ʹnickbuf -}USERINFO_NAME;//18 + } buf; + DWORD buf_len;//10 + DWORD buf_len1;//14 >0x10 ʹnickbuf +}WxBuffer, *PWxBuffer;//18 typedef struct _USERINFO0 { char unk1[0x3c];// - USERINFO_NAME wxid;//3c - USERINFO_NAME infox;//54 - USERINFO_NAME infox1;//6c + WxBuffer wxid;//3c + WxBuffer infox;//54 + WxBuffer infox1;//6c char unk6[0x30];//84 - USERINFO_NAME nick;;//b4 -} USERINFO; + WxBuffer nick;;//b4 + char unk7[0x14c];//cc + WxBuffer name;//218 +} LoginUser; typedef struct _USERINFO { @@ -153,11 +155,15 @@ typedef struct _USERINFO #pragma pack(pop) -int FakeRevokeMsg(); -void RestoreRevokeMsg(); +int CoreFakeRevokeMsg(); +void CoreRestoreRevokeMsg(); -int SaveVoiceMsg(wchar_t *path); -int UnSaveVoiceMsg(void); +int CoreSaveVoiceMsg(wchar_t *path); +int CoreUnSaveVoiceMsg(void); -int SendTxtMsg(WCHAR* wxid, WCHAR* msg); -int SendImageMsg(WCHAR* wxid, WCHAR* path); \ No newline at end of file +int CoreSendTxtMsg(WCHAR* wxid, WCHAR* msg); +int CoreSendImageMsg(WCHAR* wxid, WCHAR* path); + +int CoreRecvTextMsg(unsigned int funptr); +int CoreRecvTransferMsg(unsigned int funptr); +int CoreRecvPayMsg(unsigned int funptr); diff --git a/src/WeChatSDKTest/WeChatSDKTest.aps b/src/WeChatSDKTest/WeChatSDKTest.aps deleted file mode 100644 index a5c07b7..0000000 Binary files a/src/WeChatSDKTest/WeChatSDKTest.aps and /dev/null differ diff --git a/src/WeChatSDKTest/WeChatSDKTest.cpp b/src/WeChatSDKTest/WeChatSDKTest.cpp index 9d3694f..d7fffbd 100644 Binary files a/src/WeChatSDKTest/WeChatSDKTest.cpp and b/src/WeChatSDKTest/WeChatSDKTest.cpp differ diff --git a/src/WeChatSDKTest/WeChatSDKTest.rc b/src/WeChatSDKTest/WeChatSDKTest.rc index 3ace827..b17e9a1 100644 Binary files a/src/WeChatSDKTest/WeChatSDKTest.rc and b/src/WeChatSDKTest/WeChatSDKTest.rc differ diff --git a/src/common/rpcdef.h b/src/common/rpcdef.h index 0346123..7cc20ff 100644 --- a/src/common/rpcdef.h +++ b/src/common/rpcdef.h @@ -1,4 +1,5 @@ #pragma once #include -RPC_WSTR g_Endpoint = (RPC_WSTR)L"\\pipe\\WeChatSDK_Server"; \ No newline at end of file +RPC_WSTR g_Endpoint = (RPC_WSTR)L"\\pipe\\WeChatSDK_Server"; +RPC_WSTR g_ClkEndpoint = (RPC_WSTR)L"\\pipe\\WeChatSDKClk_Server"; \ No newline at end of file diff --git a/src/common/sdkinf.h b/src/common/sdkinf.h deleted file mode 100644 index 9bbf11b..0000000 --- a/src/common/sdkinf.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once -#include - -typedef int(* SDK_Initialize)(void); - -typedef int(*SDK_UnInitialize)(void); - -typedef int(* SDK_AntiRevokeMsg)(void); - -typedef int(* SDK_UnAntiRevokeMsg)(void); - -typedef int(* SDK_StartSaveVoiceMsg)( - /* [string][in] */ wchar_t *path); - -typedef int(* SDK_StopSaveVoiceMsg)(void); - -typedef int(* SDK_SendTextMsg)( - /* [string][in] */ wchar_t *wxid, - /* [string][in] */ wchar_t *msg); - -typedef int(*SDK_SendImageMsg)( - /* [string][in] */ wchar_t *wxid, - /* [string][in] */ wchar_t *path); - -typedef struct _WECHAT_SDK_INTERFACE -{ - SDK_Initialize Initialize; - SDK_UnInitialize UnInitialize; - SDK_AntiRevokeMsg AntiRevokeMsg; - SDK_UnAntiRevokeMsg UnAntiRevokeMsg; - SDK_StartSaveVoiceMsg StartSaveVoiceMsg; - SDK_StopSaveVoiceMsg StopSaveVoiceMsg; - SDK_SendTextMsg SendTextMsg; - SDK_SendImageMsg SendImageMsg; -}WechatSDKInterface, *PWechatSDKInterface; \ No newline at end of file diff --git a/src/common/version.h b/src/common/version.h index 4432403..fc47d87 100644 --- a/src/common/version.h +++ b/src/common/version.h @@ -4,7 +4,7 @@ #include #define VER_Major 1 -#define VER_Minor 2 +#define VER_Minor 3 #define VER_Revision 0 #define VER_Build 0