<?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>零度x&#039;s blog &#187; 符号连接</title>
	<atom:link href="http://www.lingdux.com/tag/%e7%ac%a6%e5%8f%b7%e8%bf%9e%e6%8e%a5/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lingdux.com</link>
	<description>Take it slowly,it&#039;s OK,it&#039;s OK.</description>
	<lastBuildDate>Wed, 04 Aug 2010 01:09:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>驱动学习笔记&#8211;设备与符号连接</title>
		<link>http://www.lingdux.com/2009/61.html</link>
		<comments>http://www.lingdux.com/2009/61.html#comments</comments>
		<pubDate>Wed, 10 Jun 2009 10:46:44 +0000</pubDate>
		<dc:creator>零度x</dc:creator>
				<category><![CDATA[驱动学习]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[符号连接]]></category>
		<category><![CDATA[设备]]></category>
		<category><![CDATA[驱动]]></category>

		<guid isPermaLink="false">http://www.lingdux.com/?p=61</guid>
		<description><![CDATA[创建设备与符号连接是为了驱动程序和应用程序的交互。

流程很简单：

1.用IoCreateDevice()函数创建设备对性。

<span class="readmore"><a href="http://www.lingdux.com/2009/61.html" title="驱动学习笔记&#8211;设备与符号连接">阅读全文——共1232字</a></span>]]></description>
			<content:encoded><![CDATA[<p>创建设备与符号连接是为了驱动程序和应用程序的交互。</p>
<p>流程很简单：</p>
<p>1.用IoCreateDevice()函数创建设备对性。</p>
<p>2.用IoCreateSymbolicLink()函数来绑定设备和符号链接。</p>
<p>3.卸载时用IoDeleteSymbolicLink删除符号连接。</p>
<p>4.然后用IoDeleteDevice来删除设备。</p>
<p>完整代码如下：</p>
<p>#include &#8220;ntddk.h&#8221;</p>
<p><span id="more-61"></span><br />
void Unload(IN PDRIVER_OBJECT DriverObject)<br />
{<br />
 //定义两个临时设备对象用于删除设备对象<br />
 PDEVICE_OBJECT temp1;<br />
 PDEVICE_OBJECT temp2;<br />
 UNICODE_STRING symboliclinkname;//定义符号连接名称<br />
 RtlInitUnicodeString(&amp;symboliclinkname,L&#8221;\\??\\mysymboliclink&#8221;);//初始化符号连接名称<br />
 IoDeleteSymbolicLink(&amp;symboliclinkname);//删除符号连接<br />
 if(DriverObject)<br />
 {<br />
  temp1=DriverObject-&gt;DeviceObject;<br />
  while(temp1)<br />
  {<br />
   temp2=temp1;<br />
   temp1=temp1-&gt;NextDevice;<br />
   IoDeleteDevice(temp2);//删除设备<br />
  }<br />
 }<br />
}<br />
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)<br />
{<br />
 PDEVICE_OBJECT mydevice;//定义设备对象<br />
 UNICODE_STRING devicename;//定义设备名称<br />
 UNICODE_STRING symboliclinkname;//定义符号连接名称<br />
 RtlInitUnicodeString(&amp;devicename,L&#8221;\\Device\\mydevice&#8221;);//初始化设备名称<br />
 RtlInitUnicodeString(&amp;symboliclinkname,L&#8221;\\??\\mysymboliclink&#8221;);//初始化符号连接名称<br />
 IoCreateDevice(<br />
  DriverObject,//驱动对象<br />
  0,<br />
  &amp;devicename,//设备名称<br />
  FILE_DEVICE_UNKNOWN,//类型<br />
  0,<br />
  FALSE,<br />
  &amp;mydevice//设备对象<br />
  );<br />
 IoCreateSymbolicLink(<br />
  &amp;symboliclinkname,//符号链接名称<br />
  &amp;devicename//设备名称<br />
  );<br />
DriverObject-&gt;DriverUnload=Unload;<br />
 return STATUS_SUCCESS;<br />
}</p>
<p>使用winobj成功看到名称为mysymboliclink的符号连接，和mydevice绑定，如图所示：</p>
<p><img class="aligncenter size-full wp-image-64" title="devicelink" src="http://www.lingdux.com/wp-content/uploads/2009/06/devicelink.jpg" alt="devicelink" width="657" height="406" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lingdux.com/2009/61.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
