<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx</link><description>Posted by: Sue Loh Windows CE APIs are implemented by a set of server processes. Besides the kernel (nk.exe) we have other server processes: filesys.exe, gwes.exe, device.exe, services.exe. When an application calls an API in one of these servers, the</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#528266</link><pubDate>Thu, 09 Feb 2006 07:57:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:528266</guid><dc:creator>Dean Ramsier</dc:creator><description>Great description of the thunking process, I always had a general idea of what was going on but never saw a real description. &amp;nbsp;&lt;br /&gt;&lt;br /&gt;One correction, I believe that kernel mode threads do not have access to any memory address they like, they can only access the memory for their slot plus the kernel memory. &amp;nbsp;Other user processes are still protected. &amp;nbsp;The kernel can't trash the memory of another process any easier than a user mode thread can. &amp;nbsp;&lt;br /&gt;&lt;br /&gt;Any process (including the kernel) that wants to access the memory of another process must call SetProcPermissions to gain access to the virtual addresses in the slot. &amp;nbsp;&lt;br /&gt;&lt;br /&gt;- Dean</description></item><item><title>re: Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#528298</link><pubDate>Thu, 09 Feb 2006 08:22:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:528298</guid><dc:creator>Dean Ramsier</dc:creator><description>Correction to the above - the kernel can trash all physical memory via kernel virtual addresses, since all physical memory is mapped into kernel virtual address space. &amp;nbsp;It just can't arbitrarily access any virtual address in user space below 0x80000000.&lt;br /&gt;&lt;br /&gt;- Dean</description></item><item><title>re: Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#528545</link><pubDate>Thu, 09 Feb 2006 16:56:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:528545</guid><dc:creator>ce_base</dc:creator><description>Thanks Dean, you're right, I was being inaccurate when I said that kernel mode threads can access any memory they want. &amp;nbsp;There is still address space protection for user mode virtual addresses. &amp;nbsp;I *think* (but don't know for sure) that kernel mode threads are allowed to access all of the kernel virtual address space (over 0x80000000). &amp;nbsp;And yeah that would mean that kernel mode threads could access all user mode memory via the static-mapped kernel address space, though they'd have a tough time figuring out the mapping between user mode address and static-mapped kernel address. &amp;nbsp;In reality, any thread that's allowed to run in KMODE will also be allowed to call SetProcPermissions and access the user mode address directly. &amp;nbsp;In KMODE the address space protection is more to catch accidental mistakes than intentional abuses. &amp;nbsp;But, thanks for keeping me honest! &amp;nbsp;;-)&lt;br /&gt;&lt;br /&gt;Sue</description></item><item><title>re: Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#528690</link><pubDate>Thu, 09 Feb 2006 20:08:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:528690</guid><dc:creator>Dean Ramsier</dc:creator><description>Kernel mode threads can access all kernel memory, that over 0x80000000. &amp;nbsp;That's all that kernel mode really means, from a user point of view. &amp;nbsp;The other benefits are under the hood performance, which you've described here.&lt;br /&gt;&lt;br /&gt;Most people don't realize the difference between kmode and trust. &amp;nbsp;In order for a thread to call SetProcPermissions (or SetKMode, or one of any number of other trusted APIs) the thread has to be trusted, not necessarily in KMode. &amp;nbsp;Unless the OEM has done something to implement a trusted environment, all threads will be trusted, and all threads can move themselves in and out of KMode and independently call SetProcPermissions. &lt;br /&gt;&lt;br /&gt;As you said, any thread in KMode can call SetProcPermissions, but that is because it could only have gotten into KMode if it was already trusted.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Maybe a blog on this topic sometime?&lt;br /&gt;&lt;br /&gt;Keep up the good work!&lt;br /&gt;&lt;br /&gt;- Dean&lt;br /&gt;</description></item><item><title>re: Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#528718</link><pubDate>Thu, 09 Feb 2006 20:34:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:528718</guid><dc:creator>ce_base</dc:creator><description>Good points, Dean, thanks!&lt;br /&gt;&lt;br /&gt;Sue</description></item><item><title>re: Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#533741</link><pubDate>Fri, 17 Feb 2006 03:30:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:533741</guid><dc:creator>Charlie</dc:creator><description>Is generating an exception this way more efficient on ARM than a software interrupt? Or why was this method picked? Where can I learn more about the internals of Windows CE?</description></item><item><title>re: Inside Windows CE API Calls</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#534179</link><pubDate>Fri, 17 Feb 2006 20:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:534179</guid><dc:creator>ce_base</dc:creator><description>I don't know why this method was picked, actually. &amp;nbsp;I think it's probably linked to the fact that we continue executing on the current thread rather than switch to a different thread inside the server process.&lt;br&gt;&lt;br&gt;The best description of Windows CE internals that I know of is the book &amp;quot;Inside Microsoft Windows CE&amp;quot; by John Murray. &amp;nbsp;It's a little dated by now, but it lays out the groundwork of what you'd need to know to understand what's going on inside the OS.&lt;br&gt;&lt;br&gt;Sue</description></item><item><title>Books and other resources for learning about Windows CE</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#1454137</link><pubDate>Fri, 12 Jan 2007 09:02:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1454137</guid><dc:creator>Windows CE Base Team Blog</dc:creator><description>&lt;p&gt;Posted by: Sue Loh I am occasionally asked whether I know any good books or other resources to help learn&lt;/p&gt;
</description></item><item><title>What is kernel mode?</title><link>http://blogs.msdn.com/ce_base/archive/2006/02/02/Inside-Windows-CE-API-Calls.aspx#1568423</link><pubDate>Thu, 01 Feb 2007 03:29:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1568423</guid><dc:creator>Windows CE Base Team Blog</dc:creator><description>&lt;p&gt;Posted by: Sue Loh I've talked about this before but I want to really highlight it because I still see&lt;/p&gt;
</description></item></channel></rss>