<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Comment Feed for Channel 9 - Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
	<atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model/RSS"></atom:link>
	<image>
		<url>http://ecn.channel9.msdn.com/o9/previewImages/100/227866_100x75.jpg</url>
		<title>Channel 9 - Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<link></link>
	</image>
	<description>The upcoming release of Windows CE 6.0 ships with a redesigned kernel, memory model and device driver architecture, Juggs Ravalia is a Program Manager on the Windows CE drivers team who gives us the low down on the new driver architecture and what that
 means for embedded device developers. Mike Hall, Senior Product Manager and Channel 9 correpsondent, conducts this interview.</description>
	<link></link>
	<language>en</language>
	<pubDate>Sun, 19 May 2013 15:57:16 GMT</pubDate>
	<lastBuildDate>Sun, 19 May 2013 15:57:16 GMT</lastBuildDate>
	<generator>Rev9</generator>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[There was a lot of knowledge shared here. I can't say I understood it all, but it's really inspirational.<br /><br />I think this clip was better than the other on CE 6.0. Seems like a lot of confusion in that clip.<br /><br />Great job. Show us your... skills... <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-5.gif' alt='Wink' /><br /><p>posted by LiQ</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632933116420000000</link>
		<pubDate>Fri, 08 Sep 2006 11:27:22 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632933116420000000</guid>
		<dc:creator>LiQ</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Thanks LiQ for your comments<br /><br />Let me know what needs further clarification if any and I will do my best to explain it better <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-5.gif' alt='Wink' /><p>posted by ravalia</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632936297150000000</link>
		<pubDate>Tue, 12 Sep 2006 03:48:35 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632936297150000000</guid>
		<dc:creator>ravalia</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Will watch the video tonight.&nbsp; Question:<br />I asked a question to Peter Wieland on his Channel 9 video of UMDF about if the source code for a UMDF can be recompiled in the Windows CE 6.0 environment and the Driver will run.&nbsp;&nbsp; He&nbsp;replied and left the question open.<br /><br />You can of course see the benifits of this just as WDM did for Windows 98 and Windows 2000.&nbsp;&nbsp; You get of course &quot;free&quot; drivers shared between Windows and Windows CE.<br /><br />-William Michael Jones<br /><br /><br /><br /><p>posted by mjones</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632955692690000000</link>
		<pubDate>Wed, 04 Oct 2006 14:34:29 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632955692690000000</guid>
		<dc:creator>mjones</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[I enjoyed the video.<br />(1) On all of the interviews on Channel 9, why not use the PC tablet instead of a white board.&nbsp; Hard to see the white board.&nbsp; Cool app time maybe for creating presentations.&nbsp; Use it here then sell it.<br />(2) Just a suggestion, synchronous and asynchronous sounded exactly the same Juggs on the Video.<br />(3) After adjusting to the two above the presentation was Excellent.&nbsp; You are clear and you convey understanding.&nbsp;Thank you. I for one liked when you showed how some of the supported Kernal apis are supported in both kernel and user mode.&nbsp; Also the statement
 the Reflexor is the nucleus of the UMDF.<em>&nbsp;</em><br />(4) Using UMDF in Windows CE stills teases me with respect to porting code from Windows to Windows CE.<br /><p>posted by mjones</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632958397960000000</link>
		<pubDate>Sat, 07 Oct 2006 17:43:16 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c632958397960000000</guid>
		<dc:creator>mjones</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Hi Juggs,<br /><br />How many drivers do&nbsp;my Windows Embedded CE Device has on an average ?<p>posted by funkster_smokey</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633004023170000000</link>
		<pubDate>Wed, 29 Nov 2006 13:05:17 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633004023170000000</guid>
		<dc:creator>funkster_smokey</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[William<br /><br />We have been working hand in hand with Peter Wieland to make sure our technologies align well. That said, drivers today on the desktop and CE are of different forms and whenever we think of introducing WDM compatibility for CE, we always wonder if there are
 a ton of chips shared across the two platforms and the ROM Size implications<br /><br />Rest assured, we are always working to get the best for our customers for all platforms<p>posted by ravalia</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633013079750000000</link>
		<pubDate>Sun, 10 Dec 2006 00:39:35 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633013079750000000</guid>
		<dc:creator>ravalia</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Mjones--<br /><br />1) Cool idea, the white board is quite clear in reality. The camera capture might need to tweaked.<br /><br />2) Right the notion of synchronous and asynchronous here might be confusing, but of highly important value and so I will clarify here:<br /><br />When porting your drivers to CE 6, if the driver is going to access the caller's buffer on the caller's thread, then it falls under the synchronous access arena and you dont have to do any marshalling since the kernel driver can access the caller's buffer directly.
 That is to say that the kernel guarantees that the caller's process is mapped when the caller's thread is running and hence the kernel driver can be sure that it is accessing the correct buffer when doing so on the caller's thread.<br /><br />If on the other hand the driver is going to access the caller's buffer on a thread that belongs to some other process, say the kernel, then it falls under asynchronous arena and the driver has to marshall the buffer using the marshalling APIs so that the kernel
 driver has a local copy of the buffer that can be accessed when needed on any thread<br /><br />The marshalling need here arises from the fact that you cannot be sure of the user process mapped when accessing the caller buffer on some other thread. And so, you have to marshal the buffer initially on the caller's thread to get a local copy for future use.
 The local buffer can then be accessed by any other driver thread and upon completion needs to call the right API to free up the local buffer and to copy back the buffer to the caller's process.<br /><br />Let me know if this helps - else I will put up some diagrams to illustrate this clearly<br /><br />3) Thank you for your kind words. And thank you for your patience in listening and understanding these complex concepts.<br /><br />4) <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-4.gif' alt='Tongue Out' /><br /><p>posted by ravalia</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633013093440000000</link>
		<pubDate>Sun, 10 Dec 2006 01:02:24 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633013093440000000</guid>
		<dc:creator>ravalia</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Hello&nbsp; funkster--<br /><br />The number of drivers really depend on the CE Device you are building or refering to. But on the general, a CE device will have some Storage/block driver, some networking driver(s), probably an Ethernet Debug one, soemtimes USB and SD/SDIO, Audio for others
 and Display/Video for those with screens and soetimes with Touch for touch capability. In addition I have seen PCMCIA/PC Card, Keyboard, Mouse Input drivers, Serial/Parallel so you can see exactly how the average is so hard to define across the numerous different
 CE Devices.<br /><br />Is there any particular information you are tryign to gether that I might be able to help with?<p>posted by ravalia</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633013098140000000</link>
		<pubDate>Sun, 10 Dec 2006 01:10:14 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633013098140000000</guid>
		<dc:creator>ravalia</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[
<p>Thanks, Juggs!<br /><br />I am into tech Quizzing, and was gathering information for upcomming quiz on Windows Embedded CE <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-2.gif' alt='Big Smile' />.
<br />If i am not wrong any fresh WinXP installation with default hardware (USB, NIC etc.)will have around 200 drivers in its system folder and out of them only half of them are frequently used! So i was curious about devices with small footprints.<br /><br />BTW, Thank you once again and awesome video;)<br /><br /><br /></p>
<p>posted by funkster_smokey</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633017118150000000</link>
		<pubDate>Thu, 14 Dec 2006 16:50:15 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633017118150000000</guid>
		<dc:creator>funkster_smokey</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Hi <br />&nbsp;&nbsp;&nbsp; I am a beginner to win CE and i was searching for some stuff and got this video at the right time<br /><br />Gave me a good understanding of the basic concepts and many new terminologies in win ce .<br />The way u explained things shows your love towards win CE and the work you guys have done for that... <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' />&nbsp; good work juggs...<br /><br /><br /><br />-Raja.K<br /><br /><p>posted by rajasekaran</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633057326210000000</link>
		<pubDate>Tue, 30 Jan 2007 05:43:41 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633057326210000000</guid>
		<dc:creator>rajasekaran</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Hi Juggs<br />Its really a helpful video for me as I am working with 5.0 and want to go for 6.0, One query I have is what I need to do if I am having a BSP for 5.0 and want to port it&nbsp;on 6.0.&nbsp;Can I import 5.0's BSP on 6.0 ( I guess its not possible).Please correct me if
 I am wrong &amp; help me out...<br /><br />Thanks...<br /><p>posted by nitin_bharane</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633057345410000000</link>
		<pubDate>Tue, 30 Jan 2007 06:15:41 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633057345410000000</guid>
		<dc:creator>nitin_bharane</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Hi Nitin<br /><br />I hope, our team, e-consystems.com, (www.e-consystems.com) can help you fix the problem, you can mail me on vsanghi@e-consystems.com with detailed query...<br /><br /><p>posted by sanghivivek</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633073707300000000</link>
		<pubDate>Sun, 18 Feb 2007 04:45:30 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633073707300000000</guid>
		<dc:creator>sanghivivek</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Porting 5.0 BSP's to 6.0 requires some work but its something that can be done quite easily. I will probably do a demo so that you get the overall picture of what was changed and how you can get your porting done right away.<br /><br />Thanks for the kind words<p>posted by ravalia</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633098947280000000</link>
		<pubDate>Mon, 19 Mar 2007 09:52:08 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633098947280000000</guid>
		<dc:creator>ravalia</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[I got some feedback while I was in Vegas <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-2.gif' alt='Big Smile' /> attending MEDC 2007..<br /><br />I might not have been clear in my presentation but the CE 6.0 Kernel will validate first level pointer parameters for you. It knows the signature of the API (and can verify the first level buffer being passed to the kernel driver.<br /><br />You as a driver developer, only have to Access Check embedded pointers; embedded pointers are pointer parameters that are passed to your driver by storing them within the first level buffer - Actually you can view this recursively and can have nested buffers.<br /><br />The kernel while checking the first level parameter has no idea of what the 4 bytes&nbsp;stored with the buffer means to the driver - it could be a DWORD for all it cares; it all depends on how the kernel driver is going to interpret these 4 bytes - and thus, It
 is&nbsp;the responsibility of the driver to access check embedded buffers because such embedded buffers could be pointing to memory that the caller does not have access to.
<br /><br />Kernel drivers would call CeOpenCallerBuffer API to access check embedded buffers before using them and when done, simply call CeCloseCallerBuffer as detailed at -
<a href="http://blogs.msdn.com/ce_base/archive/2006/11/22/marshalling-helper-apis.aspx">
http://blogs.msdn.com/ce_base/archive/2006/11/22/marshalling-helper-apis.aspx</a><br /><br />I hope that clarifies any issues on Access Checking.<br /><br /><p>posted by ravalia</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633151442260000000</link>
		<pubDate>Sat, 19 May 2007 04:03:46 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633151442260000000</guid>
		<dc:creator>ravalia</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Gr8 Video..!!<br /><p>posted by shrads</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633282127300000000</link>
		<pubDate>Wed, 17 Oct 2007 10:12:10 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633282127300000000</guid>
		<dc:creator>shrads</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Ravalia, can you send me any demo or info how to porting 5.0 BSP's to 6.0? akolpakov@technocenter.ru<p>posted by Virtuoz</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633377137750000000</link>
		<pubDate>Mon, 04 Feb 2008 09:22:55 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633377137750000000</guid>
		<dc:creator>Virtuoz</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[hi juggs<br />i want to know tht if i just port my code from 5.0 to 6.0 then how could i identify tht my driver is loaded in kernel space or not<br /><p>posted by victory</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633403827570000000</link>
		<pubDate>Thu, 06 Mar 2008 06:45:57 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633403827570000000</guid>
		<dc:creator>victory</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Hi, Juggs<br /><br />When the driver wants to access the embedded pointer asynchronously, the driver must follow what's rule for secure copy? Without secure issue, I'm sure I can use
<strong>CeOpenCallerBuffer</strong>, and <strong>CeAllocAsynchronousBuffer </strong>
to do that. But what to do if considering secure copy?<p>posted by jason jiang</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633442972010000000</link>
		<pubDate>Sun, 20 Apr 2008 14:06:41 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633442972010000000</guid>
		<dc:creator>jason jiang</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Thanks Raja - We surely have a great, hardworking team.<p>posted by jayrava</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512267930000000</link>
		<pubDate>Wed, 09 Jul 2008 18:59:53 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512267930000000</guid>
		<dc:creator>jayrava</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Hello Nitin, <br />There are Windows CE 6.0 docs on porting BSPs from CE 5 to CE 6.&nbsp;There is a great presentation by Travis Horbla on Channel 9
<br />describing that too - <a href="http://channel9.msdn.com/Showpost.aspx?postid=376154" target="_blank" rel="nofollow">
http://channel9.msdn.com/Showpost.aspx?postid=376154</a><p>posted by jayrava</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512269150000000</link>
		<pubDate>Wed, 09 Jul 2008 19:01:55 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512269150000000</guid>
		<dc:creator>jayrava</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[
<p>I would&nbsp;look at the&nbsp;great presentation by Travis Horbla on Channel 9 on Porting BSPs -
<br /><a href="http://channel9.msdn.com/Showpost.aspx?postid=376154" target="_blank" rel="nofollow">http://channel9.msdn.com/Showpost.aspx?postid=376154</a></p>
<p>posted by jayrava</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512269810000000</link>
		<pubDate>Wed, 09 Jul 2008 19:03:01 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512269810000000</guid>
		<dc:creator>jayrava</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Greetings Victory --<br /><br />If you set the right BIB flags and Registry Keys for the DEVFLAGS, you will load your driver in user mode or kernel mode accordingly. To verify I would either put a break point in my driver code and see the callstack - the user mode driver is loaded in udevice.exe
 and usually on udevice.exe thread. the shell tools are being modified to help you on this one - gi mod used to enumerate modules will be upgraded to tell you modules loaded within a process - that way you know which dlls are loaded in kernel process versus
 udevice.exe<p>posted by jayrava</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512274160000000</link>
		<pubDate>Wed, 09 Jul 2008 19:10:16 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512274160000000</guid>
		<dc:creator>jayrava</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Greetings Jason --<br /><br />Secure Copy largely entails making a copy of the caller's buffer to prevent asynchronous modifications of pointer values and the associated buffer size. Such data integrity issues can be solved by secure copying the input buffers via the CeAllocDuplicateBuffer
 API. Upon completion you have to free the memory by calling CeFreeDuplicateBuffer API.<br /><br />In your case, you want to access an embedded pointer asynchronously, so you will be calling CeOpenCallerBuffer and CeAllocAsynchronousBuffer as you mention above. In such scenarios - you are better off simply calling CeOpenCallerBuffer with the ForceDuplicate
 boolean parameter set to TRUE. This ForceDuplicate value will ensure that the call first makes a&nbsp;secure copy of the buffer and then access checks the copied buffer. The same parameter must be set when calling the corresponding CeCloseCallerBuffer API to free
 the secure copied buffer. This way the driver only works on a locally copied and access checked buffer - all async modifications will not affect the local copy.<br /><p>posted by jayrava</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512310590000000</link>
		<pubDate>Wed, 09 Jul 2008 20:10:59 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512310590000000</guid>
		<dc:creator>jayrava</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[Jugs,<br /><br />A very good video!!<br /><br />I have a doubt, If I am running the Driver in Kernel Mode, Is it required by me to use CeOpenCallerBuffer for dealing with Embedded Pointers, Mostly for syncronous process(IOCTL cmd's).<br /><br />Can you give me a simple illustration of Asyncronous process in Drivers.<br /><br />-sync<p>posted by sync</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512416140000000</link>
		<pubDate>Wed, 09 Jul 2008 23:06:54 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c633512416140000000</guid>
		<dc:creator>sync</dc:creator>
	</item>
	<item>
		<title>Re: Juggs Ravalia – Windows CE 6.0 Device Driver Model</title>
		<description>
			<![CDATA[
<p>&nbsp;</p>
<div id="_mcePaste">Hello Sync --</div>
<div id="_mcePaste">Sorry for the delay in writting. It's been long since CE 6 was released but let me see if I can recall those good old days.</div>
<div id="_mcePaste">So, if the kernel driver services the user request on the caller's thread then it is a Synchronus call, otherwise it is an Asynchronous call. That's the simple way of finding out whether a call is Synchronus or not. An example of an Asynchronous
 call would be a client request on a user thread and then the driver servicing this user request on some other thread. Essentially the OS guarantees that the caller's process is mapped when the caller's thread is running and hence the kernel driver can be sure
 that it is accessing the correct buffer when doing so on the caller's thread.</div>
<div id="_mcePaste">Consequently, you have to marshal buffers if you are going to service user requests asynchronously.</div>
<div id="_mcePaste">Now let me answer the embedded pointer question.&nbsp;</div>
<div id="_mcePaste">Kernel drivers in CE 6.0 are fully trusted and have full access to kernel memory and kernel data structures. A malicious application can therefore pass an embedded pointer requesting the kernel driver to potentially modify kernel memory
 on its behalf. (It is analogous to the malicious application requesting the gun bearer - kernel driver in this case - to shot at a particular location). Kernel drivers therefore HAVE TO have to access check embedded pointers to prevent priviledge-attacks.
 The OS access checks first level pointers but has no knowledge of what the memory blobs contains and so it is the receipient's responsibility - the Kernel Driver's responsibility - to access check embedded pointers before using them. E</div>
<div id="_mcePaste">In CE 5.0, MapCallerPtr was used. In CE 6.0, you have to use CeOpenCallerBuffer and CeCloseCallerBuffer to access check pointers. Example:</div>
<div id="_mcePaste">struct MyStruct { UCHAR *pEmbedded; DWORD dwSize; };</div>
<div id="_mcePaste">Windows CE 5.0 and prior versions</div>
<div id="_mcePaste">// In XXX_IOControl...</div>
<div id="_mcePaste">MyStuct *p = ( MyStruct*) pInput;</div>
<div id="_mcePaste">g_pMappedEmbedded = MapCallerPtr(p-&gt;pEmbedded);</div>
<div id="_mcePaste">// Fail if g_pMappedEmbedded == NULL ...</div>
<div id="_mcePaste">Windows CE 6.0</div>
<div id="_mcePaste">// In XXX_IOControl...</div>
<div id="_mcePaste">hr = CeOpenCallerBuffer( (PVOID*) &amp;g_pMappedEmbedded, <span></span>pInput-&gt;pEmbedded, pInput-&gt;dwSize, ARG_I_PTR,
<span></span>FALSE);</div>
<div id="_mcePaste">// Fail if FAILED(hr) == true</div>
<div id="_mcePaste">// When done with pointer...</div>
<div id="_mcePaste">hr = CeCloseCallerBuffer( (PVOID) g_pMappedEmbedded, <span></span>pInput-&gt;pEmbedded, pInput-&gt;dwSize, ARG_I_PTR );</div>
<div id="_mcePaste">The last parameter to the CeOpenCallerBuffer API is the fForceDuplicate flag - which when set to TRUE, requests the kernel to make a copy of the input buffers for security purposes.</div>
<div id="_mcePaste">Let me know if you need further information on the Buffer Marshalling for Asynchronous access.</div>
<p>Hello Sync --</p>
<p>&nbsp;</p>
<p>Sorry for the delay in writting. It's been long since CE 6 was released but let me see if I can recall those good old days.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>So, if the kernel driver services the user request on the caller's thread then it is a Synchronus call, otherwise it is an Asynchronous call. That's the simple way of finding out whether a call is Synchronus or not. An example of an Asynchronous call would
 be a client request on a user thread and then the driver servicing this user request on some other thread. Essentially the OS guarantees that the caller's process is mapped when the caller's thread is running and hence the kernel driver can be sure that it
 is accessing the correct buffer when doing so on the caller's thread.</p>
<p>&nbsp;</p>
<p>Consequently, you have to marshal buffers if you are going to service user requests asynchronously.</p>
<p>&nbsp;</p>
<p>Now let me answer the embedded pointer question.&nbsp;</p>
<p>&nbsp;</p>
<p>Kernel drivers in CE 6.0 are fully trusted and have full access to kernel memory and kernel data structures. A malicious application can therefore pass an embedded pointer requesting the kernel driver to potentially modify kernel memory on its behalf. (It
 is analogous to the malicious application requesting the gun bearer - kernel driver in this case - to shot at a particular location). Kernel drivers therefore HAVE TO have to access check embedded pointers to prevent priviledge-attacks. The OS access checks
 first level pointers but has no knowledge of what the memory blobs contains and so it is the receipient's responsibility - the Kernel Driver's responsibility - to access check embedded pointers before using them. E</p>
<p>&nbsp;</p>
<p>In CE 5.0, MapCallerPtr was used. In CE 6.0, you have to use CeOpenCallerBuffer and CeCloseCallerBuffer to access check pointers. Example:</p>
<p>&nbsp;</p>
<p>struct MyStruct { UCHAR *pEmbedded; DWORD dwSize; };</p>
<p>&nbsp;</p>
<p>Windows CE 5.0 and prior versions</p>
<p>// In XXX_IOControl...</p>
<p>&nbsp;</p>
<p>MyStuct *p = ( MyStruct*) pInput;</p>
<p>g_pMappedEmbedded = MapCallerPtr(p-&gt;pEmbedded);</p>
<p>// Fail if g_pMappedEmbedded == NULL ...</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Windows CE 6.0</p>
<p>// In XXX_IOControl...</p>
<p>&nbsp;</p>
<p>hr = CeOpenCallerBuffer( (PVOID*) &amp;g_pMappedEmbedded, <span></span>pInput-&gt;pEmbedded, pInput-&gt;dwSize, ARG_I_PTR,
<span></span>FALSE);</p>
<p>// Fail if FAILED(hr) == true</p>
<p>&nbsp;</p>
<p>// When done with pointer...</p>
<p>hr = CeCloseCallerBuffer( (PVOID) g_pMappedEmbedded, <span></span>pInput-&gt;pEmbedded, pInput-&gt;dwSize, ARG_I_PTR );</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The last parameter to the CeOpenCallerBuffer API is the fForceDuplicate flag - which when set to TRUE, requests the kernel to make a copy of the input buffers for security purposes.</p>
<p>&nbsp;</p>
<p>Let me know if you need further information on the Buffer Marshalling for Asynchronous access.</p>
<div>Juggs--</div>
<div>Sorry for the delay - but I moved on to other technologies and hence did not monitor this thread actively.</div>
<p>&nbsp;</p>
<p>posted by jayrava</p>]]>
		</description>
		<link>http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c634171849480000000</link>
		<pubDate>Thu, 12 Aug 2010 04:42:28 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Blogs/Charles/Juggs-Ravalia--Windows-CE-60-Device-Driver-Model#c634171849480000000</guid>
		<dc:creator>jayrava</dc:creator>
	</item>
</channel>
</rss>