<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">EricK's Weblog</title><subtitle type="html">Ramblings of a new employee</subtitle><id>http://blogs.msdn.com/erick/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/erick/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2006-03-17T18:55:00Z</updated><entry><title>The 2007 Revolution!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/05/23/604541.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/05/23/604541.aspx</id><published>2006-05-23T10:24:00Z</published><updated>2006-05-23T10:24:00Z</updated><content type="html">&lt;P&gt;I recently built a new computer at home and took the opportunity to make it a beta software testing platform.&amp;nbsp; I run Vista and&amp;nbsp;Office 2007 on it along with Windows Live Messenger Beta and of course IE7 Beta and Media Player 11 Beta (exclusively, it is not a dual boot machine).&amp;nbsp; I would be running the OneCare Beta on here but that isn't supported yet.&amp;nbsp; I do run it on some other machines I manage though.&lt;/P&gt;
&lt;P&gt;I have definitely run into some issues with software compatibility and a couple of small OS issues, but overall it has been&amp;nbsp;an incredible experience.&amp;nbsp; Before Vista I used to always look at Windows 2000 and think it just looked old and dated compared to XP.&amp;nbsp; Now when I see XP it feels so outdated.&amp;nbsp; There is such a slick look and experience with our latest products.&lt;/P&gt;
&lt;P&gt;I know people have compared the improvements to Apple, but I think it's more than that.&amp;nbsp; I've always appreciated Apple's dedication to design, but I've never been a fan of&amp;nbsp;what they produced,&amp;nbsp;including the OS.&amp;nbsp; I do really like the new look of Windows in Vista.&amp;nbsp; I think we have done a good job of moving forward while still being different.&amp;nbsp; When you run Vista, no matter how much people compare it to Apple, you can still tell you are running Windows (and I don't mean that in a bad way).&lt;/P&gt;
&lt;P&gt;I haven't used Office enough to comment a lot on it now, but I do think Outlook 2007&amp;nbsp;is a large improvement.&amp;nbsp; The integration of RSS feeds along with the new look and ease of use is great.&amp;nbsp; I also appreciate the greater flexibility in categorizing e-mails.&lt;/P&gt;
&lt;P&gt;The bottom line is that we've been able to incorporate cool new features and a cool new look into our products.&amp;nbsp; In XP I used to maximize every window I had open.&amp;nbsp; Now I want to see as many windows on my screen as possible because everything looks so slick.&lt;/P&gt;
&lt;P&gt;I'll have updates on my experience as I go along (it has only been 2 days now as my exclusive home platform), but so far I am pretty impressed.&amp;nbsp; 2007 looks like a great year for us.&amp;nbsp; And I really do stand behind that.&amp;nbsp; I have been buying our stock&amp;nbsp;because I feel we are currently undervalued and do a large positive correction in our stock price that will hopefully come after the launch of Vista and Office 2007.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=604541" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>I Am Back (Hopefully)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/05/23/604529.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/05/23/604529.aspx</id><published>2006-05-23T10:02:00Z</published><updated>2006-05-23T10:02:00Z</updated><content type="html">&lt;P&gt;I have to start off by saying it's been a rough couple of months.&amp;nbsp; I started at Microsoft late November and started getting ill in the middle of January.&amp;nbsp; I can't say I am completely better yet, but I am taking a lot of steps to get things under control.&lt;/P&gt;
&lt;P&gt;Basically my whole digestive system has stopped functioning properly.&amp;nbsp; A lot of things came together at once to make it just a horrible experience.&amp;nbsp; First I started having acid reflux and intense heartburn caused by GERD.&amp;nbsp; Then I stopped being able to digest a variety of foods.&amp;nbsp; And finally I had a lot of inflammation throughout my digestive system that put me in almost constant pain.&lt;/P&gt;
&lt;P&gt;The acid reflux is being controlled by medicine I have to take twice a day timed with my meals so that I don't have intense pain for hours.&amp;nbsp; I am waiting for the results of some tests to determine what my body can no longer digest and am controlling my diet in the meantime.&amp;nbsp; And finally, I am taking lots of supplements to make sure my body has all of the enzymes, etc. for digestion.&lt;/P&gt;
&lt;P&gt;Currently I am taking&amp;nbsp;16 pills a day to control everything.&amp;nbsp; Hopefully my inflammation will go down shortly and I'll be able to cut down the amount of medicine I am taking.&amp;nbsp; In the meantime I am just happy for every mostly pain-free day I have.&lt;/P&gt;
&lt;P&gt;I am extremely lucky to be working at Microsoft during all of this.&amp;nbsp; My schedule has been tailored to my needs and my manager has been more than understanding.&amp;nbsp; At a lot of companies I would have been fired long ago considering I haven't been&amp;nbsp;working that long.&amp;nbsp; Hopefully I'll be able to repay them with some hard work and great results.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=604529" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>User Mode Component of the Filter Manager</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/04/24/582648.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/04/24/582648.aspx</id><published>2006-04-25T06:32:00Z</published><updated>2006-04-25T06:32:00Z</updated><content type="html">Someone sent me an e-mail asking about the user mode component of the Filter Manager.&amp;nbsp; Since I am still not feeling well I won't be writing an entry covering it right now, but you can take a look at this &lt;A href="http://download.microsoft.com/download/f/0/5/f05a42ce-575b-4c60-82d6-208d3754b2d6/UserModeLib.ppt"&gt;presentation&lt;/A&gt;.&amp;nbsp; It is a pretty simple overview of what you can/can't do in user mode.&amp;nbsp; If this is not at all what you were looking for feel free to post a comment on this entry.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=582648" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>Programming While Ill</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/04/20/579692.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/04/20/579692.aspx</id><published>2006-04-20T11:08:00Z</published><updated>2006-04-20T11:08:00Z</updated><content type="html">&lt;P&gt;First of all, I am still sick, but I wanted to at least write something.&amp;nbsp; So, I thought I would write about something that is bugging me right now.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;In all of my previous jobs I could work while I was sick; I got things done a little bit slower, but stuff still got done.&amp;nbsp; That includes jobs I have had in the service industry and jobs I've had at other computer companies.&amp;nbsp; But, the programming project I am working on right now requires a lot of concentration and math.&amp;nbsp; It's not a difficult project in terms of architecture, but there are a lot of little details that I could get wrong and it is a pretty important part of the tool we will be releasing.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;I haven't been sick all day every day, part of the day I will feel well and part of the day I won’t feel like moving.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The problem is that by the time I feel better, do some thinking, and try to get into the design/coding I start to feel sick again.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It’s not the project that is causing me to not feel well; it is interesting and I am excited to get it done.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is starting to get frustrating because each time I have to start the thought process over again.&lt;/P&gt;
&lt;P&gt;So, tomorrow I think I will try writing out every thought I have as I think through the implementation.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’m hoping that will enable me to pick-up where I left off when I do feel well and make some real progress so that I can finish the prototype for this component by the end of this weekend.&lt;/P&gt;
&lt;P&gt;I hope you are all doing well and I promise to start the technical posts again as soon as I feel better.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=579692" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>Sorry for the lack of posts...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/04/06/570587.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/04/06/570587.aspx</id><published>2006-04-07T08:31:00Z</published><updated>2006-04-07T08:31:00Z</updated><content type="html">&lt;P&gt;I&amp;nbsp;apologize for not&amp;nbsp;posting much the last couple&amp;nbsp;weeks.&amp;nbsp; A lot of stuff has been on the back burner because I have been having some medical issues and am going through a bunch of testing.&amp;nbsp; They don't know what it is for sure yet, but I'm hoping it is something minor.&amp;nbsp; Hopefully I can rest up this weekend and get back to posting regularly next week.&amp;nbsp; I hope all of you are having a great week and I'll be sure to finish up answering your questions and posting new content as soon as I feel better.&lt;/P&gt;
&lt;P&gt;Eric&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=570587" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>How dangerous are kernel mode rootkits?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/04/03/567192.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/04/03/567192.aspx</id><published>2006-04-03T13:54:00Z</published><updated>2006-04-03T13:54:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;This post was originally going to be a comment in response to&amp;nbsp;&lt;A href="/erick/archive/2006/04/01/566417.aspx"&gt;rootbeer's question&lt;/A&gt;&amp;nbsp;in a comment to my last blog entry, but it became such a long reply that I decided to make it a post.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The question was:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;“How dangerous are kernel-level rootkits today?”&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I’m not sure how much you know about rootkits, but I’ll assume you know at least the ideas behind how they work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If not, there are plenty of resources that explain how they work online.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Basically a rootkit is the name for a mechanism used to try to hide&amp;nbsp;the existence of code, files, processes, etc.&amp;nbsp;from the rest of the system.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Technically the code hidden inside a rootkit may not have been written to be malicious (in fact it may try to provide a service to the user).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, most people in the operating systems community feel that rootkit methods should never be used.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The reason for this is that by hiding files, etc. rootkits negatively impact a user’s ability to control and manage their own system. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;From now on when I talk about rootkits I will be discussing rootkits that hide malicious code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Rootkits can operate in user mode or kernel mode; more recent and more powerful rootkits operate in kernel mode where they are completely able to hide themselves from user mode.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As viruses have become more sophisticated over the years anti-viruses have had to become more intelligent to detect and destroy viruses.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The same thing is happening currently with rootkits.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As rootkits get better and better at hiding themselves from the system anti-rootkits have to adapt to these changes in the rootkits they try to detect.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The good news is that (as far as I know) as of now no one has come up with a way to completely hide a rootkit from the system.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In trying to hide themselves, rootkits have to interpose at some layer within the operating system so that they can hide whatever they are trying to hide from the rest of the system.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The problem (for rootkit writers) is that it is extremely, extremely difficult to fully hide their interposition mechanism from the system.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;For instance, earlier kernel mode rootkits hid&amp;nbsp;system resources&amp;nbsp;by hooking the system call table.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This allowed them to hide files from the rest of the system, but all it took to discover the rootkit was looking at the system call table for abnormal entries (its not quite this simple because some drivers, like the one with regmon, hooks the system service table for completely different reasons).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The latest kernel mode rootkits (that I am aware of)&amp;nbsp;interpose on the page fault handler so that they can hide the malicious code unless it is trying to be executed.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;However, this requires them to fail access to their code in nonpaged pool.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is something that should never occur (think page fault in nonpaged pool blue screens) and hence it can be detected.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Also, so far they have not been able to hide their interposed page fault handler and so that can be detected also.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;After that long winded discussion there are basically two things to remember.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;First of all, a kernel mode rootkit only gets installed if it is able to find an existing vulnerability to take advantage of (which there are).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;And second, up until now, and in the foreseeable future, rootkits will always have some component that can be detected.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Just like viruses and all code exploits, the race will be between hackers trying to find more sophisticated ways to infiltrate the system and hide their code and the good guys finding ways to detect and remove rootkits.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I don’t think the situation is hopeless and I have a suspicion that years from now we will discuss rootkits the same way we discuss viruses today.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I will end this by saying I am not on the security team and by no means am I a security expert.&amp;nbsp; So, if I got something wrong (it is 4 am after all), something needs to&amp;nbsp;be clarified, or you want to add something to this discussion feel free to leave a comment.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=567192" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>What do you want to know about the Windows kernel?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/04/01/566417.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/04/01/566417.aspx</id><published>2006-04-01T10:36:00Z</published><updated>2006-04-01T10:36:00Z</updated><content type="html">&lt;P&gt;I am by no means a kernel expert,&amp;nbsp;but I do have a couple years of experience working with the Windows kernel and I have done a fair amount of reading about the internals of Windows and operating system development in general.&amp;nbsp; And of course I have looked over a large amount of the Windows code.&lt;/P&gt;
&lt;P&gt;While I've spent the last four months or so getting dug into my position, I need to expand my horizons and choose some areas of the Windows kernel to learn about.&amp;nbsp; I was hoping all of you could help me out by&amp;nbsp;leaving&amp;nbsp;comments&amp;nbsp;with your questions about the Windows kernel.&amp;nbsp; Now, if you are driver developer with over&amp;nbsp;five years of experience there is probably no way I can tell you something you don't know.&amp;nbsp; But, if you are an application developer wanting to know more about the internals of Windows or someone that knows a lot about operating systems&amp;nbsp;theory&amp;nbsp;who is&amp;nbsp;wondering how Windows&amp;nbsp;does something&amp;nbsp;I may be able to help out.&lt;/P&gt;
&lt;P&gt;I'll try to answer as many questions immediately as I can myself; then I will pick from the remaining questions to research (by talking to the person who wrote the Windows component)&amp;nbsp;and get back to you with an answer.&amp;nbsp;&amp;nbsp;I would prefer to&amp;nbsp;stick to&amp;nbsp;general questions about Windows components, no function or parameter specific questions or anything of that sort please.&lt;/P&gt;
&lt;P&gt;Of course I won't release any information that isn't public knowledge.&amp;nbsp; And, as always, please&amp;nbsp;be respectful when asking your questions.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=566417" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>File System Minifilter Drivers (Part 2)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/03/31/566409.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/03/31/566409.aspx</id><published>2006-04-01T09:52:00Z</published><updated>2006-04-01T09:52:00Z</updated><content type="html">&lt;P&gt;In my last entry I covered some basic information about file system minifilter drivers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This entry I want to talk about more about them, specifically their context support.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I don’t think I will make this as long as I previously planned on because I think I want to separate my discussion of callback rules and top tips into a separate entry.&lt;/P&gt;
&lt;P&gt;A driver’s support for contexts begins with the call to &lt;I style="mso-bidi-font-style: normal"&gt;FltRegisterFilter&lt;/I&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The FLT_REGISTRATION typed variable passed into that function includes a pointer to a FLT_CONTEXT_REGISTRATION structure.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This structure is pretty simple:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;typedef struct _FLT_CONTEXT_REGISTRATION {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FLT_CONTEXT_TYPE ContextType;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FLT_CONTEXT_REGISTRATION_FLAGS Flags;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PFLT_CONTEXT_CLEANUP_CALLBACK ContextCleanupCallback;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SIZE_T Size;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ULONG PoolTag;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PFLT_CONTEXT_ALLOCATE_CALLBACK ContextAllocateCallback;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PFLT_CONTEXT_FREE_CALLBACK ContextFreeCallback;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PVOID Reserved1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;} FLT_CONTEXT_REGISTRATION, *PFLT_CONTEXT_REGISTRATION;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Most of this is explained well in MSDN so I won’t go into what each field is, but it is important to remember that if you register multiple context definitions (for the same context type) with varying sizes you need to specify FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH so that the Filter Manager does not fail the allocations of your contexts.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;After that it is easy to allocate a context using &lt;I style="mso-bidi-font-style: normal"&gt;FltAllocateContext&lt;/I&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Currently the context types supported are: FLT_INSTANCE_CONTEXT, FLT_STREAM_CONTEXT, FLT_STREAMHANDLE_CONTEXT, and FLT_VOLUME_CONTEXT (file contexts are not yet supported).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Finally, after being allocated, a context can be set by calling the respective &lt;I style="mso-bidi-font-style: normal"&gt;FltSetxxxContext&lt;/I&gt; routine.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The point of these contexts is to have an easy mechanism for attaching information to an instance, a stream, a stream handle, or a volume that is easily retrievable, reference counted, and garbage collected by the Filter Manager.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;When I was using stream handle contexts in my first minifilter, the main problem I had was with reference counting.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;At a basic level it is pretty simple.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The reference count on a context is increased whenever you call an &lt;I style="mso-bidi-font-style: normal"&gt;FltGetxxxContext&lt;/I&gt; routine and you’ll need to call &lt;I style="mso-bidi-font-style: normal"&gt;FltReleaseContext&lt;/I&gt; when you are done working with the context you retrieved.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can also manually reference a context with &lt;I style="mso-bidi-font-style: normal"&gt;FltReferenceContext&lt;/I&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The problem I had was in understanding what happens when you allocate and set a context.&lt;/P&gt;
&lt;P&gt;The simple answer is that both increment the reference count.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;So, in the MSDN entry for &lt;I style="mso-bidi-font-style: normal"&gt;FltSetxxxContext&lt;/I&gt; it says you need to call &lt;I style="mso-bidi-font-style: normal"&gt;FltReleaseContext&lt;/I&gt; for a successful or a failed &lt;I style="mso-bidi-font-style: normal"&gt;FltSetxxxContext&lt;/I&gt; call.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The problem is that there is actually a bit of a difference in the failure and successful case.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If the set context fails you actually need to call &lt;I style="mso-bidi-font-style: normal"&gt;FltReleaseContext&lt;/I&gt; twice to remove the reference from the allocation and the failed set context call to get the context to be garbage collected.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In the successful case you call &lt;I style="mso-bidi-font-style: normal"&gt;FltReleaseContext&lt;/I&gt; to get rid of the reference count from the allocation and you are left with a reference count of one on the context.&lt;/P&gt;
&lt;P&gt;The other thing to watch out for is close operations.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance, the reference count on my stream handle contexts was automatically decremented on a successful close of the file (in between the PreClose and PostClose callbacks).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you understand what causes reference count events on your contexts and keep close track of them the Filter Manager’s support for reference counting and context cleanup callbacks are extremely helpful.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;That is about all I have to say about context support in the Filter Manager.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The Filter Manager’s support for contexts makes them extremely powerful and easy to use, but also very generic.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They should be a good fit for any information you need to attach to a specific instance, stream, stream handle, or volume.&lt;/P&gt;
&lt;P&gt;In my next post I will discuss some general rules of callbacks (specifically IRQL levels and the issues around handling that) and some of my general tips for working with the Filter Manager.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=566409" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>File System Minifilter Drivers (Part 1)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/03/27/562257.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/03/27/562257.aspx</id><published>2006-03-27T22:24:00Z</published><updated>2006-03-27T22:24:00Z</updated><content type="html">&lt;P&gt;For my first technical post I wanted to talk about the Windows component I have been learning about and working with the most, the Filter Manager.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;After working on &lt;A href="http://nooks.cs.washington.edu"&gt;Nooks&lt;/A&gt; at college, I came to Microsoft aware of the difficulty in writing a driver for Windows.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When I get really frustrated I compare understanding IRPs to understanding quantum mechanics, but that isn’t exactly a fair comparison.&lt;/P&gt;
&lt;P&gt;The Filter Manager was meant to create a simple mechanism for drivers to filter file system operations: file system minifilter drivers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;File system minifilter driver are located between the I/O manager and the base filesystem, not between the filesystem and the storage driver(s) like legacy file system filter drivers.&lt;/P&gt;
&lt;P&gt;Now, I should mention that this isn’t a new mechanism; it has been around for a while.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But, undoubtedly some people are aware of it but haven’t used it yet (like me until recently) and I feel it is important that every driver writer be aware of how they work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If a file system minifilter driver provides the functionality you need then you should write one; file system minifilter drivers are simpler than legacy drivers and hence less prone to bugs (at least theoretically).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you already know how the Filter Manager works I won’t be providing any inside information or upcoming updates, so feel free to skip this post.&lt;/P&gt;
&lt;P&gt;The old mechanism of filtering file system operations (between the filesystem and storage driver(s)) required handling IRPs and the creation/handling of device objects.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;On the other hand, file system minifilter drivers that utilize the Filter Manager utilize a callback mechanism.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This callback mechanism specifies what IRPs you are interested in filtering.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The structure for doing this is extremely simple.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;const FLT_OPERATION_REGISTRATION FilterCallbacks[] = {&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{IRP_MJ_CREATE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PreCreate,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PostCreate,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;NULL},&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{IRP_MJ_WRITE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0, &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PreWrite,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;NULL},&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{IRP_MJ_CLOSE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;0, &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PreClose,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PostClose,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;NULL},&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{IRP_MJ_OPERATION_END}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;This structure is passed to the Filter Manager (with some other registration information) in a call to &lt;I style="mso-bidi-font-style: normal"&gt;FltRegisterFilter&lt;/I&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;These callback functions (PreCreate, PostClose, etc.) then need to be defined in the driver and the filter manager ensures that the appropriate functions are called when it receives the IRPs you specified you wanted callbacks for.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The pre-callbacks are for IRPs going from the I/O manager to the base filesystem.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The function signature for pre-callbacks is:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-weight: bold"&gt;typedef&amp;nbsp;FLT_PREOP_CALLBACK_STATUS&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;(*PFLT_PRE_OPERATION_CALLBACK)&amp;nbsp;(&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;OUT&amp;nbsp;PFLT_CALLBACK_DATA&amp;nbsp;&lt;/SPAN&gt;&lt;I&gt;Data&lt;/I&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;,&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;PCFLT_RELATED_OBJECTS&amp;nbsp;&lt;/SPAN&gt;&lt;I&gt;FltObjects&lt;/I&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;,&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OUT&amp;nbsp;PVOID&amp;nbsp;*&lt;/SPAN&gt;&lt;I&gt;CompletionContext&lt;/I&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Post-callbacks are for IRPs going in the opposite direction, from the base filesystem to the I/O manager and their function signature is:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-weight: bold"&gt;typedef&amp;nbsp;FLT_POSTOP_CALLBACK_STATUS&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;(*PFLT_POST_OPERATION_CALLBACK)&amp;nbsp;(&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;OUT&amp;nbsp;PFLT_CALLBACK_DATA&amp;nbsp;&lt;/SPAN&gt;&lt;I&gt;Data&lt;/I&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;,&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;PCFLT_RELATED_OBJECTS&amp;nbsp;&lt;/SPAN&gt;&lt;I&gt;FltObjects&lt;/I&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;,&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;PVOID&amp;nbsp;&lt;/SPAN&gt;&lt;I&gt;CompletionContext&lt;/I&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;,&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IN&amp;nbsp;FLT_POST_OPERATION_FLAGS&amp;nbsp;&lt;/SPAN&gt;&lt;I&gt;Flags&lt;/I&gt;&lt;BR&gt;&lt;SPAN style="mso-bidi-font-weight: bold"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;There are a couple parameter differences between the pre- and post-callbacks, but the general idea is the same.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The &lt;I style="mso-bidi-font-style: normal"&gt;Data&lt;/I&gt; parameter specifies information about an I/O operation.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Basically it represents the IRP information but in a simple to use container.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The &lt;I style="mso-bidi-font-style: normal"&gt;FltObjects&lt;/I&gt; parameter provides pointers to objects related to the operation including the volume and file object.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The &lt;I style="mso-bidi-font-style: normal"&gt;CompletionContext&lt;/I&gt; parameter is extremely helpful for passing information between the callbacks.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Any pre-callback can set &lt;I style="mso-bidi-font-style: normal"&gt;CompletionContext&lt;/I&gt; and that pointer will be passed in to the post-callback.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;The &lt;I style="mso-bidi-font-style: normal"&gt;CompletionContext&lt;/I&gt; mechanism and context support are my two most used components of the Filter Manager.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;While &lt;I style="mso-bidi-font-style: normal"&gt;CompletionContext&lt;/I&gt; allows you to attach information to a specific IRP operation, the Filter Manager’s context support allows you to attach information to a volume, instance, file, stream, or stream handle (support for all of these are not yet completed, so check the latest information in MSDN to see what is currently supported).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;While being able to transfer information to a post-callback is useful, sometimes higher-level tracking is required.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance, a filter driver wanting to track all operations across the lifetime of a particular file open would use stream handles (which operates at the file object level).&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;In my next post I will continue with a more in-depth discussion of the Filter Manager’s context support.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Anyone wanting to learn more about file system minifilter drivers should look at &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IFSK_d/hh/IFSK_d/fsminifiltdrvhdr_38fa4843-cd6a-4248-936f-bf882bcd0724.xml.asp"&gt;MSDN&lt;/A&gt; and the file system minifilter driver &lt;A href="http://www.microsoft.com/whdc/driver/filterdrv/default.mspx"&gt;WHDC&lt;/A&gt; page.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=562257" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>My kernel development experience</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/03/21/556366.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/03/21/556366.aspx</id><published>2006-03-21T11:50:00Z</published><updated>2006-03-21T11:50:00Z</updated><content type="html">&lt;P&gt;In a previous post I mentioned that I would discuss my qualifications for being the kernel-mode go-to-guy for my group despite only having a bachelor’s degree and so I figured now is as good a time as any to discuss it.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;Well, first of all, I spent six years at &lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:place w:st="on"&gt;&lt;st1:PlaceType w:st="on"&gt;University&lt;/st1:PlaceType&gt; of &lt;st1:PlaceName w:st="on"&gt;Washington&lt;/st1:PlaceName&gt;&lt;/st1:place&gt; getting a BS in computer engineering and a BS in physics.&amp;nbsp; That's enough time for a normal person to get a masters degree, but I've never been very normal.&amp;nbsp; I was interested in pretty much every class at school and so I ended up with 341 credits.&amp;nbsp; The last year and a half I tried to get involved in research and so I got involved with the Nooks project.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;At a high level Nooks is a system for driver reliability that isolates drivers in order to detect errors and then handle the errors by unloading and reloading the driver without user interaction and with only a very short interruption to system responsiveness.&amp;nbsp; There are a lot of good papers and presentations on Nooks at &lt;A href="http://nooks.cs.washington.edu/"&gt;http://nooks.cs.washington.edu/&lt;/A&gt;. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;There were a lot of factors that came together to allow me to work on Nooks and I feel extremely lucky.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;First, I had Professor Hank Levy for operating systems and Mike Swift as my TA.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Hank* is an incredible professor and got a lot of the people in the class excited about operating systems, including me.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Mike had come back to graduate school after working at Microsoft and spent some time discussing his research project (Nooks) and it sounded very interesting.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;A group of us decided to take the operating systems capstone (basically a quarter long project course for seniors) the following quarter.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Second, Gary Kimura, one of the original NT designers that came from DEC with Dave Cutler, is a visiting professor at UW.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Besides teaching the undergraduate operating systems class and the software engineering courses, &lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;Gary&lt;/st1:place&gt;&lt;/st1:City&gt; teaches the operating systems capstone class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As anyone that was around at Microsoft when &lt;st1:City w:st="on"&gt;Gary&lt;/st1:City&gt; was working there will tell you, &lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;Gary&lt;/st1:place&gt;&lt;/st1:City&gt; is incredibly sharp and a great person.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;He was a great resource for us and got us excited about NT with his stories about the history and personalities of NT.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;He also brought in lectures from Microsoft, including Landy Wang and Darryl Havens who both recently were promoted to Distinguished Engineers.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Third, &lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;Gary&lt;/st1:place&gt;&lt;/st1:City&gt; had worked with Microsoft to allow us (nearly) full access to the Windows 2000 source code.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;While Mike was working on Nooks for Linux, a couple of us decided to spend our time in the operating system capstone, and several research quarters after that, working on writing Nooks for NT.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It was incredibly overwhelming and rewarding at the same time.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Hank and Mike weren’t able to look at the source code and so sometimes it became difficult trying to work through issues without discussing any internals of the operating system that weren’t publicly available.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;And lastly, Nooks was an amazing project.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It won best paper at SOSP and several other awards.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;All of these factors combined to provide the most amazing combination of talent and projects that I had ever experienced (and that has only since been surpassed by working at Microsoft).&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;This has already gone a bit long, but I had a lot of kernel experience from working on Nooks for Windows.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I wrote a loader based off of the driver verifier loader, the object tracker, the garbage collector, the memory manager for Nooks, and various other bits and pieces.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I learned a lot and had some incredible teachers and I will forever be in debt to them.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Well after writing all of that I’m not sure if it really stated my credentials, but it at least gave an idea of some of my background.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=1&gt;* I always feel disrespectful calling Hank, Mike, and &lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;Gary&lt;/st1:place&gt;&lt;/st1:City&gt; by their first names, but that’s what they always insisted I call them by.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=556366" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>What do people think of MSDN?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/03/17/554253.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/03/17/554253.aspx</id><published>2006-03-18T05:24:00Z</published><updated>2006-03-18T05:24:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;One of the things about being a new employee at any company is learning how to find the information to do your job.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;One of the primary resources is of course the code, but usually you don’t want to have to look at the code itself to determine how to use it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you always looked at the code, you’d never get anything done.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The people are also a large resource too, but you don’t want to bother people all the time because they too have things to get done.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So, a lot of the time I end up using MSDN to look up information about functions/systems.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Some examples of things I read a lot about were Windows Management Instrumentation (WMI) and the Filter Manager.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Now, before I say anything negative, I should mention that MSDN (from my viewpoint) has a lot of useful information and I can’t even imagine being tasked with keeping it up-to-date, organized, and easy to read.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But, one experience I have had several times is that MSDN will get me started, but I will have some errors pop up in my code.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Usually those errors are caused by not realizing something small but important.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance, it could be that a parameter is set to NULL in an error case or that the data I received is formatted in a certain way, etc.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Usually I end up solving these types of issues by doing a search on the web/intranet.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That usually leads me to a presentation that the authors of the subsystem made at some point to clarify things that people seemed to be missing.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance, the case where I was missing that a parameter was set to NULL in the error case was in regards to registry callbacks using CmRegisterCallback.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In the RegNtPostCreateKey callback, (*Argument2)-&amp;gt;Object is set to NULL if the create failed.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Now, I should probably have thought about this, but sometimes when you are moving fast or dealing with other complexities at the same time (like the fact that you have to do a double dereference on Argument2 for RegNtPostCreateKey) shifts your mind from catching these things.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So, I started to think that it might be a good idea to tie the developers to their MSDN content more.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I’m not saying that the developers should be tasked with managing MSDN, but that they should learn to keep it in mind.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance, obviously that issue was included in the presentation because some people were having problems with it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Wouldn’t it have been nice if the person who made the presentation sat down and said, “Hey, I have to clarify this in my presentation, maybe we should clarify it in MSDN also.”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I am not trying to pick on the writer of CmRegisterCallback as I also had this issue with the Filter Manager and other components.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So, I’m curious about people’s experiences with MSDN, specifically people with much more experience using it than me.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Now, I don’t want this to turn into an MSDN hate thread, so please only give constructive feedback on your experiences.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you only want to say that you think it is horrible, I am aware that there are a lot of people that feel that way and that that feedback does not help make it better.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I should also say that I don’t work on MSDN, but I may follow up with the people that are if I feel I have some concrete steps/actions that would help to improve MSDN.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=554253" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>My Position</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/03/17/554240.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/03/17/554240.aspx</id><published>2006-03-18T05:02:00Z</published><updated>2006-03-18T05:02:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;So, I guess I should start off with some information about what exactly I do at Microsoft.&amp;nbsp; As I mentioned, I started almost four months ago as a software development engineer (SDE).&amp;nbsp; I work in the Windows Core division in what is known as Windows Fundamentals.&amp;nbsp; And, within Windows Fundamentals I work with the application compatibility group.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;My group is the one in charge of making sure that your applications keep running across operating system upgrades.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There are several components to that: testing applications with new versions of operating systems, serving as a resource for other Windows groups to ask about the impact of operating systems changes they are considering, and finding ways to help companies detect and fix compatibility problems in their software (after all, companies have a lot of internal-only software that they rely on).&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I was hired to focus on low-level issues. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;A large portion of the group I work on focuses on user-mode components (although they of course know a lot about the internals of the OS).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;My job is to become an expert on the kernel mode components of the operating system and to be the go-to guy for any kernel mode components that need to be written.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Now, someone might ask why someone fresh out of college with only a bachelor’s degree would be in the position I am in, but that’s something I will address in a future post.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For now, suffice it to say that I have a decent background in Windows kernel development despite being fresh out of college.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;I will write more about what I do later, but that’s the high level view for now.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=554240" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry><entry><title>Getting started</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/erick/archive/2006/03/17/554238.aspx" /><id>http://blogs.msdn.com/erick/archive/2006/03/17/554238.aspx</id><published>2006-03-18T04:55:00Z</published><updated>2006-03-18T04:55:00Z</updated><content type="html">&lt;P&gt;I should probably rename this blog a bit since I've actually been at Microsoft for almost four months now, but the name will work for now.&amp;nbsp; I have several main interests in starting this blog: talking about working at Microsoft, talking about my first job after college, and various technical topics.&amp;nbsp; A lot of the blogs on this site have a lot of technical information, which is great, but I think that if I just tried to write about technical information I would have almost nothing to say (and I'd probably get corrected a lot).&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;So, I'll start off with some background about myself in future entries and then will try to keep the content fairly mixed.&amp;nbsp; As I get more experience the balance may change, but I will always try to keep things interesting.&amp;nbsp; Feel free to leave comments as long as they are kept respectful.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=554238" width="1" height="1"&gt;</content><author><name>EricK</name><uri>http://blogs.msdn.com/members/EricK.aspx</uri></author></entry></feed>