<?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>Proguru &#124; IT tech,review and news &#187; Windows</title>
	<atom:link href="http://blog.pcware.cn/category/it/windows/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.pcware.cn</link>
	<description>Just for Freedom</description>
	<lastBuildDate>Thu, 29 Jul 2010 06:35:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DCube3.ocx控件注册失败的解决办法</title>
		<link>http://blog.pcware.cn/it/dcube3_register_failure.html</link>
		<comments>http://blog.pcware.cn/it/dcube3_register_failure.html#comments</comments>
		<pubDate>Mon, 12 Jul 2010 11:45:37 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=854</guid>
		<description><![CDATA[单位的某一个业务系统用到了DynamiCube组件，很多客户端的IE浏览器都无法正常下载并注册DynamiCube组件，导致页面无法正常显示。手工拷贝DCube3.cab到客户端并解出Dcube3.ocx，然后regsvr32 Dcube3.ocx会有错误提示“LoadLibrary(&#8220;DCube3.ocx&#8221;) 失败 &#8211; 内存分配访问无效”，英文的错误提示是“LoadLibrary(dcube3.ocx&#8221;) failed &#8211; Invalid Access to Memory Location”。其实这是因为Dcube3.ocx受到DEP(Data Eexcute Protection)阻止造成的。解决办法也很简单，先禁止DEP，然后注册Dcube3.ocx，然后再打开DEP即可。
XP SP3可以这样关闭DEP,打开boot.ini文件，将/noexecute的值改为AlwaysOff或者将/noexecute及等号后的值一起改为/execute,保存重启系统即可。
]]></description>
			<content:encoded><![CDATA[<p style="text-indent:2em">单位的某一个业务系统用到了DynamiCube组件，很多客户端的IE浏览器都无法正常下载并注册DynamiCube组件，导致页面无法正常显示。手工拷贝DCube3.cab到客户端并解出Dcube3.ocx，然后regsvr32 Dcube3.ocx会有错误提示“LoadLibrary(&#8220;DCube3.ocx&#8221;) 失败 &#8211; 内存分配访问无效”，英文的错误提示是“LoadLibrary(dcube3.ocx&#8221;) failed &#8211; Invalid Access to Memory Location”。其实这是因为Dcube3.ocx受到DEP(Data Eexcute Protection)阻止造成的。解决办法也很简单，先禁止DEP，然后注册Dcube3.ocx，然后再打开DEP即可。</p>
<p style="text-indent:2em">XP SP3可以这样关闭DEP,打开boot.ini文件，将/noexecute的值改为AlwaysOff或者将/noexecute及等号后的值一起改为/execute,保存重启系统即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/dcube3_register_failure.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>磁盘类,端口,小端口驱动(Class,Port,Miniport Drivers)</title>
		<link>http://blog.pcware.cn/it/windows/class_port_miniport_drivers.html</link>
		<comments>http://blog.pcware.cn/it/windows/class_port_miniport_drivers.html#comments</comments>
		<pubDate>Thu, 08 Apr 2010 12:23:44 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=796</guid>
		<description><![CDATA[During initialization, the Windows I/O manager starts the disk storage drivers. Storage drivers in Windows follow a class/port/miniport architecture, in which Microsoft supplies a storage class driver that implements functionality common to all storage devices and a storage port driver that implements functionality common to a particular bus—such as a Small Computer System Interface (SCSI) [...]]]></description>
			<content:encoded><![CDATA[<p style="text-indent:2em">During initialization, the Windows I/O manager starts the disk storage drivers. Storage drivers in Windows follow a class/port/miniport architecture, in which Microsoft supplies a storage class driver that implements functionality common to all storage devices and a storage port driver that implements functionality common to a particular bus—such as a Small Computer System Interface (SCSI) bus or an Integrated Device Electronics (IDE) system—and OEMs supply miniport drivers that plug into the port driver to interface Windows to a particular controller implementation.</p>
<p style="text-indent:2em">系统初始化期间,windows I/O管理器开始装载磁盘存储驱动.windows中的存储驱动遵循类/端口/小端口(class/port/miniport)架构,MS提供一个存储类驱动实现与具体设备无关的、所有存储设备共同的功能特性和一个存储端口驱动实现一类特殊总线共同的功能&#8212;比如SCSI(Small Computer System Interface)总线或者IDE(Integrated Device Electronics)总线&#8212;然后OEM(Original Equipment Manufacturer)制造商提供挂接到端口驱动的小端口驱动来为windows提供到一个特殊控制器实现的访问接口。</p>
<p style="text-indent:2em">&#8212;译自《windows internals》(5th) </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/windows/class_port_miniport_drivers.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xp机器ping出现问号无法上网解决一例</title>
		<link>http://blog.pcware.cn/it/windows/xp_ping_problem.html</link>
		<comments>http://blog.pcware.cn/it/windows/xp_ping_problem.html#comments</comments>
		<pubDate>Mon, 22 Mar 2010 12:21:52 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=782</guid>
		<description><![CDATA[一台xp系统机器，无法上网浏览， ping本地私有地址和外部公有地址都通，但是ping命令输出出现问号并伴随一声蜂鸣。输出类似如下：
ping ? 192.168.1.1 with 32 bytes of data:
reply from 192.168.1.1: bytes=32 time ]]></description>
			<content:encoded><![CDATA[<p style="text-indent:2em">一台xp系统机器，无法上网浏览， ping本地私有地址和外部公有地址都通，但是ping命令输出出现问号并伴随一声蜂鸣。输出类似如下：</p>
<p>ping ? 192.168.1.1 with 32 bytes of data:<br />
reply from 192.168.1.1: bytes=32 time <10 ttl=64<br />
reply from 192.168.1.1: bytes=32 time <10 ttl=64<br />
reply from 192.168.1.1: bytes=32 time <10 ttl=64</p>
<p style="text-indent:2em">卸载网卡驱动，重新安装故障依旧。交换机及网线确认无问题，执行如下命令<br />
netsh winsock reset<br />
重置winsock组件，问题解决，应该是恶意软件或插件所为。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/windows/xp_ping_problem.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows x64函数调用约定(function call convention)</title>
		<link>http://blog.pcware.cn/it/windows/windows_x64_function_call_convention.html</link>
		<comments>http://blog.pcware.cn/it/windows/windows_x64_function_call_convention.html#comments</comments>
		<pubDate>Mon, 28 Dec 2009 13:47:31 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=674</guid>
		<description><![CDATA[　　借PC处理器架构由x86向x64过渡之机，MS清理了windows x64平台上的函数调用约定，由原来的数种包括stdcall,thiscall,fastcall,cdecl,pascal等，统一为一种新的fastcall调用方式。这种调用方式得益于x64平台寄存器数量的增加。
　　
　　windows x64平台fastcall调用约定的主要特性如下：

前四个整型或指针类型参数由RCX,RDX,R8,R9依次传递，前四个浮点类型参数由XMM0,XMM1,XMM2,XMM3依次传递。
调用函数为前四个参数在调用栈上保留相应的空间，称作shadow space或spill slot。即使被调用方没有或小于4个参数，调用函数仍然保留那么多的栈空间，这有助于在某些特殊情况下简化调用约定。
除前四个参数以外的任何其他参数通过栈来传递，从右至左依次入栈。
由调用函数负责清理调用栈。
小于等于64位的整型或指针类型返回值由RAX传递。
浮点返回值由XMM0传递。
更大的返回值(比如结构体)，由调用方在栈上分配空间，并有RCX持有该空间的指针并传递给被调用函数，因此整型参数使用的寄存器依次右移一格，实际只可以利用3个寄存器，其余参数入栈。函数调用结束后，RAX返回该空间的指针。
除RCX,RDX,R8,R9以外，RAX、R10、R11、XMM4 和 XMM5也是易变化的(volatile)寄存器。
RBX, RBP, RDI, RSI, R12, R14, R14, and R15寄存器则必须在使用时进行保护。
在寄存器中，所有参数都是右对齐的。小于64位的参数并不进行高位零扩展，也就是高位是无法预测的垃圾数据。

]]></description>
			<content:encoded><![CDATA[<p>　　借PC处理器架构由x86向x64过渡之机，MS清理了windows x64平台上的函数调用约定，由原来的数种包括stdcall,thiscall,fastcall,cdecl,pascal等，统一为一种新的fastcall调用方式。这种调用方式得益于x64平台寄存器数量的增加。<br />
　　<br />
　　windows x64平台fastcall调用约定的主要特性如下：
<ul>
<li>前四个整型或指针类型参数由RCX,RDX,R8,R9依次传递，前四个浮点类型参数由XMM0,XMM1,XMM2,XMM3依次传递。</li>
<li>调用函数为前四个参数在调用栈上保留相应的空间，称作shadow space或spill slot。即使被调用方没有或小于4个参数，调用函数仍然保留那么多的栈空间，这有助于在某些特殊情况下简化调用约定。</li>
<li>除前四个参数以外的任何其他参数通过栈来传递，从右至左依次入栈。</li>
<li>由调用函数负责清理调用栈。</li>
<li>小于等于64位的整型或指针类型返回值由RAX传递。</li>
<li>浮点返回值由XMM0传递。</li>
<li>更大的返回值(比如结构体)，由调用方在栈上分配空间，并有RCX持有该空间的指针并传递给被调用函数，因此整型参数使用的寄存器依次右移一格，实际只可以利用3个寄存器，其余参数入栈。函数调用结束后，RAX返回该空间的指针。</li>
<li>除RCX,RDX,R8,R9以外，RAX、R10、R11、XMM4 和 XMM5也是易变化的(volatile)寄存器。</li>
<li>RBX, RBP, RDI, RSI, R12, R14, R14, and R15寄存器则必须在使用时进行保护。</li>
<li>在寄存器中，所有参数都是右对齐的。小于64位的参数并不进行高位零扩展，也就是高位是无法预测的垃圾数据。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/windows/windows_x64_function_call_convention.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>延迟中断请求级(lazy IRQL)</title>
		<link>http://blog.pcware.cn/it/windows/lazy_irql.html</link>
		<comments>http://blog.pcware.cn/it/windows/lazy_irql.html#comments</comments>
		<pubDate>Tue, 25 Aug 2009 14:40:34 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=475</guid>
		<description><![CDATA[因为访问可编程中断控制器(PIC)是相对较慢的操作,需要访问I/O总线来改变中断请求级(IRQL)的硬件抽象层(HAL)，比如为了访问中断控制器(PIC)和32位高级配置电源接口(ACPI)系统，实现了一个性能优化 ,谓之延迟中断请求级(lazy IRQL),来尽量避免可编程中断控制器(PIC)访问。当中断请求级(IRQL)上升以后，硬件抽象层(HAL)在内部记录该中断请求级(IRQL)而不是来改变中断屏蔽(interrupt mask)。如果一个低优先级的中断随之而来，硬件抽象层(HAL)为前面的中断设置合适的中断屏蔽(interrupt mask)，也就是实实在在的提升中断请求级(IRQL)，从而延迟这个低优先级的中断直到中断请求级(IRQL)降低。这样以来，当中断请求级(IRQL)升高时如果没有低优先级的中断发生，硬件抽象层(HAL)并不真正的去修改可编程中断控制器(PIC)。
]]></description>
			<content:encoded><![CDATA[<p>因为访问可编程中断控制器(PIC)是相对较慢的操作,需要访问I/O总线来改变中断请求级(IRQL)的硬件抽象层(HAL)，比如为了访问中断控制器(PIC)和32位高级配置电源接口(ACPI)系统，实现了一个性能优化 ,谓之延迟中断请求级(lazy IRQL),来尽量避免可编程中断控制器(PIC)访问。当中断请求级(IRQL)上升以后，硬件抽象层(HAL)在内部记录该中断请求级(IRQL)而不是来改变中断屏蔽(interrupt mask)。如果一个低优先级的中断随之而来，硬件抽象层(HAL)为前面的中断设置合适的中断屏蔽(interrupt mask)，也就是实实在在的提升中断请求级(IRQL)，从而延迟这个低优先级的中断直到中断请求级(IRQL)降低。这样以来，当中断请求级(IRQL)升高时如果没有低优先级的中断发生，硬件抽象层(HAL)并不真正的去修改可编程中断控制器(PIC)。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/windows/lazy_irql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows内核函数命名规则(system routine naming convention)</title>
		<link>http://blog.pcware.cn/it/windows/system_routine_naming_convention.html</link>
		<comments>http://blog.pcware.cn/it/windows/system_routine_naming_convention.html#comments</comments>
		<pubDate>Mon, 24 Aug 2009 13:11:59 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=462</guid>
		<description><![CDATA[windows内核函数命名的一般格式为：
&#60;Prefix>&#60;Operation>&#60;Object>
Prefix指示导出该例程的组件，Operation指出对对象或资源做什么样的动作，Object标示操作的对象或资源。比如ExAllocatePoolWithTag是一个执行体(Executive)例程,用来从分页池(paged pool)或非分页池(nonpaged pool)中分配内存。KeInitializeThread是一个分配并且设置内核线程对象(kernel thread object)的内核例程。

下面的表列出了常用的前缀和组件的对应关系。
每一个系统组件还有一个变体前缀来指示内部使用(unexported)的函数，或者是组件前缀的第一个字母后面跟上i(指internal)，或者是全部的前缀跟上字母p(指private)。比如Ki指示一个Kernel内部函数，Psp指示一个Process support内部函数。
有些内核函数还在前缀或简化的前缀后面加上小写字母f，来指示这个函数使用fastcall调用约定,比如ObfDereferenceObject。KfRaiseIrql、KfLowerIrql、KfAcquireSpinLock、KfReleaseSpinLock等亦属此类。
经常会有人问Zw到底是什么单词的缩写(abbreviation),而且有种种的猜测在流传。实际上到现在也没有一个权威的说法，姑且认为选择这样一个古怪的前缀很难与其他组件发生冲突吧。
如果你知道这里没有列出的前缀或者有错误的地方，欢迎留言指出。
]]></description>
			<content:encoded><![CDATA[<p>windows内核函数命名的一般格式为：</p>
<p>&lt;Prefix>&lt;Operation>&lt;Object></p>
<p>Prefix指示导出该例程的组件，Operation指出对对象或资源做什么样的动作，Object标示操作的对象或资源。比如ExAllocatePoolWithTag是一个执行体(Executive)例程,用来从分页池(paged pool)或非分页池(nonpaged pool)中分配内存。KeInitializeThread是一个分配并且设置内核线程对象(kernel thread object)的内核例程。<br />
<span id="more-462"></span><br />
下面的表列出了常用的前缀和组件的对应关系。<br />
<h2 class="wp-table-reloaded-table-name">Prefix and Component</h2>
<table id="wp-table-reloaded-id-4-no-1" class="wp-table-reloaded wp-table-reloaded-id-4" cellspacing="1" cellpadding="0" border="0">
<thead>
	<tr class="odd row-1">
		<th class="column-1">Prefix</th><th class="column-2">Component</th>
	</tr>
</thead>
<tbody>
	<tr class="even row-2">
		<td class="column-1">Alpc</td><td class="column-2">Advanced Local Inter-Process Communication</td>
	</tr>
	<tr class="odd row-3">
		<td class="column-1">Cc</td><td class="column-2">Common Cache</td>
	</tr>
	<tr class="even row-4">
		<td class="column-1">Cm</td><td class="column-2">Configuration Manager</td>
	</tr>
	<tr class="odd row-5">
		<td class="column-1">Dbgk</td><td class="column-2">Debugging Framework for User-Mode</td>
	</tr>
	<tr class="even row-6">
		<td class="column-1">Em</td><td class="column-2">Errata Manager</td>
	</tr>
	<tr class="odd row-7">
		<td class="column-1">Etw</td><td class="column-2">Event Tracing for Windows</td>
	</tr>
	<tr class="even row-8">
		<td class="column-1">Ex</td><td class="column-2">Executive support routines</td>
	</tr>
	<tr class="odd row-9">
		<td class="column-1">FsRtl</td><td class="column-2">File System Driver Run-Time Library</td>
	</tr>
	<tr class="even row-10">
		<td class="column-1">Hal</td><td class="column-2">Hardware abstraction layer</td>
	</tr>
	<tr class="odd row-11">
		<td class="column-1">Hvl</td><td class="column-2">Hypervisor Library</td>
	</tr>
	<tr class="even row-12">
		<td class="column-1">Io</td><td class="column-2">I/O manager</td>
	</tr>
	<tr class="odd row-13">
		<td class="column-1">Ke</td><td class="column-2">Kernel</td>
	</tr>
	<tr class="even row-14">
		<td class="column-1">Kd</td><td class="column-2">Kernel Debugger</td>
	</tr>
	<tr class="odd row-15">
		<td class="column-1">Ks</td><td class="column-2">Kernel Streaming</td>
	</tr>
	<tr class="even row-16">
		<td class="column-1">Lsa</td><td class="column-2">Local Security Authority</td>
	</tr>
	<tr class="odd row-17">
		<td class="column-1">Mm</td><td class="column-2">Memory manager</td>
	</tr>
	<tr class="even row-18">
		<td class="column-1">Nt</td><td class="column-2">NT system services(most of which are exported as Win32 functions) ,NT Native API<br />
</td>
	</tr>
	<tr class="odd row-19">
		<td class="column-1">Ob</td><td class="column-2">Object manager</td>
	</tr>
	<tr class="even row-20">
		<td class="column-1">Pf</td><td class="column-2">Prefetcher</td>
	</tr>
	<tr class="odd row-21">
		<td class="column-1">Po</td><td class="column-2">Power manager</td>
	</tr>
	<tr class="even row-22">
		<td class="column-1">Pp</td><td class="column-2">PnP manager</td>
	</tr>
	<tr class="odd row-23">
		<td class="column-1">Ps</td><td class="column-2">Process support</td>
	</tr>
	<tr class="even row-24">
		<td class="column-1">Rtl</td><td class="column-2">Run-time library</td>
	</tr>
	<tr class="odd row-25">
		<td class="column-1">Se</td><td class="column-2">Security</td>
	</tr>
	<tr class="even row-26">
		<td class="column-1">Tm</td><td class="column-2">Transaction manager</td>
	</tr>
	<tr class="odd row-27">
		<td class="column-1">Vf</td><td class="column-2">Verifier</td>
	</tr>
	<tr class="even row-28">
		<td class="column-1">Whea</td><td class="column-2">Windows Hardware Error Architecture</td>
	</tr>
	<tr class="odd row-29">
		<td class="column-1">Wmi</td><td class="column-2">windows management instrumentation</td>
	</tr>
	<tr class="even row-30">
		<td class="column-1">Wdi</td><td class="column-2">windows diagnostic infrastructure</td>
	</tr>
	<tr class="odd row-31">
		<td class="column-1">Zw</td><td class="column-2">The origin of the prefix "Zw" is unknown;it is rumored that this prefix was chosen due to its having no significance at all.Mirror entry point for system services (beginning with Nt) that sets previous access mode to kernel,which eliminates parameter validation, since Nt system services validate parameters only if previous access mode is user mode</td>
	</tr>
	<tr class="even row-32">
		<td class="column-1">Lpc</td><td class="column-2">Local Procedure Call </td>
	</tr>
	<tr class="odd row-33">
		<td class="column-1">Ldr</td><td class="column-2">Loader</td>
	</tr>
	<tr class="even row-34">
		<td class="column-1">Nls</td><td class="column-2">National language support</td>
	</tr>
	<tr class="odd row-35">
		<td class="column-1">Dbg</td><td class="column-2">Debug</td>
	</tr>
	<tr class="even row-36">
		<td class="column-1">Tdi</td><td class="column-2">Transport driver interface</td>
	</tr>
	<tr class="odd row-37">
		<td class="column-1">Csr</td><td class="column-2">Client Server Runtime,represents the interface to the win32 subsystem located in csrss.exe</td>
	</tr>
	<tr class="even row-38">
		<td class="column-1">Inbv</td><td class="column-2">Initialize boot video</td>
	</tr>
</tbody>
</table>
</p>
<p>每一个系统组件还有一个变体前缀来指示内部使用(unexported)的函数，或者是组件前缀的第一个字母后面跟上i(指internal)，或者是全部的前缀跟上字母p(指private)。比如Ki指示一个Kernel内部函数，Psp指示一个Process support内部函数。</p>
<p>有些内核函数还在前缀或简化的前缀后面加上小写字母f，来指示这个函数使用fastcall调用约定,比如ObfDereferenceObject。KfRaiseIrql、KfLowerIrql、KfAcquireSpinLock、KfReleaseSpinLock等亦属此类。</p>
<p>经常会有人问Zw到底是什么单词的缩写(abbreviation),而且有种种的猜测在流传。实际上到现在也没有一个权威的说法，姑且认为选择这样一个古怪的前缀很难与其他组件发生冲突吧。</p>
<p>如果你知道这里没有列出的前缀或者有错误的地方，欢迎留言指出。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/windows/system_routine_naming_convention.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
