【WM】谈Phone Canvas函数为何不会返回错误值RPC_E_WRONG_THREAD
来源:互联网 发布:计算机编程培训学校 编辑:程序博客网 时间:2024/04/29 23:22
微软向OEM厂商提供Phone Canvas机制,让我们可以修改cprog.exe的数个界面布局和UI交互行为。
我们发现多数Phone Canvas API函数的返回值列表中都存在错误值RPC_E_WRONG_THREAD,下表就是PHGetBlobPtr的返回值列表:
S_OK
Indicates success.
E_INVALIDARG
Indicates failure.
E_PENDING
Indicates this phone data identifier has no associated data yet. For example, PH_ID_LASTCALL_INFO before any calls have been made.
RPC_E_WRONG_THREAD
Indicates that this function must be called from the main UI thread, since all of the phone canvas APIs are called on the main UI thread.
理论上,Phone Canvas API函数必须在主UI线程调用,否则调用Phone Canvas API函数会返回错误值RPC_E_WRONG_THREAD。但实际使用下来,我们发现无论怎么调用Phone Canvas API函数都不会返回RPC_E_WRONG_THREAD,出于好奇我反汇编了tpcutil.dll对其调用机制一探究竟。
以下是根据笔者反汇编所得,改用C/C++描述的InitializePHCanvas函数实现,该函数用于加载Phone Canvas模块:
g_hMainCProgThread最初被赋值了GetCurrentThread()函数的返回值。
下面是PHGetBlobPtr函数的实现:
笔者注意到与g_hMainCProgThread比较的是GetCurrentThread()函数返回值,我们已知g_hMainCProgThread也是GetCurrentThread()函数的返回值,而且GetCurrentThread()函数无论在哪个线程里调用都返回一个数值相同的伪句柄。
所以,这个分支是永远进入不了的,PHGetBlobPtr函数也永远不会返回错误值RPC_E_WRONG_THREAD了。
- 【WM】谈Phone Canvas函数为何不会返回错误值RPC_E_WRONG_THREAD
- 【WM】Phone Canvas提示信息对照表
- 【WM】Phone Canvas重复创建视图的原因
- 构造函数和析构函数为何没有返回值
- C++ 返回值为何不能判断成员函数重载
- 调用CoCreateInstance 函数 返回值-2147221008 错误
- 函数返回值及错误码设计
- UCGUN WM API 函数
- Text控件不会返回null值
- jquery json返回值为何为undfinded?
- GetLastError()返回错误对照函数
- ReadFile函数 WIN7 返回错误
- 错误日记 函数返回数组
- TStrings做函数返回值类型的错误
- VS2008 错误类型 :构造函数不能有返回值
- 局部函数返回值不一样引起重定义错误
- 错误处理之函数返回值OR异常处理
- 关于ffmpeg,av_read_frame函数返回值小于0的错误
- 一步一步
- sql server 海量数据速度提升:SQL优化-索引(8)
- sql server 海量数据速度提升:SQL优化-索引(9)
- 正版金山毒霸下载多少钱
- 图的割点、桥与双连通分支
- 【WM】谈Phone Canvas函数为何不会返回错误值RPC_E_WRONG_THREAD
- sql server 海量数据速度提升:SQL优化-索引(10)
- sql server 海量数据速度提升:SQL优化-索引(11)
- sql server 海量数据速度提升:SQL优化-索引(12)
- STL map常用操作简介
- sql server 海量数据速度提升:SQL优化-索引(13)
- sql server 海量数据速度提升:SQL优化-索引(14)
- 北京喜意来误请“熊猫烧香”骗子团伙“毒王”解决password01.txt.shs病毒(图)
- sql server 海量数据速度提升:SQL优化-索引(15)