From 3b38f66fa8513fb400e5cbb221e0461f234a4ed2 Mon Sep 17 00:00:00 2001 From: ljc545w Date: Fri, 1 Apr 2022 17:22:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96=E9=80=9A?= =?UTF-8?q?=E8=AE=AF=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CWeChatRobot/FriendList.cpp | 88 ++- CWeChatRobot/FriendList.h | 3 +- CWeChatRobot/WeChatRobot.cpp | 18 +- CWeChatRobot/WeChatRobot.h | 3 +- CWeChatRobot/WeChatRobotCOM.idl | 15 +- CWeChatRobot/WeChatRobotCOM_i.h | 20 + CWeChatRobot/WeChatRobotCOM_p.c | 972 ++++++++++++++++++++++++++++---- CWeChatRobot/pch.cpp | 13 - CWeChatRobot/pch.h | 8 +- DWeChatRobot/SelfInfo.cpp | 1 + README.md | 34 +- Release/CWeChatRobot.exe | Bin 71168 -> 71680 bytes wxRobot.py | 9 +- wxRobot/Program.cs | 7 +- wxRobot/bin/Release/wxRobot.exe | Bin 7168 -> 7680 bytes 15 files changed, 1036 insertions(+), 155 deletions(-) diff --git a/CWeChatRobot/FriendList.cpp b/CWeChatRobot/FriendList.cpp index 3e2907b..38af738 100644 --- a/CWeChatRobot/FriendList.cpp +++ b/CWeChatRobot/FriendList.cpp @@ -70,12 +70,6 @@ void ReadFriendMessageByAddress(WxFriendAddrStruct* lpWxFriendAddr, WxFriendStru ZeroMemory(lpWxFriend->wxRemark, sizeof(wchar_t) * (length + 1)); ReadProcessMemory(hProcess, (LPCVOID)lpWxFriendAddr->wxRemarkAddr, &bufferaddr, sizeof(DWORD), 0); ReadProcessMemory(hProcess, (LPCVOID)bufferaddr, lpWxFriend->wxRemark, length * sizeof(wchar_t), 0); - wstring wswxRemark = wreplace(lpWxFriend->wxRemark,L'\"',L"\\\""); - delete[] lpWxFriend->wxRemark; - lpWxFriend->wxRemark = new wchar_t[wswxRemark.length() + 1]; - ZeroMemory(lpWxFriend->wxRemark, sizeof(wchar_t) * (wswxRemark.length() + 1)); - memcpy(lpWxFriend->wxRemark, wswxRemark.c_str(), wswxRemark.length() * 2); - wcout << lpWxFriend->wxRemark << endl; } } else { @@ -100,7 +94,87 @@ void FreeWxFriend(int index) { }; } -std::wstring GetFriendList() { +SAFEARRAY* CreateFriendArray(int FriendCount) { + HRESULT hr = S_OK; + SAFEARRAY* psaValue; + vector FriendInfoKey = { + L"wxid", + L"wxNumber", + L"wxNickName", + L"wxRemark", + }; + SAFEARRAYBOUND rgsaBound[3] = { {(ULONG)FriendCount,0},{FriendInfoKey.size(),0},{2,0} }; + psaValue = SafeArrayCreate(VT_VARIANT, 3, rgsaBound); + for (long x = 0; x < FriendCount; x++) { + vector FriendInfoValue = { WxFriendList[x].wxId,WxFriendList[x].wxNumber,WxFriendList[x].wxNickName,WxFriendList[x].wxRemark }; + for (unsigned long i = 0; i < FriendInfoKey.size(); i++) + { + long keyIndex[3] = { x,(long)i,0 }; + hr = SafeArrayPutElement(psaValue, keyIndex, &(_variant_t)FriendInfoKey[i].c_str()); + long valueIndex[3] = { x,(long)i,1 }; + hr = SafeArrayPutElement(psaValue, valueIndex, &(_variant_t)FriendInfoValue[i].c_str()); + } + FriendInfoValue.clear(); + } + return psaValue; +} + +SAFEARRAY* GetFriendList() { + if (!hProcess) + return NULL; + DWORD GetFriendListInitAddr = GetWeChatRobotBase() + GetFriendListInitOffset; + DWORD GetFriendListRemoteAddr = GetWeChatRobotBase() + GetFriendListRemoteOffset; + DWORD GetFriendListFinishAddr = GetWeChatRobotBase() + GetFriendListFinishOffset; + DWORD FriendCount = 0; + DWORD dwId, dwHandle = 0; + // 获取好友列表的长度 + HANDLE hThread = ::CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetFriendListInitAddr, NULL, 0, &dwId); + if (hThread) { + WaitForSingleObject(hThread, INFINITE); + GetExitCodeThread(hThread, &FriendCount); + CloseHandle(hThread); + } + // 获取保存第一个好友的数据指针的结构体首地址 + hThread = ::CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetFriendListRemoteAddr, NULL, 0, &dwId); + if (hThread) { + WaitForSingleObject(hThread, INFINITE); + GetExitCodeThread(hThread, &dwHandle); + CloseHandle(hThread); + } + + WxFriendAddrStruct WxFriendAddr = { 0 }; + // 根据好友数量初始化全局变量 + WxFriendList = new WxFriendStruct[FriendCount]; + if (dwHandle) { + for (unsigned int i = 0; i < FriendCount; i++) { + WxFriendList[i] = { 0 }; + ZeroMemory(&WxFriendAddr, sizeof(WxFriendAddrStruct)); + ReadProcessMemory(hProcess, (LPCVOID)dwHandle, &WxFriendAddr, sizeof(WxFriendAddrStruct), 0); + ReadFriendMessageByAddress(&WxFriendAddr, &WxFriendList[i]); + // 保存下一个好友数据的结构体 + dwHandle += sizeof(WxFriendAddrStruct); + } + } + else { + return NULL; + } + // 清除微信进程空间中的缓存 + hThread = ::CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetFriendListFinishAddr, NULL, 0, &dwId); + if (hThread) { + WaitForSingleObject(hThread, INFINITE); + CloseHandle(hThread); + } + + SAFEARRAY* psaValue = CreateFriendArray(FriendCount); + for (unsigned int i = 0; i < FriendCount; i++) { + FreeWxFriend(i); + } + delete[] WxFriendList; + WxFriendList = NULL; + return psaValue; +} + +std::wstring GetFriendListString() { if (!hProcess) return L"[]"; DWORD GetFriendListInitAddr = GetWeChatRobotBase() + GetFriendListInitOffset; diff --git a/CWeChatRobot/FriendList.h b/CWeChatRobot/FriendList.h index c992b68..105c0a1 100644 --- a/CWeChatRobot/FriendList.h +++ b/CWeChatRobot/FriendList.h @@ -2,4 +2,5 @@ #include #include using namespace std; -std::wstring GetFriendList(); \ No newline at end of file +SAFEARRAY* GetFriendList(); +std::wstring GetFriendListString(); \ No newline at end of file diff --git a/CWeChatRobot/WeChatRobot.cpp b/CWeChatRobot/WeChatRobot.cpp index f7ad50a..70afcd0 100644 --- a/CWeChatRobot/WeChatRobot.cpp +++ b/CWeChatRobot/WeChatRobot.cpp @@ -76,9 +76,23 @@ STDMETHODIMP CWeChatRobot::CSendCard(BSTR receiver, BSTR sharedwxid, BSTR nickna /* * 鍙傛暟1锛氶杩斿洖鐨勫硷紝璋冪敤鏃舵棤闇鎻愪緵 +* 杩斿洖涓涓笁缁存暟缁勶紝python鐨刢omtypes鍖呬細灏嗗叾瑙f瀽涓哄厓缁 */ -STDMETHODIMP CWeChatRobot::CGetFriendList(BSTR* __result) { - string smessage = _com_util::ConvertBSTRToString((BSTR)(GetFriendList().c_str())); +STDMETHODIMP CWeChatRobot::CGetFriendList(VARIANT* __result) { + VARIANT vsaValue; + vsaValue.vt = VT_ARRAY | VT_VARIANT; + V_ARRAY(&vsaValue) = GetFriendList(); + *__result = vsaValue; + return S_OK; +} + +/* +* 鍙傛暟1锛氶杩斿洖鐨勫硷紝璋冪敤鏃舵棤闇鎻愪緵 + 杩斿洖鏋勯犲ソ鐨刯son涓诧紝鍦ㄥ弽搴忓垪鍖栨椂闇鑰冭檻濂藉弸淇℃伅涓槸鍚﹀瓨鍦╦son瀛楃 + 锛堣冭檻鍒颁粠SAFEARRAY杞崲鍒伴傚綋鍙橀噺鍙兘杈冧负绻佺悙锛屾晠淇濈暀姝ゆ帴鍙o級 +*/ +STDMETHODIMP CWeChatRobot::CGetFriendListString(BSTR* __result) { + string smessage = _com_util::ConvertBSTRToString((BSTR)(GetFriendListString().c_str())); *__result = _com_util::ConvertStringToBSTR(smessage.c_str()); return S_OK; } diff --git a/CWeChatRobot/WeChatRobot.h b/CWeChatRobot/WeChatRobot.h index 4f0b112..54ebde7 100644 --- a/CWeChatRobot/WeChatRobot.h +++ b/CWeChatRobot/WeChatRobot.h @@ -58,7 +58,8 @@ public: STDMETHODIMP CSendFile(BSTR wxid, BSTR filepath, int* __result); STDMETHODIMP CSendArticle(BSTR wxid, BSTR title, BSTR abstract, BSTR url, int* __result); STDMETHODIMP CSendCard(BSTR receiver, BSTR sharedwxid, BSTR nickname, int* __result); - STDMETHODIMP CGetFriendList(BSTR* __result); + STDMETHODIMP CGetFriendList(VARIANT* __result); + STDMETHODIMP CGetFriendListString(BSTR* __result); STDMETHODIMP CGetWxUserInfo(BSTR wxid, BSTR* __result); STDMETHODIMP CGetSelfInfo(BSTR* __result); STDMETHODIMP CCheckFriendStatusInit(int* __result); diff --git a/CWeChatRobot/WeChatRobotCOM.idl b/CWeChatRobot/WeChatRobotCOM.idl index 6b6fb34..095ae9f 100644 --- a/CWeChatRobot/WeChatRobotCOM.idl +++ b/CWeChatRobot/WeChatRobotCOM.idl @@ -23,13 +23,14 @@ interface IWeChatRobot : IDispatch [id(5)] HRESULT CSendFile([in] BSTR wxid, [in] BSTR filepath, [out, retval] int* __result); [id(6)] HRESULT CSendArticle([in] BSTR wxid, [in] BSTR title, [in] BSTR abstract, [in] BSTR url, [out, retval] int* __result); [id(7)] HRESULT CSendCard([in] BSTR receiver, [in] BSTR sharedwxid, [in] BSTR nickname, [out, retval] int* __result); - [id(8)] HRESULT CGetFriendList([out, retval] BSTR* __result); - [id(9)] HRESULT CGetWxUserInfo([in] BSTR wxid, [out, retval] BSTR* __result); - [id(10)] HRESULT CGetSelfInfo([out, retval] BSTR* __result); - [id(11)] HRESULT CCheckFriendStatusInit([out, retval] int* __result); - [id(12)] HRESULT CCheckFriendStatus([in] BSTR wxid, [out, retval] int* __result); - [id(13)] HRESULT CCheckFriendStatusFinish([out, retval] int* __result); - [id(14)] HRESULT CGetComWorkPath([out, retval] BSTR* __result); + [id(8)] HRESULT CGetFriendList([out, retval] VARIANT* __result); + [id(9)] HRESULT CGetFriendListString([out, retval] BSTR* __result); + [id(10)] HRESULT CGetWxUserInfo([in] BSTR wxid, [out, retval] BSTR* __result); + [id(11)] HRESULT CGetSelfInfo([out, retval] BSTR* __result); + [id(12)] HRESULT CCheckFriendStatusInit([out, retval] int* __result); + [id(13)] HRESULT CCheckFriendStatus([in] BSTR wxid, [out, retval] int* __result); + [id(14)] HRESULT CCheckFriendStatusFinish([out, retval] int* __result); + [id(15)] HRESULT CGetComWorkPath([out, retval] BSTR* __result); }; [ uuid(721abb35-141a-4aa2-94f2-762e2833fa6c), diff --git a/CWeChatRobot/WeChatRobotCOM_i.h b/CWeChatRobot/WeChatRobotCOM_i.h index 0835fd0..7f6a37e 100644 --- a/CWeChatRobot/WeChatRobotCOM_i.h +++ b/CWeChatRobot/WeChatRobotCOM_i.h @@ -123,6 +123,9 @@ EXTERN_C const IID IID_IWeChatRobot; /* [retval][out] */ int *__result) = 0; virtual /* [id] */ HRESULT STDMETHODCALLTYPE CGetFriendList( + /* [retval][out] */ VARIANT *__result) = 0; + + virtual /* [id] */ HRESULT STDMETHODCALLTYPE CGetFriendListString( /* [retval][out] */ BSTR *__result) = 0; virtual /* [id] */ HRESULT STDMETHODCALLTYPE CGetWxUserInfo( @@ -245,6 +248,10 @@ EXTERN_C const IID IID_IWeChatRobot; /* [retval][out] */ int *__result); /* [id] */ HRESULT ( STDMETHODCALLTYPE *CGetFriendList )( + IWeChatRobot * This, + /* [retval][out] */ VARIANT *__result); + + /* [id] */ HRESULT ( STDMETHODCALLTYPE *CGetFriendListString )( IWeChatRobot * This, /* [retval][out] */ BSTR *__result); @@ -334,6 +341,9 @@ EXTERN_C const IID IID_IWeChatRobot; #define IWeChatRobot_CGetFriendList(This,__result) \ ( (This)->lpVtbl -> CGetFriendList(This,__result) ) +#define IWeChatRobot_CGetFriendListString(This,__result) \ + ( (This)->lpVtbl -> CGetFriendListString(This,__result) ) + #define IWeChatRobot_CGetWxUserInfo(This,wxid,__result) \ ( (This)->lpVtbl -> CGetWxUserInfo(This,wxid,__result) ) @@ -389,11 +399,21 @@ unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); +unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * ); +void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * ); + unsigned long __RPC_USER BSTR_UserSize64( unsigned long *, unsigned long , BSTR * ); unsigned char * __RPC_USER BSTR_UserMarshal64( unsigned long *, unsigned char *, BSTR * ); unsigned char * __RPC_USER BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * ); void __RPC_USER BSTR_UserFree64( unsigned long *, BSTR * ); +unsigned long __RPC_USER VARIANT_UserSize64( unsigned long *, unsigned long , VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserMarshal64( unsigned long *, unsigned char *, VARIANT * ); +unsigned char * __RPC_USER VARIANT_UserUnmarshal64(unsigned long *, unsigned char *, VARIANT * ); +void __RPC_USER VARIANT_UserFree64( unsigned long *, VARIANT * ); + /* end of Additional Prototypes */ #ifdef __cplusplus diff --git a/CWeChatRobot/WeChatRobotCOM_p.c b/CWeChatRobot/WeChatRobotCOM_p.c index 2875dd7..9ef89b8 100644 --- a/CWeChatRobot/WeChatRobotCOM_p.c +++ b/CWeChatRobot/WeChatRobotCOM_p.c @@ -48,11 +48,11 @@ #include "WeChatRobotCOM_i.h" -#define TYPE_FORMAT_STRING_SIZE 71 -#define PROC_FORMAT_STRING_SIZE 595 +#define TYPE_FORMAT_STRING_SIZE 1221 +#define PROC_FORMAT_STRING_SIZE 631 #define EXPR_FORMAT_STRING_SIZE 1 #define TRANSMIT_AS_TABLE_SIZE 0 -#define WIRE_MARSHAL_TABLE_SIZE 1 +#define WIRE_MARSHAL_TABLE_SIZE 2 typedef struct _WeChatRobotCOM_MIDL_TYPE_FORMAT_STRING { @@ -421,9 +421,9 @@ static const WeChatRobotCOM_MIDL_PROC_FORMAT_STRING WeChatRobotCOM__MIDL_ProcFor /* Parameter __result */ -/* 354 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 354 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ /* 356 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 358 */ NdrFcShort( 0x3c ), /* Type Offset=60 */ +/* 358 */ NdrFcShort( 0x4ac ), /* Type Offset=1196 */ /* Return value */ @@ -432,73 +432,73 @@ static const WeChatRobotCOM_MIDL_PROC_FORMAT_STRING WeChatRobotCOM__MIDL_ProcFor /* 364 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure CGetWxUserInfo */ + /* Procedure CGetFriendListString */ /* 366 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 368 */ NdrFcLong( 0x0 ), /* 0 */ /* 372 */ NdrFcShort( 0xf ), /* 15 */ -/* 374 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 374 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 376 */ NdrFcShort( 0x0 ), /* 0 */ /* 378 */ NdrFcShort( 0x8 ), /* 8 */ -/* 380 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ - 0x3, /* 3 */ +/* 380 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ /* 382 */ 0x8, /* 8 */ - 0x47, /* Ext Flags: new corr desc, clt corr check, srv corr check, has range on conformance */ + 0x43, /* Ext Flags: new corr desc, clt corr check, has range on conformance */ /* 384 */ NdrFcShort( 0x1 ), /* 1 */ -/* 386 */ NdrFcShort( 0x1 ), /* 1 */ +/* 386 */ NdrFcShort( 0x0 ), /* 0 */ /* 388 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter wxid */ - -/* 390 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ -/* 392 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 394 */ NdrFcShort( 0x2a ), /* Type Offset=42 */ - /* Parameter __result */ -/* 396 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 398 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 400 */ NdrFcShort( 0x3c ), /* Type Offset=60 */ +/* 390 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 392 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 394 */ NdrFcShort( 0x4ba ), /* Type Offset=1210 */ /* Return value */ -/* 402 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 404 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 406 */ 0x8, /* FC_LONG */ +/* 396 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 398 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 400 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure CGetSelfInfo */ + /* Procedure CGetWxUserInfo */ -/* 408 */ 0x33, /* FC_AUTO_HANDLE */ +/* 402 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 410 */ NdrFcLong( 0x0 ), /* 0 */ -/* 414 */ NdrFcShort( 0x10 ), /* 16 */ -/* 416 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 418 */ NdrFcShort( 0x0 ), /* 0 */ -/* 420 */ NdrFcShort( 0x8 ), /* 8 */ -/* 422 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x2, /* 2 */ -/* 424 */ 0x8, /* 8 */ - 0x43, /* Ext Flags: new corr desc, clt corr check, has range on conformance */ -/* 426 */ NdrFcShort( 0x1 ), /* 1 */ -/* 428 */ NdrFcShort( 0x0 ), /* 0 */ -/* 430 */ NdrFcShort( 0x0 ), /* 0 */ +/* 404 */ NdrFcLong( 0x0 ), /* 0 */ +/* 408 */ NdrFcShort( 0x10 ), /* 16 */ +/* 410 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 412 */ NdrFcShort( 0x0 ), /* 0 */ +/* 414 */ NdrFcShort( 0x8 ), /* 8 */ +/* 416 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 418 */ 0x8, /* 8 */ + 0x47, /* Ext Flags: new corr desc, clt corr check, srv corr check, has range on conformance */ +/* 420 */ NdrFcShort( 0x1 ), /* 1 */ +/* 422 */ NdrFcShort( 0x1 ), /* 1 */ +/* 424 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter wxid */ + +/* 426 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 428 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 430 */ NdrFcShort( 0x2a ), /* Type Offset=42 */ /* Parameter __result */ /* 432 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 434 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 436 */ NdrFcShort( 0x3c ), /* Type Offset=60 */ +/* 434 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 436 */ NdrFcShort( 0x4ba ), /* Type Offset=1210 */ /* Return value */ /* 438 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 440 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 440 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 442 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure CCheckFriendStatusInit */ + /* Procedure CGetSelfInfo */ /* 444 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ @@ -506,21 +506,20 @@ static const WeChatRobotCOM_MIDL_PROC_FORMAT_STRING WeChatRobotCOM__MIDL_ProcFor /* 450 */ NdrFcShort( 0x11 ), /* 17 */ /* 452 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 454 */ NdrFcShort( 0x0 ), /* 0 */ -/* 456 */ NdrFcShort( 0x24 ), /* 36 */ -/* 458 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 456 */ NdrFcShort( 0x8 ), /* 8 */ +/* 458 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ /* 460 */ 0x8, /* 8 */ - 0x41, /* Ext Flags: new corr desc, has range on conformance */ -/* 462 */ NdrFcShort( 0x0 ), /* 0 */ + 0x43, /* Ext Flags: new corr desc, clt corr check, has range on conformance */ +/* 462 */ NdrFcShort( 0x1 ), /* 1 */ /* 464 */ NdrFcShort( 0x0 ), /* 0 */ /* 466 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter __result */ -/* 468 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 468 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ /* 470 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 472 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 472 */ NdrFcShort( 0x4ba ), /* Type Offset=1210 */ /* Return value */ @@ -529,75 +528,75 @@ static const WeChatRobotCOM_MIDL_PROC_FORMAT_STRING WeChatRobotCOM__MIDL_ProcFor /* 478 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure CCheckFriendStatus */ + /* Procedure CCheckFriendStatusInit */ /* 480 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 482 */ NdrFcLong( 0x0 ), /* 0 */ /* 486 */ NdrFcShort( 0x12 ), /* 18 */ -/* 488 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 488 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 490 */ NdrFcShort( 0x0 ), /* 0 */ /* 492 */ NdrFcShort( 0x24 ), /* 36 */ -/* 494 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ - 0x3, /* 3 */ +/* 494 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ /* 496 */ 0x8, /* 8 */ - 0x45, /* Ext Flags: new corr desc, srv corr check, has range on conformance */ + 0x41, /* Ext Flags: new corr desc, has range on conformance */ /* 498 */ NdrFcShort( 0x0 ), /* 0 */ -/* 500 */ NdrFcShort( 0x1 ), /* 1 */ +/* 500 */ NdrFcShort( 0x0 ), /* 0 */ /* 502 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter wxid */ + /* Parameter __result */ -/* 504 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 504 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 506 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 508 */ NdrFcShort( 0x2a ), /* Type Offset=42 */ +/* 508 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter __result */ + /* Return value */ -/* 510 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 510 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 512 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 514 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Procedure CCheckFriendStatus */ -/* 516 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 518 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 520 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 516 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 518 */ NdrFcLong( 0x0 ), /* 0 */ +/* 522 */ NdrFcShort( 0x13 ), /* 19 */ +/* 524 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 526 */ NdrFcShort( 0x0 ), /* 0 */ +/* 528 */ NdrFcShort( 0x24 ), /* 36 */ +/* 530 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ + 0x3, /* 3 */ +/* 532 */ 0x8, /* 8 */ + 0x45, /* Ext Flags: new corr desc, srv corr check, has range on conformance */ +/* 534 */ NdrFcShort( 0x0 ), /* 0 */ +/* 536 */ NdrFcShort( 0x1 ), /* 1 */ +/* 538 */ NdrFcShort( 0x0 ), /* 0 */ - /* Procedure CCheckFriendStatusFinish */ + /* Parameter wxid */ -/* 522 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 524 */ NdrFcLong( 0x0 ), /* 0 */ -/* 528 */ NdrFcShort( 0x13 ), /* 19 */ -/* 530 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 532 */ NdrFcShort( 0x0 ), /* 0 */ -/* 534 */ NdrFcShort( 0x24 ), /* 36 */ -/* 536 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ -/* 538 */ 0x8, /* 8 */ - 0x41, /* Ext Flags: new corr desc, has range on conformance */ -/* 540 */ NdrFcShort( 0x0 ), /* 0 */ -/* 542 */ NdrFcShort( 0x0 ), /* 0 */ -/* 544 */ NdrFcShort( 0x0 ), /* 0 */ +/* 540 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 542 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 544 */ NdrFcShort( 0x2a ), /* Type Offset=42 */ /* Parameter __result */ /* 546 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 548 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 548 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 550 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 552 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 554 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 554 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 556 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure CGetComWorkPath */ + /* Procedure CCheckFriendStatusFinish */ /* 558 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ @@ -605,20 +604,21 @@ static const WeChatRobotCOM_MIDL_PROC_FORMAT_STRING WeChatRobotCOM__MIDL_ProcFor /* 564 */ NdrFcShort( 0x14 ), /* 20 */ /* 566 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 568 */ NdrFcShort( 0x0 ), /* 0 */ -/* 570 */ NdrFcShort( 0x8 ), /* 8 */ -/* 572 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 570 */ NdrFcShort( 0x24 ), /* 36 */ +/* 572 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ /* 574 */ 0x8, /* 8 */ - 0x43, /* Ext Flags: new corr desc, clt corr check, has range on conformance */ -/* 576 */ NdrFcShort( 0x1 ), /* 1 */ + 0x41, /* Ext Flags: new corr desc, has range on conformance */ +/* 576 */ NdrFcShort( 0x0 ), /* 0 */ /* 578 */ NdrFcShort( 0x0 ), /* 0 */ /* 580 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter __result */ -/* 582 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 582 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 584 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 586 */ NdrFcShort( 0x3c ), /* Type Offset=60 */ +/* 586 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ @@ -627,6 +627,36 @@ static const WeChatRobotCOM_MIDL_PROC_FORMAT_STRING WeChatRobotCOM__MIDL_ProcFor /* 592 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure CGetComWorkPath */ + +/* 594 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 596 */ NdrFcLong( 0x0 ), /* 0 */ +/* 600 */ NdrFcShort( 0x15 ), /* 21 */ +/* 602 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 604 */ NdrFcShort( 0x0 ), /* 0 */ +/* 606 */ NdrFcShort( 0x8 ), /* 8 */ +/* 608 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 610 */ 0x8, /* 8 */ + 0x43, /* Ext Flags: new corr desc, clt corr check, has range on conformance */ +/* 612 */ NdrFcShort( 0x1 ), /* 1 */ +/* 614 */ NdrFcShort( 0x0 ), /* 0 */ +/* 616 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter __result */ + +/* 618 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 620 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 622 */ NdrFcShort( 0x4ba ), /* Type Offset=1210 */ + + /* Return value */ + +/* 624 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 626 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 628 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + 0x0 } }; @@ -674,16 +704,749 @@ static const WeChatRobotCOM_MIDL_TYPE_FORMAT_STRING WeChatRobotCOM__MIDL_TypeFor /* 50 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (6) */ /* 52 */ 0x11, 0x4, /* FC_RP [alloced_on_stack] */ -/* 54 */ NdrFcShort( 0x6 ), /* Offset= 6 (60) */ +/* 54 */ NdrFcShort( 0x476 ), /* Offset= 1142 (1196) */ /* 56 */ 0x13, 0x0, /* FC_OP */ -/* 58 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (32) */ -/* 60 */ 0xb4, /* FC_USER_MARSHAL */ +/* 58 */ NdrFcShort( 0x45e ), /* Offset= 1118 (1176) */ +/* 60 */ + 0x2b, /* FC_NON_ENCAPSULATED_UNION */ + 0x9, /* FC_ULONG */ +/* 62 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 64 */ NdrFcShort( 0xfff8 ), /* -8 */ +/* 66 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 68 */ 0x0 , + 0x0, /* 0 */ +/* 70 */ NdrFcLong( 0x0 ), /* 0 */ +/* 74 */ NdrFcLong( 0x0 ), /* 0 */ +/* 78 */ NdrFcShort( 0x2 ), /* Offset= 2 (80) */ +/* 80 */ NdrFcShort( 0x10 ), /* 16 */ +/* 82 */ NdrFcShort( 0x2f ), /* 47 */ +/* 84 */ NdrFcLong( 0x14 ), /* 20 */ +/* 88 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */ +/* 90 */ NdrFcLong( 0x3 ), /* 3 */ +/* 94 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 96 */ NdrFcLong( 0x11 ), /* 17 */ +/* 100 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */ +/* 102 */ NdrFcLong( 0x2 ), /* 2 */ +/* 106 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 108 */ NdrFcLong( 0x4 ), /* 4 */ +/* 112 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */ +/* 114 */ NdrFcLong( 0x5 ), /* 5 */ +/* 118 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 120 */ NdrFcLong( 0xb ), /* 11 */ +/* 124 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 126 */ NdrFcLong( 0xa ), /* 10 */ +/* 130 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 132 */ NdrFcLong( 0x6 ), /* 6 */ +/* 136 */ NdrFcShort( 0xe8 ), /* Offset= 232 (368) */ +/* 138 */ NdrFcLong( 0x7 ), /* 7 */ +/* 142 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */ +/* 144 */ NdrFcLong( 0x8 ), /* 8 */ +/* 148 */ NdrFcShort( 0xe2 ), /* Offset= 226 (374) */ +/* 150 */ NdrFcLong( 0xd ), /* 13 */ +/* 154 */ NdrFcShort( 0xe0 ), /* Offset= 224 (378) */ +/* 156 */ NdrFcLong( 0x9 ), /* 9 */ +/* 160 */ NdrFcShort( 0xec ), /* Offset= 236 (396) */ +/* 162 */ NdrFcLong( 0x2000 ), /* 8192 */ +/* 166 */ NdrFcShort( 0xf8 ), /* Offset= 248 (414) */ +/* 168 */ NdrFcLong( 0x24 ), /* 36 */ +/* 172 */ NdrFcShort( 0x3a2 ), /* Offset= 930 (1102) */ +/* 174 */ NdrFcLong( 0x4024 ), /* 16420 */ +/* 178 */ NdrFcShort( 0x39c ), /* Offset= 924 (1102) */ +/* 180 */ NdrFcLong( 0x4011 ), /* 16401 */ +/* 184 */ NdrFcShort( 0x39a ), /* Offset= 922 (1106) */ +/* 186 */ NdrFcLong( 0x4002 ), /* 16386 */ +/* 190 */ NdrFcShort( 0x398 ), /* Offset= 920 (1110) */ +/* 192 */ NdrFcLong( 0x4003 ), /* 16387 */ +/* 196 */ NdrFcShort( 0x396 ), /* Offset= 918 (1114) */ +/* 198 */ NdrFcLong( 0x4014 ), /* 16404 */ +/* 202 */ NdrFcShort( 0x394 ), /* Offset= 916 (1118) */ +/* 204 */ NdrFcLong( 0x4004 ), /* 16388 */ +/* 208 */ NdrFcShort( 0x392 ), /* Offset= 914 (1122) */ +/* 210 */ NdrFcLong( 0x4005 ), /* 16389 */ +/* 214 */ NdrFcShort( 0x390 ), /* Offset= 912 (1126) */ +/* 216 */ NdrFcLong( 0x400b ), /* 16395 */ +/* 220 */ NdrFcShort( 0x37a ), /* Offset= 890 (1110) */ +/* 222 */ NdrFcLong( 0x400a ), /* 16394 */ +/* 226 */ NdrFcShort( 0x378 ), /* Offset= 888 (1114) */ +/* 228 */ NdrFcLong( 0x4006 ), /* 16390 */ +/* 232 */ NdrFcShort( 0x382 ), /* Offset= 898 (1130) */ +/* 234 */ NdrFcLong( 0x4007 ), /* 16391 */ +/* 238 */ NdrFcShort( 0x378 ), /* Offset= 888 (1126) */ +/* 240 */ NdrFcLong( 0x4008 ), /* 16392 */ +/* 244 */ NdrFcShort( 0x37a ), /* Offset= 890 (1134) */ +/* 246 */ NdrFcLong( 0x400d ), /* 16397 */ +/* 250 */ NdrFcShort( 0x378 ), /* Offset= 888 (1138) */ +/* 252 */ NdrFcLong( 0x4009 ), /* 16393 */ +/* 256 */ NdrFcShort( 0x376 ), /* Offset= 886 (1142) */ +/* 258 */ NdrFcLong( 0x6000 ), /* 24576 */ +/* 262 */ NdrFcShort( 0x374 ), /* Offset= 884 (1146) */ +/* 264 */ NdrFcLong( 0x400c ), /* 16396 */ +/* 268 */ NdrFcShort( 0x372 ), /* Offset= 882 (1150) */ +/* 270 */ NdrFcLong( 0x10 ), /* 16 */ +/* 274 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */ +/* 276 */ NdrFcLong( 0x12 ), /* 18 */ +/* 280 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */ +/* 282 */ NdrFcLong( 0x13 ), /* 19 */ +/* 286 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 288 */ NdrFcLong( 0x15 ), /* 21 */ +/* 292 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */ +/* 294 */ NdrFcLong( 0x16 ), /* 22 */ +/* 298 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 300 */ NdrFcLong( 0x17 ), /* 23 */ +/* 304 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */ +/* 306 */ NdrFcLong( 0xe ), /* 14 */ +/* 310 */ NdrFcShort( 0x350 ), /* Offset= 848 (1158) */ +/* 312 */ NdrFcLong( 0x400e ), /* 16398 */ +/* 316 */ NdrFcShort( 0x354 ), /* Offset= 852 (1168) */ +/* 318 */ NdrFcLong( 0x4010 ), /* 16400 */ +/* 322 */ NdrFcShort( 0x352 ), /* Offset= 850 (1172) */ +/* 324 */ NdrFcLong( 0x4012 ), /* 16402 */ +/* 328 */ NdrFcShort( 0x30e ), /* Offset= 782 (1110) */ +/* 330 */ NdrFcLong( 0x4013 ), /* 16403 */ +/* 334 */ NdrFcShort( 0x30c ), /* Offset= 780 (1114) */ +/* 336 */ NdrFcLong( 0x4015 ), /* 16405 */ +/* 340 */ NdrFcShort( 0x30a ), /* Offset= 778 (1118) */ +/* 342 */ NdrFcLong( 0x4016 ), /* 16406 */ +/* 346 */ NdrFcShort( 0x300 ), /* Offset= 768 (1114) */ +/* 348 */ NdrFcLong( 0x4017 ), /* 16407 */ +/* 352 */ NdrFcShort( 0x2fa ), /* Offset= 762 (1114) */ +/* 354 */ NdrFcLong( 0x0 ), /* 0 */ +/* 358 */ NdrFcShort( 0x0 ), /* Offset= 0 (358) */ +/* 360 */ NdrFcLong( 0x1 ), /* 1 */ +/* 364 */ NdrFcShort( 0x0 ), /* Offset= 0 (364) */ +/* 366 */ NdrFcShort( 0xffff ), /* Offset= -1 (365) */ +/* 368 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 370 */ NdrFcShort( 0x8 ), /* 8 */ +/* 372 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 374 */ + 0x13, 0x0, /* FC_OP */ +/* 376 */ NdrFcShort( 0xfea8 ), /* Offset= -344 (32) */ +/* 378 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 380 */ NdrFcLong( 0x0 ), /* 0 */ +/* 384 */ NdrFcShort( 0x0 ), /* 0 */ +/* 386 */ NdrFcShort( 0x0 ), /* 0 */ +/* 388 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 390 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 392 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 394 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 396 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 398 */ NdrFcLong( 0x20400 ), /* 132096 */ +/* 402 */ NdrFcShort( 0x0 ), /* 0 */ +/* 404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 406 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 408 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 410 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 412 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 414 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 416 */ NdrFcShort( 0x2 ), /* Offset= 2 (418) */ +/* 418 */ + 0x13, 0x0, /* FC_OP */ +/* 420 */ NdrFcShort( 0x298 ), /* Offset= 664 (1084) */ +/* 422 */ + 0x2a, /* FC_ENCAPSULATED_UNION */ + 0x49, /* 73 */ +/* 424 */ NdrFcShort( 0x18 ), /* 24 */ +/* 426 */ NdrFcShort( 0xa ), /* 10 */ +/* 428 */ NdrFcLong( 0x8 ), /* 8 */ +/* 432 */ NdrFcShort( 0x64 ), /* Offset= 100 (532) */ +/* 434 */ NdrFcLong( 0xd ), /* 13 */ +/* 438 */ NdrFcShort( 0x9c ), /* Offset= 156 (594) */ +/* 440 */ NdrFcLong( 0x9 ), /* 9 */ +/* 444 */ NdrFcShort( 0xd0 ), /* Offset= 208 (652) */ +/* 446 */ NdrFcLong( 0xc ), /* 12 */ +/* 450 */ NdrFcShort( 0x104 ), /* Offset= 260 (710) */ +/* 452 */ NdrFcLong( 0x24 ), /* 36 */ +/* 456 */ NdrFcShort( 0x174 ), /* Offset= 372 (828) */ +/* 458 */ NdrFcLong( 0x800d ), /* 32781 */ +/* 462 */ NdrFcShort( 0x190 ), /* Offset= 400 (862) */ +/* 464 */ NdrFcLong( 0x10 ), /* 16 */ +/* 468 */ NdrFcShort( 0x1b4 ), /* Offset= 436 (904) */ +/* 470 */ NdrFcLong( 0x2 ), /* 2 */ +/* 474 */ NdrFcShort( 0x1d8 ), /* Offset= 472 (946) */ +/* 476 */ NdrFcLong( 0x3 ), /* 3 */ +/* 480 */ NdrFcShort( 0x1fc ), /* Offset= 508 (988) */ +/* 482 */ NdrFcLong( 0x14 ), /* 20 */ +/* 486 */ NdrFcShort( 0x220 ), /* Offset= 544 (1030) */ +/* 488 */ NdrFcShort( 0xffff ), /* Offset= -1 (487) */ +/* 490 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 492 */ NdrFcShort( 0x4 ), /* 4 */ +/* 494 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 496 */ NdrFcShort( 0x0 ), /* 0 */ +/* 498 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 500 */ 0x0 , + 0x0, /* 0 */ +/* 502 */ NdrFcLong( 0x0 ), /* 0 */ +/* 506 */ NdrFcLong( 0x0 ), /* 0 */ +/* 510 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 512 */ + 0x48, /* FC_VARIABLE_REPEAT */ + 0x49, /* FC_FIXED_OFFSET */ +/* 514 */ NdrFcShort( 0x4 ), /* 4 */ +/* 516 */ NdrFcShort( 0x0 ), /* 0 */ +/* 518 */ NdrFcShort( 0x1 ), /* 1 */ +/* 520 */ NdrFcShort( 0x0 ), /* 0 */ +/* 522 */ NdrFcShort( 0x0 ), /* 0 */ +/* 524 */ 0x13, 0x0, /* FC_OP */ +/* 526 */ NdrFcShort( 0xfe12 ), /* Offset= -494 (32) */ +/* 528 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 530 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 532 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 534 */ NdrFcShort( 0x8 ), /* 8 */ +/* 536 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 538 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 540 */ NdrFcShort( 0x4 ), /* 4 */ +/* 542 */ NdrFcShort( 0x4 ), /* 4 */ +/* 544 */ 0x11, 0x0, /* FC_RP */ +/* 546 */ NdrFcShort( 0xffc8 ), /* Offset= -56 (490) */ +/* 548 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 550 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 552 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 554 */ NdrFcShort( 0x0 ), /* 0 */ +/* 556 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 558 */ NdrFcShort( 0x0 ), /* 0 */ +/* 560 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 562 */ 0x0 , + 0x0, /* 0 */ +/* 564 */ NdrFcLong( 0x0 ), /* 0 */ +/* 568 */ NdrFcLong( 0x0 ), /* 0 */ +/* 572 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 576 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 578 */ 0x0 , + 0x0, /* 0 */ +/* 580 */ NdrFcLong( 0x0 ), /* 0 */ +/* 584 */ NdrFcLong( 0x0 ), /* 0 */ +/* 588 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 590 */ NdrFcShort( 0xff2c ), /* Offset= -212 (378) */ +/* 592 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 594 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 596 */ NdrFcShort( 0x8 ), /* 8 */ +/* 598 */ NdrFcShort( 0x0 ), /* 0 */ +/* 600 */ NdrFcShort( 0x6 ), /* Offset= 6 (606) */ +/* 602 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 604 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 606 */ + 0x11, 0x0, /* FC_RP */ +/* 608 */ NdrFcShort( 0xffc8 ), /* Offset= -56 (552) */ +/* 610 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 612 */ NdrFcShort( 0x0 ), /* 0 */ +/* 614 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 616 */ NdrFcShort( 0x0 ), /* 0 */ +/* 618 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 620 */ 0x0 , + 0x0, /* 0 */ +/* 622 */ NdrFcLong( 0x0 ), /* 0 */ +/* 626 */ NdrFcLong( 0x0 ), /* 0 */ +/* 630 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 634 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 636 */ 0x0 , + 0x0, /* 0 */ +/* 638 */ NdrFcLong( 0x0 ), /* 0 */ +/* 642 */ NdrFcLong( 0x0 ), /* 0 */ +/* 646 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 648 */ NdrFcShort( 0xff04 ), /* Offset= -252 (396) */ +/* 650 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 652 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 654 */ NdrFcShort( 0x8 ), /* 8 */ +/* 656 */ NdrFcShort( 0x0 ), /* 0 */ +/* 658 */ NdrFcShort( 0x6 ), /* Offset= 6 (664) */ +/* 660 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 662 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 664 */ + 0x11, 0x0, /* FC_RP */ +/* 666 */ NdrFcShort( 0xffc8 ), /* Offset= -56 (610) */ +/* 668 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 670 */ NdrFcShort( 0x4 ), /* 4 */ +/* 672 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 674 */ NdrFcShort( 0x0 ), /* 0 */ +/* 676 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 678 */ 0x0 , + 0x0, /* 0 */ +/* 680 */ NdrFcLong( 0x0 ), /* 0 */ +/* 684 */ NdrFcLong( 0x0 ), /* 0 */ +/* 688 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 690 */ + 0x48, /* FC_VARIABLE_REPEAT */ + 0x49, /* FC_FIXED_OFFSET */ +/* 692 */ NdrFcShort( 0x4 ), /* 4 */ +/* 694 */ NdrFcShort( 0x0 ), /* 0 */ +/* 696 */ NdrFcShort( 0x1 ), /* 1 */ +/* 698 */ NdrFcShort( 0x0 ), /* 0 */ +/* 700 */ NdrFcShort( 0x0 ), /* 0 */ +/* 702 */ 0x13, 0x0, /* FC_OP */ +/* 704 */ NdrFcShort( 0x1d8 ), /* Offset= 472 (1176) */ +/* 706 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 708 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 710 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 712 */ NdrFcShort( 0x8 ), /* 8 */ +/* 714 */ NdrFcShort( 0x0 ), /* 0 */ +/* 716 */ NdrFcShort( 0x6 ), /* Offset= 6 (722) */ +/* 718 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 720 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 722 */ + 0x11, 0x0, /* FC_RP */ +/* 724 */ NdrFcShort( 0xffc8 ), /* Offset= -56 (668) */ +/* 726 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 728 */ NdrFcLong( 0x2f ), /* 47 */ +/* 732 */ NdrFcShort( 0x0 ), /* 0 */ +/* 734 */ NdrFcShort( 0x0 ), /* 0 */ +/* 736 */ 0xc0, /* 192 */ + 0x0, /* 0 */ +/* 738 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 740 */ 0x0, /* 0 */ + 0x0, /* 0 */ +/* 742 */ 0x0, /* 0 */ + 0x46, /* 70 */ +/* 744 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 746 */ NdrFcShort( 0x1 ), /* 1 */ +/* 748 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 750 */ NdrFcShort( 0x4 ), /* 4 */ +/* 752 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 754 */ 0x0 , + 0x0, /* 0 */ +/* 756 */ NdrFcLong( 0x0 ), /* 0 */ +/* 760 */ NdrFcLong( 0x0 ), /* 0 */ +/* 764 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 766 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 768 */ NdrFcShort( 0x10 ), /* 16 */ +/* 770 */ NdrFcShort( 0x0 ), /* 0 */ +/* 772 */ NdrFcShort( 0xa ), /* Offset= 10 (782) */ +/* 774 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 776 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 778 */ NdrFcShort( 0xffcc ), /* Offset= -52 (726) */ +/* 780 */ 0x36, /* FC_POINTER */ + 0x5b, /* FC_END */ +/* 782 */ + 0x13, 0x20, /* FC_OP [maybenull_sizeis] */ +/* 784 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (744) */ +/* 786 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 788 */ NdrFcShort( 0x4 ), /* 4 */ +/* 790 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 792 */ NdrFcShort( 0x0 ), /* 0 */ +/* 794 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 796 */ 0x0 , + 0x0, /* 0 */ +/* 798 */ NdrFcLong( 0x0 ), /* 0 */ +/* 802 */ NdrFcLong( 0x0 ), /* 0 */ +/* 806 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 808 */ + 0x48, /* FC_VARIABLE_REPEAT */ + 0x49, /* FC_FIXED_OFFSET */ +/* 810 */ NdrFcShort( 0x4 ), /* 4 */ +/* 812 */ NdrFcShort( 0x0 ), /* 0 */ +/* 814 */ NdrFcShort( 0x1 ), /* 1 */ +/* 816 */ NdrFcShort( 0x0 ), /* 0 */ +/* 818 */ NdrFcShort( 0x0 ), /* 0 */ +/* 820 */ 0x13, 0x0, /* FC_OP */ +/* 822 */ NdrFcShort( 0xffc8 ), /* Offset= -56 (766) */ +/* 824 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 826 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 828 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 830 */ NdrFcShort( 0x8 ), /* 8 */ +/* 832 */ NdrFcShort( 0x0 ), /* 0 */ +/* 834 */ NdrFcShort( 0x6 ), /* Offset= 6 (840) */ +/* 836 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 838 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 840 */ + 0x11, 0x0, /* FC_RP */ +/* 842 */ NdrFcShort( 0xffc8 ), /* Offset= -56 (786) */ +/* 844 */ + 0x1d, /* FC_SMFARRAY */ + 0x0, /* 0 */ +/* 846 */ NdrFcShort( 0x8 ), /* 8 */ +/* 848 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 850 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 852 */ NdrFcShort( 0x10 ), /* 16 */ +/* 854 */ 0x8, /* FC_LONG */ + 0x6, /* FC_SHORT */ +/* 856 */ 0x6, /* FC_SHORT */ + 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 858 */ 0x0, /* 0 */ + NdrFcShort( 0xfff1 ), /* Offset= -15 (844) */ + 0x5b, /* FC_END */ +/* 862 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 864 */ NdrFcShort( 0x18 ), /* 24 */ +/* 866 */ NdrFcShort( 0x0 ), /* 0 */ +/* 868 */ NdrFcShort( 0xa ), /* Offset= 10 (878) */ +/* 870 */ 0x8, /* FC_LONG */ + 0x36, /* FC_POINTER */ +/* 872 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 874 */ NdrFcShort( 0xffe8 ), /* Offset= -24 (850) */ +/* 876 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 878 */ + 0x11, 0x0, /* FC_RP */ +/* 880 */ NdrFcShort( 0xfeb8 ), /* Offset= -328 (552) */ +/* 882 */ + 0x1b, /* FC_CARRAY */ + 0x0, /* 0 */ +/* 884 */ NdrFcShort( 0x1 ), /* 1 */ +/* 886 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 888 */ NdrFcShort( 0x0 ), /* 0 */ +/* 890 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 892 */ 0x0 , + 0x0, /* 0 */ +/* 894 */ NdrFcLong( 0x0 ), /* 0 */ +/* 898 */ NdrFcLong( 0x0 ), /* 0 */ +/* 902 */ 0x1, /* FC_BYTE */ + 0x5b, /* FC_END */ +/* 904 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 906 */ NdrFcShort( 0x8 ), /* 8 */ +/* 908 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 910 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 912 */ NdrFcShort( 0x4 ), /* 4 */ +/* 914 */ NdrFcShort( 0x4 ), /* 4 */ +/* 916 */ 0x13, 0x20, /* FC_OP [maybenull_sizeis] */ +/* 918 */ NdrFcShort( 0xffdc ), /* Offset= -36 (882) */ +/* 920 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 922 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 924 */ + 0x1b, /* FC_CARRAY */ + 0x1, /* 1 */ +/* 926 */ NdrFcShort( 0x2 ), /* 2 */ +/* 928 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 930 */ NdrFcShort( 0x0 ), /* 0 */ +/* 932 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 934 */ 0x0 , + 0x0, /* 0 */ +/* 936 */ NdrFcLong( 0x0 ), /* 0 */ +/* 940 */ NdrFcLong( 0x0 ), /* 0 */ +/* 944 */ 0x6, /* FC_SHORT */ + 0x5b, /* FC_END */ +/* 946 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 948 */ NdrFcShort( 0x8 ), /* 8 */ +/* 950 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 952 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 954 */ NdrFcShort( 0x4 ), /* 4 */ +/* 956 */ NdrFcShort( 0x4 ), /* 4 */ +/* 958 */ 0x13, 0x20, /* FC_OP [maybenull_sizeis] */ +/* 960 */ NdrFcShort( 0xffdc ), /* Offset= -36 (924) */ +/* 962 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 964 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 966 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 968 */ NdrFcShort( 0x4 ), /* 4 */ +/* 970 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 972 */ NdrFcShort( 0x0 ), /* 0 */ +/* 974 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 976 */ 0x0 , + 0x0, /* 0 */ +/* 978 */ NdrFcLong( 0x0 ), /* 0 */ +/* 982 */ NdrFcLong( 0x0 ), /* 0 */ +/* 986 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 988 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 990 */ NdrFcShort( 0x8 ), /* 8 */ +/* 992 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 994 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 996 */ NdrFcShort( 0x4 ), /* 4 */ +/* 998 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1000 */ 0x13, 0x20, /* FC_OP [maybenull_sizeis] */ +/* 1002 */ NdrFcShort( 0xffdc ), /* Offset= -36 (966) */ +/* 1004 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 1006 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1008 */ + 0x1b, /* FC_CARRAY */ + 0x7, /* 7 */ +/* 1010 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1012 */ 0x19, /* Corr desc: field pointer, FC_ULONG */ + 0x0, /* */ +/* 1014 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1016 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1018 */ 0x0 , + 0x0, /* 0 */ +/* 1020 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1024 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1028 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 1030 */ + 0x16, /* FC_PSTRUCT */ + 0x3, /* 3 */ +/* 1032 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1034 */ + 0x4b, /* FC_PP */ + 0x5c, /* FC_PAD */ +/* 1036 */ + 0x46, /* FC_NO_REPEAT */ + 0x5c, /* FC_PAD */ +/* 1038 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1040 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1042 */ 0x13, 0x20, /* FC_OP [maybenull_sizeis] */ +/* 1044 */ NdrFcShort( 0xffdc ), /* Offset= -36 (1008) */ +/* 1046 */ + 0x5b, /* FC_END */ + + 0x8, /* FC_LONG */ +/* 1048 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1050 */ + 0x15, /* FC_STRUCT */ + 0x3, /* 3 */ +/* 1052 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1054 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1056 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1058 */ + 0x1b, /* FC_CARRAY */ + 0x3, /* 3 */ +/* 1060 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1062 */ 0x7, /* Corr desc: FC_USHORT */ + 0x0, /* */ +/* 1064 */ NdrFcShort( 0xffd8 ), /* -40 */ +/* 1066 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1068 */ 0x0 , + 0x0, /* 0 */ +/* 1070 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1074 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1078 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1080 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (1050) */ +/* 1082 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1084 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1086 */ NdrFcShort( 0x28 ), /* 40 */ +/* 1088 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (1058) */ +/* 1090 */ NdrFcShort( 0x0 ), /* Offset= 0 (1090) */ +/* 1092 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1094 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1096 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1098 */ NdrFcShort( 0xfd5c ), /* Offset= -676 (422) */ +/* 1100 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1102 */ + 0x13, 0x0, /* FC_OP */ +/* 1104 */ NdrFcShort( 0xfeae ), /* Offset= -338 (766) */ +/* 1106 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1108 */ 0x1, /* FC_BYTE */ + 0x5c, /* FC_PAD */ +/* 1110 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1112 */ 0x6, /* FC_SHORT */ + 0x5c, /* FC_PAD */ +/* 1114 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1116 */ 0x8, /* FC_LONG */ + 0x5c, /* FC_PAD */ +/* 1118 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1120 */ 0xb, /* FC_HYPER */ + 0x5c, /* FC_PAD */ +/* 1122 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1124 */ 0xa, /* FC_FLOAT */ + 0x5c, /* FC_PAD */ +/* 1126 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1128 */ 0xc, /* FC_DOUBLE */ + 0x5c, /* FC_PAD */ +/* 1130 */ + 0x13, 0x0, /* FC_OP */ +/* 1132 */ NdrFcShort( 0xfd04 ), /* Offset= -764 (368) */ +/* 1134 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1136 */ NdrFcShort( 0xfd06 ), /* Offset= -762 (374) */ +/* 1138 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1140 */ NdrFcShort( 0xfd06 ), /* Offset= -762 (378) */ +/* 1142 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1144 */ NdrFcShort( 0xfd14 ), /* Offset= -748 (396) */ +/* 1146 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1148 */ NdrFcShort( 0xfd22 ), /* Offset= -734 (414) */ +/* 1150 */ + 0x13, 0x10, /* FC_OP [pointer_deref] */ +/* 1152 */ NdrFcShort( 0x2 ), /* Offset= 2 (1154) */ +/* 1154 */ + 0x13, 0x0, /* FC_OP */ +/* 1156 */ NdrFcShort( 0x14 ), /* Offset= 20 (1176) */ +/* 1158 */ + 0x15, /* FC_STRUCT */ + 0x7, /* 7 */ +/* 1160 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1162 */ 0x6, /* FC_SHORT */ + 0x1, /* FC_BYTE */ +/* 1164 */ 0x1, /* FC_BYTE */ + 0x8, /* FC_LONG */ +/* 1166 */ 0xb, /* FC_HYPER */ + 0x5b, /* FC_END */ +/* 1168 */ + 0x13, 0x0, /* FC_OP */ +/* 1170 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1158) */ +/* 1172 */ + 0x13, 0x8, /* FC_OP [simple_pointer] */ +/* 1174 */ 0x2, /* FC_CHAR */ + 0x5c, /* FC_PAD */ +/* 1176 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x7, /* 7 */ +/* 1178 */ NdrFcShort( 0x20 ), /* 32 */ +/* 1180 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1182 */ NdrFcShort( 0x0 ), /* Offset= 0 (1182) */ +/* 1184 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1186 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1188 */ 0x6, /* FC_SHORT */ + 0x6, /* FC_SHORT */ +/* 1190 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1192 */ NdrFcShort( 0xfb94 ), /* Offset= -1132 (60) */ +/* 1194 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1196 */ 0xb4, /* FC_USER_MARSHAL */ 0x83, /* 131 */ -/* 62 */ NdrFcShort( 0x0 ), /* 0 */ -/* 64 */ NdrFcShort( 0x4 ), /* 4 */ -/* 66 */ NdrFcShort( 0x0 ), /* 0 */ -/* 68 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (56) */ +/* 1198 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1200 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1202 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1204 */ NdrFcShort( 0xfb84 ), /* Offset= -1148 (56) */ +/* 1206 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 1208 */ NdrFcShort( 0x2 ), /* Offset= 2 (1210) */ +/* 1210 */ 0xb4, /* FC_USER_MARSHAL */ + 0x83, /* 131 */ +/* 1212 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1214 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1216 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1218 */ NdrFcShort( 0xfcb4 ), /* Offset= -844 (374) */ 0x0 } @@ -697,6 +1460,12 @@ static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TA ,BSTR_UserMarshal ,BSTR_UserUnmarshal ,BSTR_UserFree + }, + { + VARIANT_UserSize + ,VARIANT_UserMarshal + ,VARIANT_UserUnmarshal + ,VARIANT_UserFree } }; @@ -730,11 +1499,12 @@ static const unsigned short IWeChatRobot_FormatStringOffsetTable[] = 276, 330, 366, - 408, + 402, 444, 480, - 522, - 558 + 516, + 558, + 594 }; static const MIDL_STUBLESS_PROXY_INFO IWeChatRobot_ProxyInfo = @@ -758,7 +1528,7 @@ static const MIDL_SERVER_INFO IWeChatRobot_ServerInfo = 0, 0, 0}; -CINTERFACE_PROXY_VTABLE(21) _IWeChatRobotProxyVtbl = +CINTERFACE_PROXY_VTABLE(22) _IWeChatRobotProxyVtbl = { &IWeChatRobot_ProxyInfo, &IID_IWeChatRobot, @@ -777,6 +1547,7 @@ CINTERFACE_PROXY_VTABLE(21) _IWeChatRobotProxyVtbl = (void *) (INT_PTR) -1 /* IWeChatRobot::CSendArticle */ , (void *) (INT_PTR) -1 /* IWeChatRobot::CSendCard */ , (void *) (INT_PTR) -1 /* IWeChatRobot::CGetFriendList */ , + (void *) (INT_PTR) -1 /* IWeChatRobot::CGetFriendListString */ , (void *) (INT_PTR) -1 /* IWeChatRobot::CGetWxUserInfo */ , (void *) (INT_PTR) -1 /* IWeChatRobot::CGetSelfInfo */ , (void *) (INT_PTR) -1 /* IWeChatRobot::CCheckFriendStatusInit */ , @@ -805,6 +1576,7 @@ static const PRPC_STUB_FUNCTION IWeChatRobot_table[] = NdrStubCall2, NdrStubCall2, NdrStubCall2, + NdrStubCall2, NdrStubCall2 }; @@ -812,7 +1584,7 @@ CInterfaceStubVtbl _IWeChatRobotStubVtbl = { &IID_IWeChatRobot, &IWeChatRobot_ServerInfo, - 21, + 22, &IWeChatRobot_table[-3], CStdStubBuffer_DELEGATING_METHODS }; diff --git a/CWeChatRobot/pch.cpp b/CWeChatRobot/pch.cpp index 1fe5b20..9de87cd 100644 --- a/CWeChatRobot/pch.cpp +++ b/CWeChatRobot/pch.cpp @@ -169,17 +169,4 @@ wstring GetComWorkPath() { int pos = wpath.find_last_of(L"\\"); wpath = wpath.substr(0,pos); return wpath; -} - -wstring wreplace(wstring source, wchar_t replaced, wstring replaceto) { - wstring temp = L""; - wchar_t* buffer = (wchar_t*)source.c_str(); - for (unsigned int i = 0; i < source.length(); i++) { - if (buffer[i] == replaced) { - temp += replaceto; - continue; - } - temp += buffer[i]; - } - return temp; } \ No newline at end of file diff --git a/CWeChatRobot/pch.h b/CWeChatRobot/pch.h index cc930da..c4fd668 100644 --- a/CWeChatRobot/pch.h +++ b/CWeChatRobot/pch.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #pragma comment(lib, "comsuppw.lib") @@ -28,6 +29,10 @@ #include "robotdata.h" using namespace std; +struct testStruct { + DWORD type; + wchar_t* desc; +}; bool isFileExists_stat(string& name); DWORD GetWeChatRobotBase(); @@ -35,5 +40,4 @@ DWORD GetWeChatPid(); DWORD StartRobotService(); DWORD StopRobotService(); BOOL CreateConsole(); -wstring GetComWorkPath(); -wstring wreplace(wstring source, wchar_t replaced, wstring replaceto); \ No newline at end of file +wstring GetComWorkPath(); \ No newline at end of file diff --git a/DWeChatRobot/SelfInfo.cpp b/DWeChatRobot/SelfInfo.cpp index 9d95de8..5d0be3b 100644 --- a/DWeChatRobot/SelfInfo.cpp +++ b/DWeChatRobot/SelfInfo.cpp @@ -8,6 +8,7 @@ struct SelfInfoStruct { DWORD length; } ret; + DWORD GetSelfInfoRemote() { DWORD WeChatWinBase = GetWeChatWinBase(); vector SelfInfoAddr = { diff --git a/README.md b/README.md index a1186b8..af1cb38 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,14 @@ PC寰俊鏈哄櫒浜猴紝瀹炵幇鑾峰彇閫氳褰曘佸彂閫佹枃鏈佸浘鐗囥佹枃浠躲亁ml # 鍘熺悊 閫氳繃閫嗗悜PC寰俊锛屽畾浣嶅埌鍏抽敭CALL锛宒ll鍐呰仈姹囩紪璋冪敤 娉ㄥ唽32浣岰OM缁勪欢锛屼緵64浣/32浣嶈繘绋嬪閮ㄨ皟鐢 +# 鐩綍璇存槑 +`./CWeChatRobot`锛欳OM缁勪欢鐨勫疄鐜颁唬鐮 +`./DWeChatRobot`锛氭敞鍏ョ殑DLL瀹炵幇浠g爜 +`./wxRobot`: 鍖呭惈C#鐨勮皟鐢ㄧず渚 +`./wxRobot.py`锛歱ython绀轰緥鏂囦欢 +`./Release/CWeChatRobot.exe`锛氱紪璇戠殑COM缁勪欢 +`./Release/DWeChatRobot.dll`锛氱紪璇戠殑鍔ㄦ佸簱 +`./Release/WeChatTools.exe`锛氱敤涓庤皟璇曟椂娉ㄥ叆鎴栧嵏杞紻LL绋嬪簭锛屽叿浣撳弬鍔犵浉鍏充唬鐮 # 娉ㄥ唽COM 浠ョ鐞嗗憳鏉冮檺鎵ц浠ヤ笅鍛戒护锛 ```shell @@ -19,25 +27,10 @@ CWeChatRobot.exe /regserver CWeChatRobot.exe /unregserver ``` # 璋冪敤 -Python锛 +**Python锛** 鍙傝僛wxRobot.py](/wxRobot.py) -C#锛堝弬鑰冨涓嬩唬鐮侊級锛 -```csharp -System.Type wxProtId = Type.GetTypeFromProgID("WeChatRobot.CWeChatRobot"); -if (wxProtId == null) - return; -string workpath = System.AppDomain.CurrentDomain.BaseDirectory; -string basePath = workpath.Replace("wxRobot\\bin\\Release\\",""); -dynamic wx = Activator.CreateInstance(wxProtId); -wx.CStartRobotService(); -wx.CSendText("filehelper", "鏉ヨ嚜C鑹硅壒鐨勬秷鎭"); -wx.CSendImage("filehelper", basePath + "test\\娴嬭瘯鍥剧墖.png"); -wx.CSendFile("filehelper", basePath + "test\\娴嬭瘯鏂囦欢"); -wx.CSendArticle("filehelper","PC寰俊閫嗗悜--鑾峰彇閫氳褰", "纭畾涓嶆潵鐪嬬湅涔?", "https://www.ljczero.top/article/2022/3/13/133.html"); -string selfinfo = wx.CGetSelfInfo(); -Console.WriteLine(selfinfo); -wx.CStopRobotService(); -``` +**C#锛** +鍙傝僛Program.cs](/wxRobot/Program.cs) # 鏇村鍔熻兘 鐩墠娌℃湁娣诲姞鏇村鍔熻兘鐨勮鍒 宸叉壘鍒板涓嬪姛鑳界殑CALL鎴朒OOK浣嶇疆锛 @@ -49,10 +42,15 @@ wx.CStopRobotService(); 6. 寰俊Duilib鐣岄潰xml鏂囦欢 鏆傛椂娌℃湁绌洪棽鏃堕棿缁х画寮鍙戯紝濡傛灉鎯冲紑鍙戠浉鍏冲姛鑳借鍙戦偖浠跺埌ljc545w@qq.com +**涔熸杩庢偍鎻愪氦PR** # 宸茬煡BUG ~~鑾峰彇涓汉淇℃伅鐨勬帴鍙d笉鑳藉緢濂界殑宸ヤ綔锛屽洜涓洪渶瑕佸垽鏂暟鎹槸鍚︽槸涓涓寚閽堛倊~ ~~浣跨敤璇ユ帴鍙e皢瀵艰嚧寰俊宕╂簝銆倊~ 宸插涓汉淇℃伅鎺ュ彛鍋氫簡绠鍗曠殑淇锛屽鏋滆繕鏈夐棶棰樺彲鎶ssue鎴栨悳绱㈡姤閿欒В鍐炽 +# 2022.04.01鏇存柊 +1. 浣跨敤SAFEARRAY杩斿洖閫氳褰曞垪琛紝鍙纭樉绀哄ソ鍙嬫樀绉颁腑鐨勭壒娈婄鍙 +2. README涓坊鍔犵洰褰曡鏄 +3. 鏇存柊C#绀轰緥浠g爜锛屾坊鍔犲ソ鍙嬪垪琛ㄧ殑閬嶅巻绀轰緥 # 鎵撹祻浣滆 璇风粰浣滆呬竴涓猻tar锛屾劅璋㈡劅璋 # 鍏嶈矗澹版槑 diff --git a/Release/CWeChatRobot.exe b/Release/CWeChatRobot.exe index f9c8f5c114ab3987854b66369300f9b19dc06da1..3789330b5058df51a8f8da512088e49af8ad45ba 100644 GIT binary patch delta 33885 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 Ee^k*wX8-^I delta 33108 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 EKRGFe%>V!Z diff --git a/wxRobot.py b/wxRobot.py index ab60803..06e8574 100644 --- a/wxRobot.py +++ b/wxRobot.py @@ -6,6 +6,7 @@ Created on Thu Feb 24 16:19:48 2022 """ # Before use,execute `CWeChatRebot.exe /regserver` in cmd by admin user +# need `pip install comtypes` import comtypes.client import ast @@ -59,9 +60,11 @@ class WeChatRobot(): return self.robot.CStopRobotService() def GetAddressBook(self): - AddressBookString = self.robot.CGetFriendList() - AddressBookString = AddressBookString.replace("\n","\\n") - self.AddressBook = ast.literal_eval(AddressBookString) + try: + FriendTuple = self.robot.CGetFriendList() + self.AddressBook = [dict(i) for i in list(FriendTuple)] + except IndexError: + self.AddressBook = [] return self.AddressBook def GetFriendList(self): diff --git a/wxRobot/Program.cs b/wxRobot/Program.cs index c37eb18..01ddad0 100644 --- a/wxRobot/Program.cs +++ b/wxRobot/Program.cs @@ -4,7 +4,7 @@ namespace wxRobot { class Program { - static void Main(string[] args) + static void Main() { System.Type wxProtId = Type.GetTypeFromProgID("WeChatRobot.CWeChatRobot"); if (wxProtId == null) @@ -19,6 +19,11 @@ namespace wxRobot wx.CSendArticle("filehelper","PC寰俊閫嗗悜--鑾峰彇閫氳褰", "纭畾涓嶆潵鐪嬬湅涔?", "https://www.ljczero.top/article/2022/3/13/133.html"); string selfinfo = wx.CGetSelfInfo(); Console.WriteLine(selfinfo); + System.Object[,,] FriendList = wx.CGetFriendList(); + int length = FriendList.GetLength(0); + for (int i = 0; i < 1/*length*/; i++) { + Console.WriteLine(FriendList[i, 0, 1]); + } wx.CStopRobotService(); } } diff --git a/wxRobot/bin/Release/wxRobot.exe b/wxRobot/bin/Release/wxRobot.exe index dcf63272f07923efa65a339ea38ee74666327eb7..0cbc32b2b82f4af7651534b081f330de847637d3 100644 GIT binary patch delta 1725 zcmZvdX>3$g6vzMfzBi9I({+{(76zOywgX*ghl&MTptJ&wtz~IVfeKx%2z2N$ve?k6 zl~ggLwZ8a8iFMc7p5TIb+5xgHi<&dWgn$5Tfliq6p5fSEeb`*`BvnHr#XVU*0M>s(4Nnc(g1^=04%59 zU*@cnrkHuBMH;DYz%0oRo=pMfI_J!+a1r1cQtF_>Krvly4RW1kNmOi4NQm!3~(2SK3Y3^XGlzl)oTae}v14 zNNOz`@gc{{q?Wg)rM`~+N%|KYuN6oJr0r%BZi~eTLM;I-7i+~i*i?wqA%jiDSVrBe zxblHd<(=L_RGv31OlUqSju{!a$utY2BA$ReSVgn>exBWBb1q+qgd<3TCbq~ z14meI-a?hulT|uUr=2=&H!vx}i4?PiPb?GNI@+zHJGGu8ev&&y8I%mIlPVEMz zNWrh76n?(XrI?FsS&BU5l0{fVF4lZlvsUSKcoYvZuu)4}G`rA9We4_=dvHj0VE|vt zIoQiey^Tqn#$~v;u=_>1SRvMmHmBU}udV0t4aS5%uaYsjriB z*quyWzI)rYN>r(C>6GQ^liH4rO-o#T=y{Xlrv^Lh))sa9`=hHo12{4G}j(9J- zefu}WI%5eiVQ)`7ftq-{ zs{eNVS-wV*wj)#g@p6E_eQXPYwxJ4 zmO7M=u~qO}UlDNL@a4|$`{3lIvw!YhIrfE1?%aC%lB#swvbNfyqPE)DF6XMR*mwNy sKLaB;sqFB0PEbxqou&Q-PKW=5Gvq%ql^(e5k{6;=-Z{UB@v>Qe0h*U6!vFvP delta 1373 zcmY+EU2IfU5Xb*>?(OY%TW`DD?WUh}+by=Rwe2mW7ObM|qOE|X*|rgdWcy*XqD4zp z8jxKBS~M|XJpwTyp=u0?X@a_m4~l6-9yIvUAbt|5%7aP}qlt-)56+oZqbGZRGv`0E zb3X1lH`A5rJaV{x|IF|_mfHgAQAlk-kOkk8IP7KL9CV94pw|eu11Ivbb)`iqposg2 zIJ;BVsb;;M8vPFiSc>oy)GttsLi$~5q)PoQ)kor7!L)9E6!P#^6!?rQSllDP(cgvI z^fqNv&+7xqa(Q(7rnM0hn)reAtEy?Gkq#K_s|5Vw`F2;ayLyFciW$qLb;@bD^)U;G z9sn+}P1)=xCnv_nAKYWc@8SwR#o9m;2|rN6TJ)}go&?)|?q~FePAFZbd%bM|$BnEw=x5)-F5#WR zUzJfV3ZJ%&|0U}#R#?53i(fj#JjwK9+?r#_v3t2t7$Z+Xa}m z2mz*p3Z@^cm?iLp>x6d*dxU*yG24Yh%rcCL|G02Um}NS69*0oJ?6({72^Li=bECZ$ z^LP)P_zGun8%KXe0zaXaHseohw32-2YiWuZv!6wXbF-)xrCO8*r04NA%Qf}~XqG^; z1Weh>Tw=X_9bKY#iJlNYA^sN5sil5l1=-}$GcwT@6yi9wpcFIAD$FsX_?Q{PMdlje zEy8$O0-Ny-2a+P)FC4+|tn5OKYQY|?RwMlS_Nq!e%4>WDr|=Oj@QW>=Fg1~#`R53m z7h+mF-y;6~+dAl&`2W{R`6Td#{I9ryJaZxBnnREI)44zVDV0mz&_#iv3BHo?-Qy!e zljt3O_<<2U>sILVZf)+G`#tGvB`ZDa#L)|dCl|I%kDWXB+u2WFh8-dDSrJekJAr`d zx(3S0w}PA8>fAknFzMHV_c?hWs&RE$>D6*z)2aPmm}!_}mE`9Pf40s9bvRTXU3jUX zkrwOYxxUj?-odY*GN(DQe#c<4z0F$}kHvOuozjD$X7}dh4;Y8h=jkJ%N)`9?Y-pAK VJT#kg!;5)p)XN2`uT!=y|8M$O>Ae5| -- GitLab