<?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>知识库 &#187; 上下文</title>
	<atom:link href="http://www.wezu.net/blog/archives/tag/%e4%b8%8a%e4%b8%8b%e6%96%87/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wezu.net/blog</link>
	<description>知识就是力量，知识就是财富！</description>
	<lastBuildDate>Fri, 06 Feb 2009 03:15:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>在miniFilter驱动里管理上下文</title>
		<link>http://www.wezu.net/blog/archives/42</link>
		<comments>http://www.wezu.net/blog/archives/42#comments</comments>
		<pubDate>Tue, 11 Nov 2008 07:06:55 +0000</pubDate>
		<dc:creator>snox</dc:creator>
				<category><![CDATA[miniFilter]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[上下文]]></category>

		<guid isPermaLink="false">http://www.wezu.net/blog/?p=42</guid>
		<description><![CDATA[上下文 是一个由微过滤器定义的结构，可以用于和一个过滤管理器对象关联。微过滤器可以微下列对象创建和设置上下文： 文件(Files，Vista及后续操作系统) 实例 卷 流 流句柄（File objects） Transactions(Files，Vista及后续操作系统) 除了卷上下文必须在非分页的内存池上分配，其他的既可以在非分页也可以在分页内存池中分配。 过滤管理器在他们挂载的对象删除后、微过滤器驱动实例从卷上解挂载或微过滤器卸载，自动删除相关的上下文。 注册上下文类型 当微过滤器驱动在DriverEntry中调用 FsRegisterFilter时，必须注册好每个要使用的上下文类型。 要注册上下文类型，微过滤器驱动创建一个类型为 FLT_CONTEXT_REGISTRATION 的变长数组。保持在 FLT_REGISTRATION 结构的 ContextRegistration 域中，传递到 FltRegisterFilter 函数的 Registration 参数。数组中的成员的顺序没有关系，但最后一个成员必须是 {FLT_CONTEXT_END}。 对于微过滤器驱动使用到的每一个上下文类型，FLT_CONTEXT_REGISTRATION 结构必须至少提供一个上下文定义。每一个FLT_CONTEXT_REGISTRATION结构定义了上下文的类型、大小和其他信息。 微过滤器驱动调用FltAllocateContext创建一个新的上下文，过滤管理器使用size参数 对于固定大小的上下文，FLT_CONTEXT_REGISTRATION结构的Size成员指定了字节大小，上下文的大小最大为MAXUSHORT(64KB)。0也是一个有效的值。过滤管理器用旁视列表分配固定大小的上下文。 对于不定大小的上下文，Size成员必须设置为FLT_VARIABLE_SIZED_CONTEXTS。过滤管理器直接从分页或非分页的内存池中分配不定长的上下文。 FLT_CONTEXT_REGISTRATION结构的Flags成员，可以指定FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH。如果微过滤器驱动使用定长的上下文，并且指定了这个标志，上下文的大小大于等于请求的长度的话，过滤管理器从旁视列表里分配内存。否则上下文大小必须等于请求大小。 对于一个给定的上下文类型，微过滤器驱动可以支持3种固定大小（每一个大小不同）的上下文定义和1种变长定义。【更多信息，参见FLT_CONTEXT_REGISTRATION】 微过滤器驱动支持可选上下文释放前的清理回调例程。【参见 PFLT_CONTEXT_CLEANUP_CALLBACK】 微过滤器驱动可以定义一个他自己的分配、释放回调例程。【参见PFLT_CONTEXT_ALLOCATE_CALLBACK 和 PFLT_CONTEXT_FREE_CALLBACK】。 下面是从CTX示例中的部分代码，展示了一个用于注册实例、文件、流和文件对象（流句柄）的FLT_CONTEXT_REGISTRATION结构数组。]]></description>
			<content:encoded><![CDATA[<p><em>上下文</em> 是一个由微过滤器定义的结构，可以用于和一个过滤管理器对象关联。微过滤器可以微下列对象创建和设置上下文：</p>
<ul>
<li>文件(Files，Vista及后续操作系统)</li>
<li>实例</li>
<li>卷</li>
<li>流</li>
<li>流句柄（File objects）</li>
<li>Transactions(Files，Vista及后续操作系统)</li>
</ul>
<p>除了卷上下文必须在非分页的内存池上分配，其他的既可以在非分页也可以在分页内存池中分配。</p>
<p>过滤管理器在他们挂载的对象删除后、微过滤器驱动实例从卷上解挂载或微过滤器卸载，自动删除相关的上下文。</p>
<h3>注册上下文类型</h3>
<p>当微过滤器驱动在<strong>DriverEntry</strong>中调用 <strong>FsRegisterFilter</strong>时，必须注册好每个要使用的上下文类型。</p>
<p>要注册上下文类型，微过滤器驱动创建一个类型为 FLT_CONTEXT_REGISTRATION 的变长数组。保持在 FLT_REGISTRATION 结构的<strong> ContextRegistration</strong> 域中，传递到<strong> FltRegisterFilter</strong> 函数的<em> Registration</em> 参数。数组中的成员的顺序没有关系，但最后一个成员必须是 {FLT_CONTEXT_END}。</p>
<p>对于微过滤器驱动使用到的每一个上下文类型，FLT_CONTEXT_REGISTRATION 结构必须至少提供一个上下文定义。每一个FLT_CONTEXT_REGISTRATION结构定义了上下文的类型、大小和其他信息。</p>
<p>微过滤器驱动调用FltAllocateContext创建一个新的上下文，过滤管理器使用size参数</p>
<p>对于固定大小的上下文，FLT_CONTEXT_REGISTRATION结构的<strong>Size</strong>成员指定了字节大小，上下文的大小最大为MAXUSHORT(64KB)。0也是一个有效的值。过滤管理器用旁视列表分配固定大小的上下文。</p>
<p>对于不定大小的上下文，<strong>Size</strong>成员必须设置为FLT_VARIABLE_SIZED_CONTEXTS。过滤管理器直接从分页或非分页的内存池中分配不定长的上下文。</p>
<p>FLT_CONTEXT_REGISTRATION结构的<strong>Flags</strong>成员，可以指定FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH。如果微过滤器驱动使用定长的上下文，并且指定了这个标志，上下文的大小大于等于请求的长度的话，过滤管理器从旁视列表里分配内存。否则上下文大小必须等于请求大小。</p>
<p>对于一个给定的上下文类型，微过滤器驱动可以支持3种固定大小（每一个大小不同）的上下文定义和1种变长定义。【更多信息，参见FLT_CONTEXT_REGISTRATION】</p>
<p>微过滤器驱动支持可选上下文释放前的清理回调例程。【参见 PFLT_CONTEXT_CLEANUP_CALLBACK】</p>
<p>微过滤器驱动可以定义一个他自己的分配、释放回调例程。【参见PFLT_CONTEXT_ALLOCATE_CALLBACK 和 PFLT_CONTEXT_FREE_CALLBACK】。</p>
<p>下面是从CTX示例中的部分代码，展示了一个用于注册实例、文件、流和文件对象（流句柄）的FLT_CONTEXT_REGISTRATION结构数组。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wezu.net/blog/archives/42/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
