Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
011231
ComWeChatRobot
提交
3b38f66f
C
ComWeChatRobot
项目概览
011231
/
ComWeChatRobot
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ComWeChatRobot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3b38f66f
编写于
4月 01, 2022
作者:
L
ljc545w
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化获取通讯录接口
上级
35663e4f
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
1036 addition
and
155 deletion
+1036
-155
CWeChatRobot/FriendList.cpp
CWeChatRobot/FriendList.cpp
+81
-7
CWeChatRobot/FriendList.h
CWeChatRobot/FriendList.h
+2
-1
CWeChatRobot/WeChatRobot.cpp
CWeChatRobot/WeChatRobot.cpp
+16
-2
CWeChatRobot/WeChatRobot.h
CWeChatRobot/WeChatRobot.h
+2
-1
CWeChatRobot/WeChatRobotCOM.idl
CWeChatRobot/WeChatRobotCOM.idl
+8
-7
CWeChatRobot/WeChatRobotCOM_i.h
CWeChatRobot/WeChatRobotCOM_i.h
+20
-0
CWeChatRobot/WeChatRobotCOM_p.c
CWeChatRobot/WeChatRobotCOM_p.c
+872
-100
CWeChatRobot/pch.cpp
CWeChatRobot/pch.cpp
+0
-13
CWeChatRobot/pch.h
CWeChatRobot/pch.h
+6
-2
DWeChatRobot/SelfInfo.cpp
DWeChatRobot/SelfInfo.cpp
+1
-0
README.md
README.md
+16
-18
Release/CWeChatRobot.exe
Release/CWeChatRobot.exe
+0
-0
wxRobot.py
wxRobot.py
+6
-3
wxRobot/Program.cs
wxRobot/Program.cs
+6
-1
wxRobot/bin/Release/wxRobot.exe
wxRobot/bin/Release/wxRobot.exe
+0
-0
未找到文件。
CWeChatRobot/FriendList.cpp
浏览文件 @
3b38f66f
...
...
@@ -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
<
wstring
>
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
<
wstring
>
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
;
...
...
CWeChatRobot/FriendList.h
浏览文件 @
3b38f66f
...
...
@@ -2,4 +2,5 @@
#include<windows.h>
#include<iostream>
using
namespace
std
;
std
::
wstring
GetFriendList
();
\ No newline at end of file
SAFEARRAY
*
GetFriendList
();
std
::
wstring
GetFriendListString
();
\ No newline at end of file
CWeChatRobot/WeChatRobot.cpp
浏览文件 @
3b38f66f
...
...
@@ -76,9 +76,23 @@ STDMETHODIMP CWeChatRobot::CSendCard(BSTR receiver, BSTR sharedwxid, BSTR nickna
/*
* 参数1:预返回的值,调用时无需提供
* 返回一个三维数组,python的comtypes包会将其解析为元组
*/
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:预返回的值,调用时无需提供
返回构造好的json串,在反序列化时需考虑好友信息中是否存在json字符
(考虑到从SAFEARRAY转换到适当变量可能较为繁琐,故保留此接口)
*/
STDMETHODIMP
CWeChatRobot
::
CGetFriendListString
(
BSTR
*
__result
)
{
string
smessage
=
_com_util
::
ConvertBSTRToString
((
BSTR
)(
GetFriendListString
().
c_str
()));
*
__result
=
_com_util
::
ConvertStringToBSTR
(
smessage
.
c_str
());
return
S_OK
;
}
...
...
CWeChatRobot/WeChatRobot.h
浏览文件 @
3b38f66f
...
...
@@ -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
);
...
...
CWeChatRobot/WeChatRobotCOM.idl
浏览文件 @
3b38f66f
...
...
@@ -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
(
721
abb35
-
141
a
-
4
aa2
-
94
f2
-
762
e2833fa6c
),
...
...
CWeChatRobot/WeChatRobotCOM_i.h
浏览文件 @
3b38f66f
...
...
@@ -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
...
...
CWeChatRobot/WeChatRobotCOM_p.c
浏览文件 @
3b38f66f
...
...
@@ -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
(
0x
2113
),
/* Flags: must size, must free, out, simple ref, srv alloc size=8
*/
/* 354 */
NdrFcShort
(
0x
4113
),
/* Flags: must size, must free, out, simple ref, srv alloc size=16
*/
/* 356 */
NdrFcShort
(
0x4
),
/* x86 Stack size/offset = 4 */
/* 358 */
NdrFcShort
(
0x
3c
),
/* Type Offset=60
*/
/* 358 */
NdrFcShort
(
0x
4ac
),
/* 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 CGet
WxUserInfo
*/
/* Procedure CGet
FriendListString
*/
/* 366 */
0x33
,
/* FC_AUTO_HANDLE */
0x6c
,
/* Old Flags: object, Oi2 */
/* 368 */
NdrFcLong
(
0x0
),
/* 0 */
/* 372 */
NdrFcShort
(
0xf
),
/* 15 */
/* 374 */
NdrFcShort
(
0x
10
),
/* x86 Stack size/offset = 16
*/
/* 374 */
NdrFcShort
(
0x
c
),
/* x86 Stack size/offset = 12
*/
/* 376 */
NdrFcShort
(
0x0
),
/* 0 */
/* 378 */
NdrFcShort
(
0x8
),
/* 8 */
/* 380 */
0x4
7
,
/* Oi2 Flags: srv must size, clt
must size, has return, has ext, */
0x
3
,
/* 3
*/
/* 380 */
0x4
5
,
/* Oi2 Flags: srv
must size, has return, has ext, */
0x
2
,
/* 2
*/
/* 382 */
0x8
,
/* 8 */
0x4
7
,
/* Ext Flags: new corr desc, clt corr check, srv
corr check, has range on conformance */
0x4
3
,
/* Ext Flags: new corr desc, clt
corr check, has range on conformance */
/* 384 */
NdrFcShort
(
0x1
),
/* 1 */
/* 386 */
NdrFcShort
(
0x
1
),
/* 1
*/
/* 386 */
NdrFcShort
(
0x
0
),
/* 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 */
/* 39
6
*/
NdrFcShort
(
0x2113
),
/* Flags: must size, must free, out, simple ref, srv alloc size=8 */
/* 39
8 */
NdrFcShort
(
0x8
),
/* x86 Stack size/offset = 8
*/
/*
400 */
NdrFcShort
(
0x3c
),
/* Type Offset=6
0 */
/* 39
0
*/
NdrFcShort
(
0x2113
),
/* Flags: must size, must free, out, simple ref, srv alloc size=8 */
/* 39
2 */
NdrFcShort
(
0x4
),
/* x86 Stack size/offset = 4
*/
/*
394 */
NdrFcShort
(
0x4ba
),
/* Type Offset=121
0 */
/* Return value */
/*
402
*/
NdrFcShort
(
0x70
),
/* Flags: out, return, base type, */
/*
404 */
NdrFcShort
(
0xc
),
/* x86 Stack size/offset = 12
*/
/* 40
6
*/
0x8
,
/* FC_LONG */
/*
396
*/
NdrFcShort
(
0x70
),
/* Flags: out, return, base type, */
/*
398 */
NdrFcShort
(
0x8
),
/* x86 Stack size/offset = 8
*/
/* 40
0
*/
0x8
,
/* FC_LONG */
0x0
,
/* 0 */
/* Procedure CGet
Self
Info */
/* Procedure CGet
WxUser
Info */
/* 40
8
*/
0x33
,
/* FC_AUTO_HANDLE */
/* 40
2
*/
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
(
0x
4
),
/* x86 Stack size/offset = 4
*/
/* 436 */
NdrFcShort
(
0x
3c
),
/* Type Offset=6
0 */
/* 434 */
NdrFcShort
(
0x
8
),
/* x86 Stack size/offset = 8
*/
/* 436 */
NdrFcShort
(
0x
4ba
),
/* Type Offset=121
0 */
/* Return value */
/* 438 */
NdrFcShort
(
0x70
),
/* Flags: out, return, base type, */
/* 440 */
NdrFcShort
(
0x
8
),
/* x86 Stack size/offset = 8
*/
/* 440 */
NdrFcShort
(
0x
c
),
/* x86 Stack size/offset = 12
*/
/* 442 */
0x8
,
/* FC_LONG */
0x0
,
/* 0 */
/* Procedure C
CheckFriendStatusInit
*/
/* Procedure C
GetSelfInfo
*/
/* 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
(
0x
24
),
/* 36
*/
/* 458 */
0x4
4
,
/* Oi2 Flags:
has return, has ext, */
/* 456 */
NdrFcShort
(
0x
8
),
/* 8
*/
/* 458 */
0x4
5
,
/* Oi2 Flags: srv must size,
has return, has ext, */
0x2
,
/* 2 */
/* 460 */
0x8
,
/* 8 */
0x4
1
,
/* Ext Flags: new corr desc
, has range on conformance */
/* 462 */
NdrFcShort
(
0x
0
),
/* 0
*/
0x4
3
,
/* Ext Flags: new corr desc, clt corr check
, has range on conformance */
/* 462 */
NdrFcShort
(
0x
1
),
/* 1
*/
/* 464 */
NdrFcShort
(
0x0
),
/* 0 */
/* 466 */
NdrFcShort
(
0x0
),
/* 0 */
/* Parameter __result */
/* 468 */
NdrFcShort
(
0x21
50
),
/* Flags: out, base type
, simple ref, srv alloc size=8 */
/* 468 */
NdrFcShort
(
0x21
13
),
/* 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 CCheckFriendStatus
Init
*/
/* 480 */
0x33
,
/* FC_AUTO_HANDLE */
0x6c
,
/* Old Flags: object, Oi2 */
/* 482 */
NdrFcLong
(
0x0
),
/* 0 */
/* 486 */
NdrFcShort
(
0x12
),
/* 18 */
/* 488 */
NdrFcShort
(
0x
10
),
/* x86 Stack size/offset = 16
*/
/* 488 */
NdrFcShort
(
0x
c
),
/* x86 Stack size/offset = 12
*/
/* 490 */
NdrFcShort
(
0x0
),
/* 0 */
/* 492 */
NdrFcShort
(
0x24
),
/* 36 */
/* 494 */
0x4
6
,
/* Oi2 Flags: clt must size,
has return, has ext, */
0x
3
,
/* 3
*/
/* 494 */
0x4
4
,
/* Oi2 Flags:
has return, has ext, */
0x
2
,
/* 2
*/
/* 496 */
0x8
,
/* 8 */
0x4
5
,
/* Ext Flags: new corr desc, srv corr check
, has range on conformance */
0x4
1
,
/* Ext Flags: new corr desc
, has range on conformance */
/* 498 */
NdrFcShort
(
0x0
),
/* 0 */
/* 500 */
NdrFcShort
(
0x
1
),
/* 1
*/
/* 500 */
NdrFcShort
(
0x
0
),
/* 0
*/
/* 502 */
NdrFcShort
(
0x0
),
/* 0 */
/* Parameter
wxid
*/
/* Parameter
__result
*/
/* 504 */
NdrFcShort
(
0x
8b
),
/* Flags: must size, must free, in, by val,
*/
/* 504 */
NdrFcShort
(
0x
2150
),
/* 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
(
0x
2150
),
/* Flags: out, base type, simple ref, srv alloc size=8
*/
/* 510 */
NdrFcShort
(
0x
70
),
/* 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 */
/* P
rocedure CCheckFriendStatusFinish
*/
/* P
arameter 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
(
0x
4
),
/* x86 Stack size/offset = 4
*/
/* 548 */
NdrFcShort
(
0x
8
),
/* x86 Stack size/offset = 8
*/
/* 550 */
0x8
,
/* FC_LONG */
0x0
,
/* 0 */
/* Return value */
/* 552 */
NdrFcShort
(
0x70
),
/* Flags: out, return, base type, */
/* 554 */
NdrFcShort
(
0x
8
),
/* x86 Stack size/offset = 8
*/
/* 554 */
NdrFcShort
(
0x
c
),
/* x86 Stack size/offset = 12
*/
/* 556 */
0x8
,
/* FC_LONG */
0x0
,
/* 0 */
/* Procedure C
GetComWorkPat
h */
/* Procedure C
CheckFriendStatusFinis
h */
/* 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
(
0x
8
),
/* 8
*/
/* 572 */
0x4
5
,
/* Oi2 Flags: srv must size,
has return, has ext, */
/* 570 */
NdrFcShort
(
0x
24
),
/* 36
*/
/* 572 */
0x4
4
,
/* Oi2 Flags:
has return, has ext, */
0x2
,
/* 2 */
/* 574 */
0x8
,
/* 8 */
0x4
3
,
/* Ext Flags: new corr desc, clt corr check
, has range on conformance */
/* 576 */
NdrFcShort
(
0x
1
),
/* 1
*/
0x4
1
,
/* Ext Flags: new corr desc
, has range on conformance */
/* 576 */
NdrFcShort
(
0x
0
),
/* 0
*/
/* 578 */
NdrFcShort
(
0x0
),
/* 0 */
/* 580 */
NdrFcShort
(
0x0
),
/* 0 */
/* Parameter __result */
/* 582 */
NdrFcShort
(
0x21
13
),
/* Flags: must size, must free, out
, simple ref, srv alloc size=8 */
/* 582 */
NdrFcShort
(
0x21
50
),
/* 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
(
0x
6
),
/* Offset= 6 (60
) */
/* 54 */
NdrFcShort
(
0x
476
),
/* 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
,
40
8
,
40
2
,
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
(
2
1
)
_IWeChatRobotProxyVtbl
=
CINTERFACE_PROXY_VTABLE
(
2
2
)
_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
,
2
1
,
2
2
,
&
IWeChatRobot_table
[
-
3
],
CStdStubBuffer_DELEGATING_METHODS
};
...
...
CWeChatRobot/pch.cpp
浏览文件 @
3b38f66f
...
...
@@ -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
CWeChatRobot/pch.h
浏览文件 @
3b38f66f
...
...
@@ -21,6 +21,7 @@
#include <tchar.h>
#include <sys/stat.h>
#include <direct.h>
#include <vector>
#include <comutil.h>
#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
DWeChatRobot/SelfInfo.cpp
浏览文件 @
3b38f66f
...
...
@@ -8,6 +8,7 @@ struct SelfInfoStruct {
DWORD
length
;
}
ret
;
DWORD
GetSelfInfoRemote
()
{
DWORD
WeChatWinBase
=
GetWeChatWinBase
();
vector
<
DWORD
>
SelfInfoAddr
=
{
...
...
README.md
浏览文件 @
3b38f66f
...
...
@@ -10,6 +10,14 @@ PC微信机器人,实现获取通讯录、发送文本、图片、文件、xml
# 原理
通过逆向PC微信,定位到关键CALL,dll内联汇编调用
注册32位COM组件,供64位/32位进程外部调用
# 目录说明
`./CWeChatRobot`
:COM组件的实现代码
`./DWeChatRobot`
:注入的DLL实现代码
`./wxRobot`
: 包含C#的调用示例
`./wxRobot.py`
:python示例文件
`./Release/CWeChatRobot.exe`
:编译的COM组件
`./Release/DWeChatRobot.dll`
:编译的动态库
`./Release/WeChatTools.exe`
:用与调试时注入或卸载DLL程序,具体参加相关代码
# 注册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或HOOK位置:
...
...
@@ -49,10 +42,15 @@ wx.CStopRobotService();
6.
微信Duilib界面xml文件
暂时没有空闲时间继续开发,如果想开发相关功能请发邮件到ljc545w@qq.com
**也欢迎您提交PR**
# 已知BUG
~~获取个人信息的接口不能很好的工作,因为需要判断数据是否是一个指针。~~
~~使用该接口将导致微信崩溃。~~
已对个人信息接口做了简单的修复,如果还有问题可报issue或搜索报错解决。
# 2022.04.01更新
1.
使用SAFEARRAY返回通讯录列表,可正确显示好友昵称中的特殊符号
2.
README中添加目录说明
3.
更新C#示例代码,添加好友列表的遍历示例
# 打赏作者
请给作者一个star,感谢感谢
# 免责声明
...
...
Release/CWeChatRobot.exe
浏览文件 @
3b38f66f
无法预览此类型文件
wxRobot.py
浏览文件 @
3b38f66f
...
...
@@ -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
):
...
...
wxRobot/Program.cs
浏览文件 @
3b38f66f
...
...
@@ -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
();
}
}
...
...
wxRobot/bin/Release/wxRobot.exe
浏览文件 @
3b38f66f
无法预览此类型文件
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录