<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[天杀的Blog]]></title>
<link>http://www.osdiy.com/blog/</link>
<description><![CDATA[一个普通的Win32 ASM程序员]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[willok@163.com(天杀)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>天杀的Blog</title>
	<url>http://www.osdiy.com/blog/images/logos.gif</url>
	<link>http://www.osdiy.com/blog/</link>
	<description>天杀的Blog</description>
</image>

			<item>
			<link>http://www.osdiy.com/blog/article/杂类随笔/41.htm</link>
			<title><![CDATA[Intel DG45ID的朋友要注意了]]></title>
			<author>willok@163.com(天杀)</author>
			<category><![CDATA[杂类随笔]]></category>
			<pubDate>Thu,15 Apr 2010 05:38:10 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=41</guid>
		<description><![CDATA[Intel DG45ID的朋友要注意了，很多朋友都说自己的DG45ID板子刷了BIOS后就起不来了。<br/>今天一个朋友问我一些修改DMI信息的问题，说Intel的工具修改的时候报错，说不是Intel的主板。<br/>仔细询问了一些情况，发现这个板子的系统信息都没有，可以在BIOS设置中的Main-&gt;Additional System Information查看。如果这里的序列号啥的都没有的话就千万别刷了，一般刷了就会挂。<br/>估计这是非原厂的主板，很多东西还是不一样的，所以别没事刷BIOS玩了。]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/编程技术/40.htm</link>
			<title><![CDATA[实模式下编程几个有意思的地方]]></title>
			<author>willok@163.com(天杀)</author>
			<category><![CDATA[编程技术]]></category>
			<pubDate>Wed,14 Apr 2010 11:22:22 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=40</guid>
		<description><![CDATA[实模式下编程几个有意思的地方，留个记录，备忘<br/><br/><br/>1.千万别以为实模式下中断向量就一定在0000:0000的位置，其实这个地址是可以设置的，也就是说IDTR在实模式下同样影响中断向量表。<br/><br/>2.lgdt和lidt这两条指令如果在16位模式下执行，那么基地址仅低24位有效。切记。<br/><br/>3.关于实模式下的4G内存访问，进保护模式，给DS/ES/FS/GS中的一个或多个设置一个4G段，然后切回实模式，用这些段寄存器配合就可以访问4G内存了。<br/>上面的很多人都知道，后面的很多人就不知道了。<br/>我们假设用的FS存储的4G段，Base=0,Limit=4G<br/><br/>(1).为啥切换回实模式还能访问4G？<br/>&nbsp;&nbsp;&nbsp;&nbsp;切换实模式保护模式不会引起段属性的改变，段值并没有实际意义，仅仅在赋值的时候会影响段寄存器对应的一个属性寄存器。这也就是Intel要求模式改变后要紧跟一个长跳转的原因，很多资料上说是为了清指令队列或指令预取，其实都不是，主要是为了改变CS的段属性。<br/><br/>(2).切回实模式后对原来的4G段赋值会怎么样？<br/>&nbsp;&nbsp;&nbsp;&nbsp;很多人总是小心翼翼的呵护自己的4G段，总是担心对其赋值后就没法访问4G数据了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;其实不用但是，经过研究发现，在实模式下对段寄存器进行赋值，改变的仅仅是其基地址而已。比如FS=1000h后，这时候Base变成10000h了，Limit还是4G，注意，这里如果要访问80000h的话就不能再用FS:[80000h]了，而应该用FS:[70000h]，因为你的Base变了。很多人测试发现赋值后再访问的时候数据就错了，从而在今后的代码中小心翼翼去保护这个寄存器。所以，只要知道了原因，心里的负担就没这么重了。<br/><br/>(3).怎么恢复原来的4G段呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;前面说了，实模式下简单的对段赋值并不会改变段属性，只会改变的是基地址，所以如果你要恢复64K段的话需要再进一次保护模式，在保护模式下加载段值即可。<br/><br/>(4).为什么我的Hook访问4G段后会引起别的程序不正常？<br/>&nbsp;&nbsp;&nbsp;&nbsp;原因前面已经说了，就是4G段回实模式后还是4G段，不管怎么赋值，改变的仅仅是其基地址而已。一般来说不会影响别的程序的，因为4G段你要当作64K段来用也没什么问题的。但是如果有多个程序同时这样用的话就不好说了，一个设置为4G，一个设置为64K，到头来也不知道到底Limit是多少了，可能有人要说了，我把当时的状态保存出来不就可以了吗？呵呵。可能你忘记了一点，段的属性寄存器是无法访问的。]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/杂类随笔/39.htm</link>
			<title><![CDATA[Win7的版本]]></title>
			<author>willok@163.com(天杀)</author>
			<category><![CDATA[杂类随笔]]></category>
			<pubDate>Wed,24 Mar 2010 14:47:00 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=39</guid>
		<description><![CDATA[常规分类：<br/>Windows 7入门版<br/>Windows 7家庭基础版<br/>Windows 7家庭高级版<br/>Windows 7专业版<br/>Windows 7旗舰版<br/><br/>除了常规标准版版本外，还都有四个特别版本：<br/>面向欧洲的剥离IE浏览器的“E”<br/>删掉IE浏览器和WMP播放器的“N”<br/>面向韩国的没有WMP播放器和Windows Messenger的“K”版<br/>不包含WMP播放器但有Windows Messenger且提供其它IM工具下载链接的“KN”版<br/>Windows 7企业版则只有欧洲特别版，没有韩国特别版。]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/杂类随笔/38.htm</link>
			<title><![CDATA[GMail：传送的 ACL 不包含最低要求的信息]]></title>
			<author>willok@163.com(天杀)</author>
			<category><![CDATA[杂类随笔]]></category>
			<pubDate>Mon,01 Mar 2010 12:32:00 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=38</guid>
		<description><![CDATA[某日，写了一封邮件，内容很简单，***URL：<a href="http://" target="_blank" rel="external">http://</a>**********/*****<br/>然后带了一个附件，发送的时候都很正常，快完成的时候弹出错误了。<br/>提示：“传送的 ACL 不包含最低要求的信息。”<br/><br/>重试了很多次都这样，先以为带URL发布出去？去掉了也不行。<br/>然后检查附件，说ACL有问题，难道FoxMail进程没有访问该附件的权限？检查了也不是。<br/>后来找了很多原因，总算找到了，GMail不允许发扩展名为sys的文件，打包发送就OK了。]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/编程技术/37.htm</link>
			<title><![CDATA[Intel通用SLP Marker发布了，欢迎大家测试]]></title>
			<author>willok@163.com(天杀)</author>
			<category><![CDATA[编程技术]]></category>
			<pubDate>Thu,25 Feb 2010 09:27:00 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=37</guid>
		<description><![CDATA[应网友要求，特发布Intel通用SLP Marker版本，欢迎大家测试<br/><br/>下载地址:Intel_SLP_Marker.zip<br/><br/>使用方法见前一篇关于DG45ID的文章，链接如下：<a href="http://www.osdiy.com/Blog/article.asp?id=39" target="_blank" rel="external">http://www.osdiy.com/Blog/article.asp?id=39</a><br/><br/>理论上可以通用大部分的Intel原装主板。<br/>需要注意的几点：<br/>1.主板必须提供UEFI Boot选项<br/>2.主板BIOS必须有SLP模块，早期的是不支持的，新的基本上都有<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/编程技术/36.htm</link>
			<title><![CDATA[IRP完成的几种常见错误]]></title>
			<author>willok@163.com(天杀)</author>
			<category><![CDATA[编程技术]]></category>
			<pubDate>Sat,20 Feb 2010 10:14:00 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=36</guid>
		<description><![CDATA[直接上代码。<br/>第一种：<br/>NTSTATUS DispatchSomething(PDEVICE_OBJECT fidp, PIRP irp)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fido-&gt;DevcieExtension;<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoCopyCurrentIrpStackLocationToNext(irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoSetCompletionRoutine(irp, CompletionRoutine, ...);<br/>&nbsp;&nbsp;&nbsp;&nbsp;NTSTATUS status = IoCallDriver(pdx-&gt;LowerDevice, irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (STATUS_PENDING == status)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IoMarkIrpPending(Irp)<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;return status;<br/>}<br/>这种情况貌似很正确，当下层返回STATUS_PENDING的时候标记一下<br/>其实错就错在当返回STATUS_PENDING的时候这个IRP可能已经完成了，这时候千万不要碰IRP了。<br/><br/><br/>第二种：<br/>NTSTATUS DispatchSomething(PDEVICE_OBJECT fido, PIRP irp)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;PDEVICE_EXTENSION pdx = fido-&gt;DeviceExtension;<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoMarkIrpPending(irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoCopyCurrrentIrpStackLocationToNext(irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoSetCompletionRoutine(irp, TopDriverCompleteRoutine, ...);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return IoCallDriver(pdx-&gt;LowrDevice, irp);<br/>}<br/>同样，看起来没什么问题，大不了我先标记一下吧。<br/>这里的问题在于IoMarkIrpPending和STATUS_PENDING必须配对使用，这里是标记了要Pending，但是函数却有可能返回了别的值。<br/><br/>第三种：<br/>NTSTATUS DeispatchSomething(PDEVCIE_OBJECT fido, PIRP irp)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;PDEVICE_EXTENSION pdx = fido-&gt;DeviceExtenson;<br/>&nbsp;&nbsp;&nbsp;&nbsp;KEVENT&nbsp;&nbsp;&nbsp;&nbsp; event;<br/>&nbsp;&nbsp;&nbsp;&nbsp;KeInitializeEvent(&amp;event, NotificaionEvent, FALSE);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoCopyCurrentIrpStackLocationToNext(irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoSetCompletionRoutine(irp, CompletionRoutine, &amp;event, TRUE,TRUE,TRUE);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoCallDriver(pdx-&gt;LowerDeviceObject, irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;KeWaitForSingleObject(&amp;event, ...);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Irp-&gt;IoStatus.Status = status;<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoCompleteRequest(irp, IO_NO_INCREMENT);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return status;<br/>}<br/>NTSTATUS CompletionRoutine(PDEVICE_OBJECT fido, PIRP irp, PVOID pev)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (Irp-&gt;PendingReturned)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IoMarkIrpPending(irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;KeSetEvent((PKEVENT)pev, IO_NO_CREMENT, FALSE);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return STATUS_MORE_PROCESSING_REQUIRED;<br/>}<br/>这个是在完成例程中标记的，如果下层异步完成，则标记，看起来没错，其实也犯了和前一个一样的错误。<br/><br/><br/>第四种：<br/>VOID SomeFunction()<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;PIRP irp = IoBuildAsynchronousFsdRequest(...);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoSetCompleteRoutine(irp, MyCompleteRoutine, ...);<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoCallDriver(...);<br/>}<br/>NTSTATUS MyCompletionRoutine(PDEVCIE_OBJECT junk, PIRP irp, PVOID context)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (Irp-&gt;PendingReturned)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IoMarkIrpPending(irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;IoFreeIrp(irp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return STATUS_MORE_PROCESISING_REQUIRED;<br/>}<br/>这种方式为自己构造IRP，然后传递给下层处理。<br/>该情况的错误在于自己构造的IRP没有当前栈，所以也无法调用IoMarkIrpPending<br/><br/><br/>在实际代码编写中一定要注意避免上述几种错误。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/编程技术/35.htm</link>
			<title><![CDATA[【春节巨献】Intel DG45ID Marker闪亮登场]]></title>
			<author>willok@163.com(天杀)</author>
			<category><![CDATA[编程技术]]></category>
			<pubDate>Sun,14 Feb 2010 12:00:00 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=35</guid>
		<description><![CDATA[Intel主板的Win7激活一直是个难题，特别是支持UEFI的主板。<br/>我手上的DG45ID就是一个典型，用很多软激活的工具会黑屏或者死机。就连网卡ROM生成SLIC的方式都很难成功，其根本原因就在于主板是全新的UEFI构架，这种方式下的ACPI表存放的内存和传统BIOS方式不太一样，ACPI周边的内存都被UEFI占用，不像传统BIOS中这段内存大部分都是空闲的。<br/><br/>经过我对Intel DG45ID BIOS的研究，写了一个SLP Marker，利用BIOS自带的功能完美解决了Win7的激活问题。该Marker理论上支持所有的Intel UEFI主板，但是我仅测试过Intel DG45ID，所以限制了该程序的使用，如果你有别的Intel主板，请单独与我联系。<br/><br/>DG45ID_Marker.rar下载<br/><br/>本Marker使用说明：<br/>准备一个U盘，并以Fat32方式格式化(务必用Fat32格式化，否则UEFI Boot方式会失败)<br/>根目录下建立\EFI\Boot目录，将下载的bootx64.efi文件解压到该目录。<br/>重启机器，按F2进入BIOS设置界面，在Boot页下将UEFI Boot设置为Enable，保存重启后按F10进入启动菜单，按上下键选择“INTERNAL EFI SHELL:********”回车。<br/>注：星号位置提示内容根据U盘的厂家不同而不同，如没有该项，则请检查U盘是否插入，U盘是否为Fat32格式，是否有\EFI\Boot\bootx64.efi文件。<br/><br/>选择该项后会提示你是否设置成功。按任意键后将会重启。这时候拔出你的U盘，进入操作系统用工具检查SLIC是否已经生成了。<br/><br/>另：本Marker生成的是DELL SLIC 2.1。证书和Win7旗舰版的序列号在压缩包中一起带了，至于怎么激活就不要问我了。本方法生成的SLIC即使重新刷BIOS也不会丢失的，非常实用。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/网站更新/34.htm</link>
			<title><![CDATA[[重要]IE安全更新，XML漏洞补丁]]></title>
			<author>willok@163.com(admin)</author>
			<category><![CDATA[网站更新]]></category>
			<pubDate>Thu,18 Dec 2008 09:08:21 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=34</guid>
		<description><![CDATA[前段时间闹得沸沸扬扬的IE XML解析漏洞，MS终于有所动作了。<br/>详情请见微软<br/><a target="_blank" href="http://www.microsoft.com/technet/security/bulletin/ms08-078.mspx" rel="external">MS08-078安全公告</a><br/><br/><br/>补丁在里面下载：<br/>IE7补丁<br/><a target="_blank" href="http://www.osdiy.com/IE7-WindowsXP-KB960714-x86-CHS.exe" rel="external">http://www.osdiy.com/IE7-WindowsXP-KB960714-x86-CHS.exe</a><br/><br/>IE6补丁<br/><a target="_blank" href="http://www.osdiy.com/WindowsXP-KB960714-x86-CHS.exe" rel="external">http://www.osdiy.com/WindowsXP-KB960714-x86-CHS.exe</a><br/><br/><br/>目前已经有不少木马通过该漏洞运行，请大家注意。]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/杂类随笔/33.htm</link>
			<title><![CDATA[Access Snapshot Viewer 2003安全补丁]]></title>
			<author>willok@163.com(admin)</author>
			<category><![CDATA[杂类随笔]]></category>
			<pubDate>Mon,15 Sep 2008 07:35:17 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=33</guid>
		<description><![CDATA[Office中Access Snapshot Viewer 2003有一个很严重的漏洞，可以直接从网上下载下载文件覆盖本地系统文件。前段时间有很多网页都是利用这个漏洞来植入木马。使用很简单，通过这个组件把系统通讯录的文件覆盖了，然后好像是通过一个ldap://的协议来要求系统执行通讯录。这时候的通讯录程序已经是木马了。<br/><br/><br/>建议使用Office 2003的用户立即更新此补丁。否则太不安全了。呵呵<br/><div id="mdown_barl3si2yr"></div><br /><script language="javascript" type="text/javascript">check('Action.asp?action=type1&mainurl=attachments%2Fmonth%5F0809%2Fu20089157359%2Erar&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_barl3si2yr','mdown_barl3si2yr');</script><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.osdiy.com/blog/article/杂类随笔/32.htm</link>
			<title><![CDATA[传说中的&#34;智能电池(Smart Battery)&#34;]]></title>
			<author>willok@163.com(admin)</author>
			<category><![CDATA[杂类随笔]]></category>
			<pubDate>Fri,12 Sep 2008 10:10:39 +0800</pubDate>
			<guid>http://www.osdiy.com/blog/default.asp?id=32</guid>
		<description><![CDATA[这是DELL M1210中的电池，型号为:DELL YF0917<br/>序列号:1798SMPDELL YF0917<br/>制造商:SMP<br/><img src="http://www.osdiy.com/blog/attachments/Battery.JPG" border="0" alt=""/><br/>看看放电曲线，直接从75%掉到5%了。<br/>刚过一年保修期就这样了，电池也太智能了点。]]></description>
		</item>
		
</channel>
</rss>
