微软在UWP中提供了一组丰富的API能够满足99%的应用的需求(棒读),然而在那剩下1%的情况下找不到桌面API的替代品是很棘手的,正如我上一篇文章里提到的CreateFile,就不属于微软在UWP中允许使用的API。 实际上WACK的API检测是个没什么用的东西,因为它是通过读取PE导入表,以及 .NET程序的P/Invoke签名的方法来判断一个App是否使用了不允许使用的API。因此只要调用LoadLibrary就能轻松绕过。 问题在于LoadLibrary(Ex)本身不被允许调用,微软表示替代品是LoadPackagedLibrary,而这个API在调用时会检测路径是否在appx内,如果不在就直接报错。(太愚蠢了)因此首先我们要设法获得LoadLibraryEx的地址,在此之前先获取kernel32.dll或kernelbase.dll的地址。 方法1:使用VirtualQuery获取 MEMORY_BASIC_INFORMATION info = {}; if (VirtualQuery(VirtualQuery, &info,…

关于UWP的历史,其起源是Microsoft在Windows 8中引入的Metro apps。(后来又被称作Modern apps, Windows apps, Universal Windows Apps等)无论是从目的还是从效果上看,这一类应用模型都与iOS/Android比较相似,是为了更有利于移动平台生态的发展设计的。 然而UWP目前面向的最大的用户群体是Windows桌面用户,只用UWP实现一个程序就会出现很多feature无法实现的问题,因此这种情况下,让用户安装并运行一个普通权限的后台进程,使用UWP做UI与之通信就成为了一种选择,毕竟UWP的C#/XAML性能比WPF好得多,分发/支付上也比桌面程序方便不少,虽说原则上微软并不允许商店应用与桌面应用互相通信。 除了命名管道(named pipe),进程间通信的方式还有很多,比如Socket,还有微软给Runtime Broker用的COM RPC(rpcrt4)等。…

几个月前在翻MSDN时发现Microsoft已经允许在Windows Store Apps(即UWP)里使用Chakra的API了。这意味着大家终于可以光明正大地在app中调用Javascript。//另外UWP允许JIT了所以你自己移植个V8上去其实也行 在8.x时代,Chakra是被标记为Desktop only的API,想要在Store apps里使用js,要么整个App使用HTML/js编写,要么使用WebView调用。前者显然不符合主要使用C#/XAML编写UI的前提,后者麻烦的要死,不好用。 UWP写起来真舒服(棒读) 使用Chakra之前需要较为深入地了解Chakra API,COM和JavaScript。其实不了解直接照抄代码拿着用也没什么不好,就是出了错之后不好排除。 使用C#调用Chakra API UWP是可以直接使用chakra.dll大部分函数的,除去JsStartProfiling JsStopProfiling JsEnumerateHeap…

项目地址: https://github.com/hjc4869/UacBypass 自从Vista开始,这类绕过UAC的方法层出不穷,于是一周前做了一个win10上能用的,所以说UAC不开最高级根本没有什么卵用,防君子不防小人。 适用条件 账号拥有管理员权限,开启UAC,并且使用普通权限运行本程序 账号的UAC使用默认配置(如图) 系统版本Windows 10.10240 x86或x64 使用方法 下载(或自己使用VS编译)对应架构(x86或x64不能通用)的Release,将UacBypass.dll UacBypassTest.exe与ntwdblib.dll放在同一目录下 执行UacBypassTest.exe,如果能直接弹出带管理员权限的cmd窗口,…

前言 早些时我不想在电脑上装QQ desktop(对国产流氓软件的厌恶),因此与Light Studio团队成员的交流就从QQ群切换到了Skype desktop。 然而说实话文字聊天这方面,Skype的体验真的差了一大截,首先是不支持高dpi屏幕,导致Surface上使用要么忍受模糊的界面,要么使用缩小的界面元素,单独放大字体。虽说QQ是后来才支持的dpi缩放,不过最终还是支持了,而Skype到现在还没打算支持。其次,Skype在移动平台上的表现出奇的差,不论是自家WP还是iOS平台都是如此,我在iPad上甚至从未成功使用过它。Android没用过所以不评论。 唯一好用的大概是可以编辑和删除已发出的消息(QQ现在似乎也能撤回了),有些情况下这个功能相当实用。 后来我们知道了Telegram这个软件,尝试了一会儿之后感觉恰好弥补了Skype的不足,UI支持dpi缩放(虽说最多到200%,而默认字体小得瞎眼),只要有个好用的代理,传图片与文件就会方便快捷,而不是像Skype那样直接对传,有时根本传不动。 至于客户端是否开源,其实我最初根本没怎么在意,…

做播放器时一般人多多少少都会遇到点字符乱码的问题,这些乱码基本都是出在mp3等老旧的格式上。这大概都是因为这些音频文件使用不遵循编码标准的软件制作而成。解决方法似乎也不怎么好(至少我的乱码mp3没有办法解决),不过MLang API作为Windows系统自带的API(Universal App可用)是非常方便好用的窄字符串编码检测方式,特定情况下非常好用。 使用方法非常简单: #include <MLang.h> HRESULT DetectCodepage(char* text, int* codePage) { IMultiLanguage2* iml; HRESULT hr = CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, IID_…

几个月之前我写了一篇文章讲怎么把C++/CX的异步操作同步执行(https://hjc.im/winrt-ckai-fa-zhi-yi-bu-zhuan-tong-bu/ ),当初做这个其实最主要就是为了给ffmpeg读写文件。 不过如果只是为了读写文件,这样是个比较笨的办法,本身异步方法就是包装的同步方法,结果又去把异步方法用同步的函数去包装一层。而扫描媒体库时可能一次就要读取成百上千个文件,每一次IO操作都要创建线程,等待结束,显然也不是一个高效率的方法。虽然并没有感觉到变慢 更好的办法是使用API函数CreateStreamOverRandomAccessStream直接将IRandomAccessStream转换成COM的IStream。 IStream* fileStreamData; HRESULT hr = CreateStreamOverRandomAccessStream( reinterpret_cast<IUnknown*>(stream), IID_PPV_ARGS(&fileStreamData)); if (!SUCCEEDED(…