<?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/%e6%96%87%e4%bb%b6/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/34.html</link>
		<comments>http://www.lingdux.com/2009/34.html#comments</comments>
		<pubDate>Mon, 01 Jun 2009 19:06:17 +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=34</guid>
		<description><![CDATA[驱动中文件的操作和在ring3下对文件的操作有所不同，ring3下直接输文件路径就可以对文件操作了，在驱动中应该先为文件初始化一个对象，然后对这个对象操作，下面来编写一个驱动实现创建一个文件并写入字符串“www.lingdux.com”。

首先确定一下流程：

1.定义一个操作对象OBJECT_ATTRIBUTES

<span class="readmore"><a href="http://www.lingdux.com/2009/34.html" title="驱动学习笔记&#8211;文件操作">阅读全文——共1362字</a></span>]]></description>
			<content:encoded><![CDATA[<p>驱动中文件的操作和在ring3下对文件的操作有所不同，ring3下直接输文件路径就可以对文件操作了，在驱动中应该先为文件初始化一个对象，然后对这个对象操作，下面来编写一个驱动实现创建一个文件并写入字符串“<a href="http://www.lingdux.com”" target="_blank">www.lingdux.com”</a>。</p>
<p>首先确定一下流程：</p>
<p>1.定义一个操作对象OBJECT_ATTRIBUTES</p>
<p>2.用InitializeObjectAttributes()函数初始化这个对象</p>
<p>3.用ZwCreateFile()函数来创建一个文件</p>
<p>4.用ZwWriteFile()函数写入字符串</p>
<p>5. 关闭打开的文件ZwClose();</p>
<p>实现代码如下：</p>
<p><span id="more-34"></span></p>
<p>#include &lt;ntddk.h&gt;<br />
void UnLoad(IN PDRIVER_OBJECT DriverObject)<br />
{}<br />
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)<br />
{<br />
 UNICODE_STRING mystr;//定义字符串结构用来存放字符串<br />
 UNICODE_STRING mypath;//定义字符串结构来存放路径<br />
 OBJECT_ATTRIBUTES myoa;//定义一个操作对象<br />
 HANDLE hfile=NULL;//定义一个句柄用于接收返回的文件句柄<br />
 IO_STATUS_BLOCK iostatus;//定义结构用来接收打开文件的返回值</p>
<p> </p>
<p> RtlInitUnicodeString(&amp;mystr,L&#8221;<a href="http://www.lingdux.com" target="_blank">www.lingdux.com</a>&#8220;);//初始化字符串<br />
 RtlInitUnicodeString(&amp;mypath,L&#8221;\\??\\E:\\lingdux.txt&#8221;);//初始化路径字符串<br />
 InitializeObjectAttributes(//初始化操作对象<br />
  &amp;myoa,//操作对象<br />
  &amp;mypath,//路径<br />
  OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE,//属性<br />
  NULL,<br />
  NULL<br />
  );<br />
 ZwCreateFile(//创建文件<br />
  &amp;hfile,//返回的句柄<br />
  GENERIC_ALL,//打开文件时候的权限<br />
  &amp;myoa,//文件对象<br />
  &amp;iostatus,//返回值<br />
  NULL,<br />
  FILE_ATTRIBUTE_NORMAL,<br />
  FILE_SHARE_READ,//共享权限<br />
  FILE_OPEN_IF,//打开文件的方式<br />
  FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,<br />
  NULL,<br />
  0);<br />
 ZwWriteFile(<br />
  hfile,//文件句柄<br />
  NULL,<br />
  NULL,<br />
  NULL,<br />
  &amp;iostatus,//返回值<br />
  mystr.Buffer,//字符串缓冲区<br />
  mystr.Length,//字符串长度<br />
  NULL,<br />
  NULL<br />
  );<br />
 ZwClose(hfile);<br />
 DriverObject-&gt;DriverUnload=UnLoad;<br />
 return STATUS_SUCCESS;<br />
}</p>
<p>编译后用驱动加载工具加载，成功在E盘根目录想建立文件lingdux.txt，内容为“<a href="http://www.lingdux.com" target="_blank">www.lingdux.com</a>”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lingdux.com/2009/34.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
