<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Free2000fly&#039;s Official Blog &#187; free2000fly</title>
	<atom:link href="http://blog.tinybrowser.net/archives/author/admin/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.tinybrowser.net</link>
	<description>Free2000fly 个人博客</description>
	<lastBuildDate>Fri, 06 Jan 2012 21:12:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Anti-Screen Capture（Prevent Screen Captures）截屏与反截屏</title>
		<link>http://blog.tinybrowser.net/archives/2725</link>
		<comments>http://blog.tinybrowser.net/archives/2725#comments</comments>
		<pubDate>Sat, 03 Dec 2011 00:49:22 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[技术心得]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2725</guid>
		<description><![CDATA[1.数字图片使用类似于动画的方式显示，每次显示的是数字的一部分，当动态显示的时候人眼是可以分辨出具体数字的。但是截图的话就只能截取一部分，参考： http://cups.cs.cmu.edu/soups/2007/posters/p147_lim.pdf 2.屏蔽系统按键：Print Screen 和 Alt + Print Screen，主要原理是注册热键的方式，参考： http://www.vckbase.com/document/viewdoc/?id=1566 代码: Handling Hotkeys MainFrame.h MainFrame.cpp 3.全局Hook，参考： Screen Capture Library for Windows http://topic.csdn.net/u/20090914/00/70e6da83-906b-4db4-a3ee-d79dfd460bd6.html 这种方法不仅要 Hook GDI 方式的截图还有 DirectX 方式的截图，当然不排除还有其他方式的截图，例如：“Windows Media API for Capturing the Screen”。 所以这种方法实施起来甚是繁琐，第一要尽可能多地 Hook 相关 API 函数，但是你很难做到全面。另一方面稳定性，扩展性和维护性也不太好。 4.视频过滤驱动(Video filter drivers)。 相对于 Hook 来说可能更好一些，但是技术难度比较大。 http://search.codesoso.com/Record/ddf85213-2bdf-bfae-5626-15646cefdf09_446750_1.html http://www.codeproject.com/Articles/Toby-Opferman Driver Development Part 6: Introduction to Display Drivers [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2725/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>64 位 Windows 操作系统手工为驱动程序添加数字签名</title>
		<link>http://blog.tinybrowser.net/archives/2712</link>
		<comments>http://blog.tinybrowser.net/archives/2712#comments</comments>
		<pubDate>Wed, 30 Nov 2011 09:07:31 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[技术心得]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2712</guid>
		<description><![CDATA[MS 自从 Vista 开始在 64 位系统加载内核驱动要强制签名, 而普通开发者也许不愿或没有能力购买昂贵的 CA 数字证书. 那么解决方案就是：自己伪造签名。 过程： 打开系统的 testsigning 模式, 使得非权威 CA 发放的签名可以使用. bcdedit /set testsigning on 做一个签名证书出来. MakeCert -pe -ss PrivateCertStore -n CN=tinybrowser.net(test) tinybrowser.cer 把证书加进本机信任根 CA 中去. CertMgr -add tinybrowser.cer -s -r localMachine root 给驱动签名. Signtool sign /v /s PrivateCertStore /n tinybrowser.net(test) /t http://timestamp.verisign.com/scripts/timestamp.dll mydriver.sys 说明: mydriver.sys就是所要签名的驱动文件名称了, 这个驱动是 64 位的. [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2712/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为 QT 程序添加拖放文件到桌面的功能</title>
		<link>http://blog.tinybrowser.net/archives/2681</link>
		<comments>http://blog.tinybrowser.net/archives/2681#comments</comments>
		<pubDate>Sat, 11 Jun 2011 10:10:28 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[技术心得]]></category>
		<category><![CDATA[Drag and Drop]]></category>
		<category><![CDATA[QT]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2681</guid>
		<description><![CDATA[QT 的例子程序 $(QTDIR)\examples\draganddrop\delayedencoding 宣称实现了这个功能, 其实没有, 根本不工作. 正确的方法如下所示: 关键点就是, 先创建一临时文件, 然后把数据写入. 最后 mimeData->setUrls(QList()]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2681/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beginning with wxWidgets</title>
		<link>http://blog.tinybrowser.net/archives/2646</link>
		<comments>http://blog.tinybrowser.net/archives/2646#comments</comments>
		<pubDate>Thu, 05 May 2011 05:57:45 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[技术心得]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[wxWidgets]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2646</guid>
		<description><![CDATA[1. 下载最近的稳定版 Current Stable Release: 2.8.12 http://sourceforge.net/projects/wxwindows/files/2.8.12 解压到 E:\wxWidgets-2.8.12\ 2. 编译, 用 VS 2010 命令行. e: cd E:\wxWidgets-2.8.12 nmake -f makefile.vc BUILD=release UNICODE=0 RUNTIME_LIBS=static nmake -f makefile.vc BUILD=release UNICODE=1 RUNTIME_LIBS=static nmake -f makefile.vc BUILD=debug UNICODE=0 RUNTIME_LIBS=static nmake -f makefile.vc BUILD=debug UNICODE=1 RUNTIME_LIBS=static 3. 设置 vs 2010 的路径 include : E:\wxWidgets-2.8.12\include E:\wxWidgets-2.8.12\include\msvc lib : E:\wxWidgets-2.8.12\lib\vc_lib 4. [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2646/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用 VS 2010 玩转 QT</title>
		<link>http://blog.tinybrowser.net/archives/2582</link>
		<comments>http://blog.tinybrowser.net/archives/2582#comments</comments>
		<pubDate>Wed, 27 Apr 2011 10:28:12 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[技术心得]]></category>
		<category><![CDATA[QT]]></category>
		<category><![CDATA[VS 2010]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2582</guid>
		<description><![CDATA[工作所需, 用 QT 作为开发环境, 入入门, 简单的介绍一些玩法. 1. 下载 QT 源代码包, 到其官方网站 http://qt.nokia.com/downloads 去找, 目前的版本是 4.7.2, Windows 版本的下载地址是 【Qt libraries 4.7.2 for Windows (VS 2008, 218 MB)】 源代码包的下载地址是 http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.2.zip 2. 将下载下来的源码包解开, 放到一个目录内, 我的是 E:\works\qt-everywhere-opensource-src-4.7.2 3. 编译 QT 源码库, 跟着 http://doc.qt.nokia.com/4.7/install-win.html 页面的导引, 开始编译; 下面是个简介. (1). 将环境变量 QTDIR 加入系统, 值为 E:\works\qt-everywhere-opensource-src-4.7.2 (2). 将 Path 环境变量追加一个(如果 path 环境变量不存在, 则创建之), [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2582/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 驱动之间的通信</title>
		<link>http://blog.tinybrowser.net/archives/2572</link>
		<comments>http://blog.tinybrowser.net/archives/2572#comments</comments>
		<pubDate>Sun, 24 Apr 2011 12:02:56 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[技术心得]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2572</guid>
		<description><![CDATA[本文主要介绍 windows NT 驱动之间利用 CTL_CODE 如何通信. 一般来讲, 用户态的应用程序通过调用 CreateFile 和 DeviceIOControl 就可以和内核态驱动之间进行通信, 如果是内核态的一个驱动程序想和另外一个驱动程序进行类似操作又如何实现呢, 接下来会做详细的说明. 主要的思路是首先得到另外一个驱动的 handle, 再构建一个 IRP, 赋予必要的参数, 再把这个 IRP 发送给另外一个驱动, 等待另外一个驱动处理完毕后获取返回的数据. 具体代码如下: 在上面的这段代码中, 我们先用 IoGetDeviceObjectPointer 得到另外一个驱动的 handle, 然后利用 IoAllocateIrp 生成一个 IRP, 在赋完必要的参数之后通过 IoCallDriver 发送给另外一个驱动, 这里需要注意的是在 IoCallDriver 之前有 IoSetCompletionRoution 的调用, 当另外一个驱动处理完这个 IRP 之后进入它所设定的 Roution 之中, 通过一个 Event 我们就知道 IRP 已经处理完毕, 我们可以获取想要的数据了. 这样就实现了在内核态的一个驱动程序和另外一个驱动程序的通信. 另外还有一种实现的方式是通过 WorKItem [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2572/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>扩展内核函数 PsSetCreateProcessNotifyRoutine 等的蹲坑数量</title>
		<link>http://blog.tinybrowser.net/archives/2534</link>
		<comments>http://blog.tinybrowser.net/archives/2534#comments</comments>
		<pubDate>Sat, 22 Jan 2011 03:55:47 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[内核编程]]></category>
		<category><![CDATA[PsSetCreateProcessNotifyRoutine]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2534</guid>
		<description><![CDATA[Windows 内核提供的 PsSetCreateProcessNotifyRoutine 等函数能够容纳的回调函数的数量是有限的,目前仅区区 8 个 “蹲位”, 被占用满了以后, 再调用 PsSetCreateProcessNotifyRoutine 等函数将会失败. 因此, 我编写了一个驱动, 用以扩展 PsSetCreateProcessNotifyRoutine 等函数能够容纳回调函数的数量. 经过扩展后, 能够容纳的回调函数是无限的, 这个驱动有五个导出函数, 其使用方法与原始函数完全相同. 列表如下. 扩展后的函数名 原始函数名 Ext_PsSetCreateProcessNotifyRoutine PsSetCreateProcessNotifyRoutine Ext_PsSetCreateThreadNotifyRoutine PsSetCreateThreadNotifyRoutine Ext_PsRemoveCreateThreadNotifyRoutine PsRemoveCreateThreadNotifyRoutine Ext_PsSetLoadImageNotifyRoutine PsSetLoadImageNotifyRoutine Ext_PsRemoveLoadImageNotifyRoutine PsRemoveLoadImageNotifyRoutine 本驱动的启动方式建议为 boot 方式, 当其他驱动使用了本驱动的服务时, 不要卸载本驱动; 另外, 本驱动在 windows 2000 系统下不能卸载, 只能通过删除服务然后重启计算机的方式卸载本驱动. 本地下载 knlcbext.zip 项目主页 https://winutilities.svn.sourceforge.net/svnroot/winutilities/knlcbext/]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2534/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How To Run Office Macros Using Automation From Visual C++ .NET</title>
		<link>http://blog.tinybrowser.net/archives/2517</link>
		<comments>http://blog.tinybrowser.net/archives/2517#comments</comments>
		<pubDate>Fri, 14 Jan 2011 03:25:53 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[技术心得]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[macro]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2517</guid>
		<description><![CDATA[orignal Article With Microsoft Office Automation, you can open a document or create a new document that contains a Visual Basic for Applications (VBA) macro and execute the macro at run time. This article demonstrates how to call Office macros from a Visual C++ .NET Automation client. The following sample Automation client manipulates an Office [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2517/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 系统路径环境变量</title>
		<link>http://blog.tinybrowser.net/archives/2510</link>
		<comments>http://blog.tinybrowser.net/archives/2510#comments</comments>
		<pubDate>Sun, 02 Jan 2011 14:41:20 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[日常琐碎]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2510</guid>
		<description><![CDATA[环境变量名称 实际路径 %SystemDrive% 操作系统所在的分区号。如 C: %SystemRoot% 操作系统根目录。如 C:\WINDOWS %windir% 操作系统根目录。如 C:\WINDOWS %ALLUSERSPROFILE% 相当于 C:\Documents and Settings\All Users %APPDATA% 相当于 C:\Documents and Settings\用户目录\Application Data %ProgramFiles% 相当于 C:\Program Files %CommonProgramFiles% 相当于 C:\Program Files\Common Files %HOMEDRIVE% 操作系统所在的分区号。如：C: %HOMEPATH% 相当于 C:\Documents and Settings\用户目录 %USERPROFILE% 相当于 C:\Documents and Settings\用户目录 %HOMEDRIVE% C:\ 当前启动的系统的所在分区 %system% C:\WINDOWS\SYSTEM32 %ALLUSERSPROFILE% 列出所有用户Profile文件位置。 %APPDATA% 列出应用程序数据的默认存放位置。 %CD% 列出当前目录。 [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2510/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从盘符得到设备名称(QueryDosDevice)</title>
		<link>http://blog.tinybrowser.net/archives/2465</link>
		<comments>http://blog.tinybrowser.net/archives/2465#comments</comments>
		<pubDate>Tue, 14 Dec 2010 02:41:55 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[日常琐碎]]></category>
		<category><![CDATA[QueryDosDevice]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=2465</guid>
		<description><![CDATA[延伸阅读: Displaying Volume Paths QueryDosDevice Function Local File Systems]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/2465/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

