<?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>Windows CE Networking Team WebLog : Author: Igor Dvorkin</title><link>http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx</link><description>Tags: Author: Igor Dvorkin</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Q &amp; A for LAP writers on Windows Mobile</title><link>http://blogs.msdn.com/cenet/archive/2006/08/10/694617.aspx</link><pubDate>Thu, 10 Aug 2006 21:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:694617</guid><dc:creator>cenet</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cenet/comments/694617.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=694617</wfw:commentRss><description>





&lt;p class="MsoNormal"&gt;I wanted to write a blog entry about LASS and LAP, but
almost everything I could say has already been said by Marcus on his blog
entries &lt;a href="http://blogs.msdn.com/marcpe/search.aspx?q=lass&amp;amp;p=1"&gt;here&lt;/a&gt;.&amp;nbsp;&amp;nbsp; One thing I can add is taking the Q and A that appears in the
comments. Here is some Q and A in no particular order.&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;br&gt;
What is master key encryption , and should my LAP support it?&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;Master key encryption is a feature that allows the users
master key to be&amp;nbsp; encrypted with non persisted data. This feature is not
currently supported in Windows Mobile. When master key protection becomes
supported &amp;nbsp;documentation will be provided. Do not set
LAP_CAPABILITIES_MASTER_KEY at this time. &lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;br&gt;
I've got an activeX control/some window that never appears. What's
going on?&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;VerifyUser is running above startup so any UI you show needs
the WS_EX_ABOVESTARTUP&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;flag set. &lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;br&gt;
What is WS_EX_ABOVESTARTUP? &lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;




&lt;p class="MsoNormal"&gt;On PPC, when the device has timed out, and requires
authentication, a blank startup screen is drawn. This is to prevent prying eyes
from seeing your sensitive information.&amp;nbsp; Your LAP VerifyUser UI must appear &lt;span style=""&gt;above this screen.&amp;nbsp; &lt;/span&gt;To have windows
appear above this startup screen, you must specify WS_EX_ABOVESTARTUP.&lt;/p&gt;
&lt;span style="font-size: 11pt; line-height: 115%; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;I didn't need to set WS_EX_ABOVESTARTUP in my RTM LAP? Why do I need to
MSFP+? &lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;




&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Actually, you do
even in RTM. Try this experiment: &lt;br&gt;
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;span style=""&gt;&lt;/span&gt;Go to the control
panel, then password screen.&lt;/li&gt;
  &lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;You should see your LAP UI.&lt;/li&gt;
  &lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;/span&gt;Now, let
your device go idle.&lt;/li&gt;
  &lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;If you hadn't specified
WS_EX_ABOVESTARTUP, your LAP window will not be displayed.&lt;br&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;b style=""&gt;&lt;i style=""&gt;&lt;br&gt;
Weird, why doesn't this happen when my device goes idle in RTM? &lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;

&lt;p class="MsoNormal"&gt;In RTM the VerifyUser call ran on the callers thread.&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;There is magic in the shell which says all windows created on
the
StartupThread (the thread that draws the blanking window), window&amp;nbsp;
magically get WS_EX_ABOVESTARTUP. Since in RTM VerifyUser
was called in the&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;StartupThread, it
automatically got WS_EX_ABOVESTARTUP.&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;br&gt;
What's that VerifyUserToTop about? &lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;See the above experiment, in step 4
VerifyUserToTop gets
called signaling the LAP to bring its Verification window to the
foreground. This is needed since only one VerifyUser (LAP) calls are
serialized&lt;br&gt;
 &lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;br&gt;
&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;I call MessageBox, but it doesn't appear.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;See the issue with WS_EX_ABOVESTARTUP, that’s why the new
sample LAP has MessageBox replacement code.&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;My LAP worked on RTM but not on MSFP+ devices. What is going on? &lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;This is usually caused by the WS_EX_ABOVE_STARTUP issues
above. The other change between RTM and MSFP+ is the location&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;where the idle time out is stored, in MSFP+
it's stored as an AE policy. &lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;In my RTM LAP, calls to random APIs are failing, but moving my calls to
another thread fixes the problem. The problem disappeared in MSFP+.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;




&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;This could be an entry on its own, but the base problem is
that some APIs aren't supported in a PSL. In RTM, the LAP's VerifyUser call was
run in a PSL context. If you don’t understand what this means, trust me
this is no longer an issue In MSFP+.&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;[Igor Dvorkin]&lt;br&gt;
&lt;/p&gt;


&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=694617" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>LSP installer code for Windows Mobile and Windows CE </title><link>http://blogs.msdn.com/cenet/archive/2006/05/17/600363.aspx</link><pubDate>Thu, 18 May 2006 01:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:600363</guid><dc:creator>cenet</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/cenet/comments/600363.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=600363</wfw:commentRss><description>&lt;P&gt;Great news the installer code I've been describing on my blog is now available at &lt;A href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=LSPSamplesWindowsCE&amp;amp;ReleaseId=7"&gt;codeplex&lt;/A&gt;.&amp;nbsp; Please note, codeplex is very new, and still has some issues. &lt;/P&gt;
&lt;P&gt;I also expect to publish the lsp_helper library on which the Windows Mobile LSPs are based. &lt;/P&gt;
&lt;P&gt;[Author: Igor Dvorkin]&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=600363" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>Importing  a session key into CAPI</title><link>http://blogs.msdn.com/cenet/archive/2006/02/24/538959.aspx</link><pubDate>Sat, 25 Feb 2006 03:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:538959</guid><dc:creator>cenet</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cenet/comments/538959.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=538959</wfw:commentRss><description>&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;I've seen a lot of non-optimal code to import a session key into CAPI.&amp;nbsp; The attached code provides a utility function to do the import.&amp;nbsp;&amp;nbsp; Note: KeySize depends on the algorithm of the session key.&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=538959" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cenet/attachment/538959.ashx" length="3640" type="text/plain" /><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>Bugs in the CE sample LSP</title><link>http://blogs.msdn.com/cenet/archive/2006/02/15/532822.aspx</link><pubDate>Thu, 16 Feb 2006 01:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:532822</guid><dc:creator>cenet</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/cenet/comments/532822.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=532822</wfw:commentRss><description>
&lt;p class="MsoNormal"&gt;I've spent the last few days looking at LSPs and have found
some errors in the sample. &lt;/p&gt;
These are: &lt;o:p&gt;&lt;/o:p&gt;

&lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: -0.25in;"&gt;&lt;span style=""&gt;1.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Passing
the wrong WSAPROTOCOLINFO to the next person in the chain: &lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Symptom:&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;WSPSocket&lt;span style=""&gt;&amp;nbsp;
&lt;/span&gt;fails when layered over another LSP.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style=""&gt;&amp;nbsp;
&lt;/span&gt;Fix: DCATALOG::FindNextProviderInChain needs to start by setting&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;*BaseProviderCatalogEntry=NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: -0.25in;"&gt;&lt;span style=""&gt;2.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Assuming&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;*lpErrno == 0:&lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;Symptom: ssl sockets
(created via SO_SECURE) stop working when layered over ssllsp&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Fix: WSPSelect needs
to start by setting *lpErrno=NO_ERROR.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: -0.25in;"&gt;&lt;span style=""&gt;3.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Installing
incorrectly:&lt;br&gt;
&amp;nbsp;&amp;nbsp; I plan on publishing another post on this shortly.&lt;br&gt;
&lt;/p&gt;


&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=532822" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>Issues for LSPs that connect to local host </title><link>http://blogs.msdn.com/cenet/archive/2005/11/30/498602.aspx</link><pubDate>Thu, 01 Dec 2005 00:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:498602</guid><dc:creator>cenet</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/cenet/comments/498602.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=498602</wfw:commentRss><description>




&lt;p class="MsoNormal"&gt;As discussed in my previous post, the autobind_lsp performs
hard binding.&amp;nbsp; This will cause issues for LSPs that need to connect to
localhost. &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;About hard binding:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;







&lt;p class="MsoNormal"&gt;Hard binding is a per socket TCP options specified by: &lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WSAIoctl(..., SIO_UCAST_IF,..).&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;Once a socket is hard bound, all data on that socket must be
sent/received from the same adapter.&amp;nbsp; In hard binding, the loop back
adapter is a distinct adapter.&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;When does hard binding cause a problem?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;









&lt;p class="MsoNormal"&gt;Hard binding causes a problem when you want your LSP to
connect to local host after a hard bind has occurred. In this case, you do not
want the hard binding to occur. &lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;Example of common failure: &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;











&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; step 1) App:
connect (10.10.10.10)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; step 2) autobind_lsp:
bind&amp;nbsp; (10.10.10.10) &lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; step 3) autobind_lsp:
WSAIoctl(…, SIO_UCAST_IF, …)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; step 4) autobind_lsp:
connect (10.10.10.10)&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; step 5)
YourProxy_LSP: connect_to_your_proxy_server&amp;nbsp; (127.0.0.1:1080)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;step 5) Will fail since your socket is already hard bound to
adapter 10.10.10.10.&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;b&gt;The work around: &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;A work around is to layer your LSP under autobind, and&amp;nbsp;
not propagate the SIO_UCAST_IF IOCTLs to the next LSP in the stack.&lt;o:p&gt; &lt;br&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;b&gt;When you should use the work around:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;





&lt;p class="MsoNormal"&gt;This work around should only be used for sockets on which
your LSP is explicitly proxying all data to a component you control. If
your LSP is not doing this, the workaround should not be used.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;

[Author: Igor Dvorkin]&lt;br&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=498602" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>Default LSPs in WM 5.0 [autobind_lsp].</title><link>http://blogs.msdn.com/cenet/archive/2005/10/25/484936.aspx</link><pubDate>Wed, 26 Oct 2005 03:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:484936</guid><dc:creator>cenet</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/cenet/comments/484936.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=484936</wfw:commentRss><description>The following description of the autobind_lsp is copied&amp;nbsp; from&lt;BR&gt;http://www.intrinsyc.com/whitepapers/RIL_whitepaper_MS_Intrinsyc_June2004.pdf"&lt;BR&gt;&lt;BR&gt;&lt;I&gt;When an application makes a Connection Manager connection request, Connection Manager determines which IP interface the application should use to reach the destination network requested.&amp;nbsp; Connection manager passes this information to the AutoBind LSP.&amp;nbsp; If the application does not explicitly bind its sockets to an interface, then the AutoBind LSP will implicitly bind the sockets to the interface specified by Connection Manager, ensuring that the packets sent over the socket will take the correct route to reach the intended destination. &lt;BR&gt;&lt;/I&gt;&lt;BR&gt;autobind_LSP effects the following winsock calls:&lt;BR&gt;&lt;PRE&gt;&lt;FONT color=#804040&gt;def&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;WSPConnect&lt;/FONT&gt;(addr):&lt;BR&gt;    &lt;FONT color=#804040&gt;if&lt;/FONT&gt; &lt;FONT color=#804040&gt;not&lt;/FONT&gt; alreadyBound() &lt;FONT color=#804040&gt;and&lt;/FONT&gt; &lt;FONT color=#804040&gt;not&lt;/FONT&gt; isLoopback(addr):&lt;BR&gt;        doHardBindIfRequired()&lt;BR&gt;&lt;BR&gt;    let_connect_call_passthrough_to(addr)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#804040&gt;def&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;WSPBind&lt;/FONT&gt;(addr):&lt;BR&gt;    &lt;FONT color=#804040&gt;if&lt;/FONT&gt; not alreadyBound():&lt;BR&gt;        doHardBindIfRequired()&lt;BR&gt;&lt;BR&gt;    let_bind_call_passthrough_to(addr)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#804040&gt;def&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;WSPRecvFrom&lt;/FONT&gt;(addr):&lt;BR&gt;    &lt;FONT color=#804040&gt;if&lt;/FONT&gt; &lt;FONT color=#804040&gt;not&lt;/FONT&gt; alreadyBound():&lt;BR&gt;        doHardBindIfRequired()&lt;BR&gt;&lt;BR&gt;    let_recvFrom_call_passthrough_to(addr)&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#804040&gt;def&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;WSPSendTo&lt;/FONT&gt;(addr):&lt;BR&gt;    &lt;FONT color=#804040&gt;if&lt;/FONT&gt; &lt;FONT color=#804040&gt;not&lt;/FONT&gt; alreadyBound():&lt;BR&gt;        doHardBindIfRequired()&lt;BR&gt;&lt;BR&gt;    let_sendTo_call_passthrough_to(addr)&lt;BR&gt;&lt;FONT color=#804040&gt;&lt;BR&gt;def&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;doHardBindIfRequired&lt;/FONT&gt;():&lt;BR&gt;    interfaceToBindTo = ConnectionManager::GetInterfaceToBindTo(GetProcessID())&lt;BR&gt;    &lt;FONT color=#804040&gt;if&lt;/FONT&gt; (interfaceToBindTo)&lt;BR&gt;        TCPStack::ForceHardBind(interfaceToBindTo)&lt;BR&gt;	alreadyBound = True&lt;BR&gt;&lt;BR&gt;&lt;/PRE&gt;[Author: Igor Dvorkin]&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=484936" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>Default LSPs in WM 5.0</title><link>http://blogs.msdn.com/cenet/archive/2005/10/19/482831.aspx</link><pubDate>Thu, 20 Oct 2005 01:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:482831</guid><dc:creator>cenet</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cenet/comments/482831.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=482831</wfw:commentRss><description>In WM 5.0&amp;nbsp;2&amp;nbsp;new LSPs are present by default, the dtpt_lsp and the autobind_lsp. This article will discuss the dtpt_lsp and the next article will talk about the autobind_lsp. 
&lt;P class=MsoNormal&gt;Desktop Passthrough (DTPT)&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;is the&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;technology that allows the CE device to &lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;talk on the desktop network while Active Sync is running.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&lt;/o:p&gt;DTPT is implemented using a socket level proxy technology.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;A transport proxy client runs on CE, while a proxy server runs on the desktop as part of active sync.&amp;nbsp; DTPT_LSP is that transpart proxy client.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;DTPT_LSP effects the following winsock calls: &lt;BR&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#804040&gt;&lt;B&gt;def&lt;/B&gt;&lt;/FONT&gt; &lt;FONT color=#008080&gt;WSPConnect&lt;/FONT&gt; (addr) :&lt;BR&gt;    &lt;FONT color=#804040&gt;&lt;B&gt;if&lt;/B&gt;&lt;/FONT&gt; is_dtpt_enabled():&lt;BR&gt;        connect_to_dtpt_server()&lt;BR&gt;        dtpt_server_connect_to(addr)&lt;BR&gt;    &lt;FONT color=#804040&gt;&lt;B&gt;else&lt;/B&gt;&lt;/FONT&gt;:&lt;BR&gt;        let_connect_call_passthrough_to(addr)&lt;BR&gt;&lt;BR&gt;[Author: Igor Dvorkin]&lt;BR&gt;&lt;/PRE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=482831" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>How do clients know a service is ready?</title><link>http://blogs.msdn.com/cenet/archive/2005/10/10/479384.aspx</link><pubDate>Tue, 11 Oct 2005 02:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:479384</guid><dc:creator>cenet</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cenet/comments/479384.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=479384</wfw:commentRss><description>&lt;o:p&gt;&lt;/o:p&gt;





&lt;p class="MsoNormal"&gt;Often clients start before servers, and need to be signaled
when the service &lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
is ready. In this post we'll&amp;nbsp; find a good solution to this problem. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;




&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Approach #1: Server
signals a named event, clients waits for the event.&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;












&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Server:&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Create
manual reset event for service started&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hEvent =
CreateEvent(NULL,TRUE,FALSE, SRV_STARTED_EVENT);&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;SetEvent(hEvent)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;










&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;span style=""&gt; &amp;nbsp; &lt;/span&gt;Clients:&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// Create
manual reset event for service started&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;hServiceReadyEvent = CreateEvent(NULL,TRUE,FALSE, SRV_STARTED_EVENT);&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;









&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;WaitForSingleObject(hServiceReadyEvent)&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;b style=""&gt;&lt;br&gt;
Problems with #1: &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;br&gt;
&lt;span style=""&gt;&lt;/span&gt;&lt;br&gt;
What if the
clients accidentally create the named event as an auto reset event. E.g.&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Broken Client:&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// Accidently
create an auto&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;reset event&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;hServiceReadyEvent = CreateEvent(NULL,FALSE,FALSE, SRV_STARTED_EVENT);&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;WaitForSingleObject(hServiceReadyEvent)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;












&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;br&gt;
&lt;/span&gt;If the client code
runs after the server code runs everything works as expected.&amp;nbsp;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;However, if the
client code runs before the server code, the event is created&amp;nbsp;&lt;span style=""&gt; &lt;/span&gt;as an auto reset,
and the next client that goes to check the event will block forever.&amp;nbsp;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;This bug can be
very hard to find if you have a broken client that only&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;runs before&amp;nbsp;&lt;span style=""&gt; &lt;/span&gt;the server a few
times.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;












&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;&lt;/span&gt;Enough people have
had this problem, that the OS provides a solution.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;If&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;you create a
registry key under HKLM/System/Events, filesys will open the named event as&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt; &lt;/span&gt;manual reset
unsignaled and keep them open for the lifetime&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;of&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;filesys.exe&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;




&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;b style=""&gt;Approach #2: Have
filesys create your named manual-reset at startup, then have client and server
use OpenEvent.&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;


&lt;i&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Registry Changes:&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;















&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; @CESYSGEN IF
CE_MODULES_IGOR_SERVICE&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; HIVE BOOT SECTION&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;[HKEY_LOCAL_MACHINE\SYSTEM\Events]&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;"IgorsServiceReadyEventName"="Event triggered after
IgorsService can be used"&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; END HIVE BOOT
SECTION&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; @CESYSGEN ENDIF&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;common code:&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;


&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #define SRV_STARTED_EVENT
L"IgorsServiceReadyEventName"&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Server:&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;








&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//Open service ready event&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;hServiceReadyEvent =
OpenEvent(EVENT_ALL_ACCESS,FALSE,SRV_STARTED_EVENT);&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;SetEvent(hEvent)&lt;br&gt;
&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;i&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Clients:&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hServiceReadyEvent
= OpenEvent(EVENT_ALL_ACCESS,FALSE,SRV_STARTED_EVENT);&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;WaitForSingleObject(hServiceReadyEvent)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;






&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;/span&gt;An interesting
side effect of this solution is if OpenEvent fails, the client will know the service is &lt;span style=""&gt;&lt;/span&gt;not in the image,
thus client code can be:&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&lt;/span&gt;&lt;/p&gt;










&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Clients that run on multiple CE configurations:&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;






&lt;span style=""&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;hServiceReadyEvent =
OpenEvent(EVENT_ALL_ACCESS,FALSE,SRV_STARTED_EVENT);&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if
(hServiceReadyEvent == NULL) &lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// fatal
service is not present in this configuration.&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;
&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;WaitForSingleObject(hServiceReadyEvent)&lt;/p&gt;
&lt;p class="MsoNormal"&gt;[Author: Igor Dvorkin]&lt;br&gt;
&lt;/p&gt;

&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=479384" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>There is a LASS in my smartphone.</title><link>http://blogs.msdn.com/cenet/archive/2005/06/23/432008.aspx</link><pubDate>Fri, 24 Jun 2005 01:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:432008</guid><dc:creator>cenet</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cenet/comments/432008.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=432008</wfw:commentRss><description>&lt;P&gt;The Local Authentication SubSystem (LASS) is a new feature in Windows Mobile 5.0. This feature is available for&amp;nbsp; both PPC and SP. Using LASS, applications can force users to authenticate. The most interesting LASS API is VerifyUser.&lt;/P&gt;
&lt;P&gt;To play with LASS set up a password and then try the following code snippet: &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include &amp;lt;lass.h&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#include &amp;lt;lass_ae.h&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BOOL bRet = VerifyUser(&amp;amp;AE_EVERY_TIME, NULL,NULL,0,NULL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (bRet)&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox (hWnd,L"User Verified",NULL,MB_OK);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox (hWnd,L"User Failed Verification",NULL,MB_OK);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;I'll continue to&amp;nbsp;discuss LASS in future blog entries.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;[Author:Igor Dvorkin]&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=432008" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>Smartcards on Windows Mobile 5</title><link>http://blogs.msdn.com/cenet/archive/2005/06/16/429844.aspx</link><pubDate>Thu, 16 Jun 2005 22:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:429844</guid><dc:creator>cenet</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/cenet/comments/429844.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=429844</wfw:commentRss><description>Starting with Window Mobile 5 the SCRM is included in the default
configuration. This means when you purchase a smartcard reader for WM
2005 you will be able to access it using the SCard APIs that are
exported from winscard.lib. The SCRM on Windows Mobile is API
compatible with the desktop version&amp;nbsp; so if you have desktop
smartcard code it should just work on WM 2005.&amp;nbsp; If you have
smartcard questions, feel free to post them here or on the newsgroups.&lt;br&gt;
&lt;br&gt;
[Author:Igor Dvorkin]&lt;br&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=429844" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>How to install LSPs on Windows CE 4.2 and PPC 2003 (Part 1)</title><link>http://blogs.msdn.com/cenet/archive/2005/02/09/370018.aspx</link><pubDate>Wed, 09 Feb 2005 21:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:370018</guid><dc:creator>cenet</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/cenet/comments/370018.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=370018</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;The Problems:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; P1) There is no way to determine the order in which LSPs will be installed in CE 4.2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; P2) The SSLLSP always installs itself over the base provider, and will ignore chains placed by other LSPs.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;A&amp;nbsp;work around requires the following two attributes: &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; W1)&amp;nbsp; Allows 3rd party LSPs to install in arbitrary order.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; W2)&amp;nbsp; Allows SSLLSP to be the first LSP to install.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;To solve I suggest the following solution:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create an application called lsp_install.dll. This application will install&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSPs from&amp;nbsp; HKLM\COMM\WS2\LSP\LSP_INSTALL, using the same rules Windows CE 5.0 uses&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; to install LSPs from&amp;nbsp; HKLM\COMM\WS2\LSP.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Remove all&amp;nbsp; entries from HKLM\COMM\WS2\LSP.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add lsp_install.dll to&amp;nbsp; HKLM\COMM\WS2\LSP.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add the LSPs you need installed into HKLM\COMM\WS2\LSP_INSTALL&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Why you should follow this solution exactly:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If you follow this solution exactly, you'll be able to interoperate with other&lt;br /&gt;LSPs. If each LSP vendor creates their own solution to this problem, LSPs&lt;br /&gt;from different vendors will have issues running on the same device.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;strong&gt;Final registry layout: &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Only the LSP installer will be installed by the system. &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HKEY_LOCAL_MACHINE\Comm\WS2\LSP\LSP_INSTALL]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Dll"="lsp_install.dll" &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; All other LSPs are installed by the LSP_INSTALL.DLL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Which enumerates the&amp;nbsp; Comm\WS2\LSP\LSP_INSTALL key.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HKEY_LOCAL_MACHINE\Comm\WS2\LSP\LSP_INSTALL\SSL]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Dll"="ssllsp.dll"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Order"=dword:1&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HKEY_LOCAL_MACHINE\Comm\WS2\LSP\LSP_INSTALL\Your_LSP]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Dll"="your_lsp.dll" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Order defaults to 0xFFFFFFFF if not specified.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;strong&gt;Code/Binaries for LSP_INSTALLER:&lt;br /&gt;&lt;/strong&gt;&amp;nbsp; We're working on&amp;nbsp;the best way to distribute this.&amp;nbsp;If someone creates such a dll, fire me a mail and we'll see about&amp;nbsp;putting a link up to yours. &lt;/p&gt; &lt;p&gt;[Author: Igor Dvorkin]&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=370018" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>How to use SignFile.exe from multiple computers.</title><link>http://blogs.msdn.com/cenet/archive/2005/01/04/346534.aspx</link><pubDate>Tue, 04 Jan 2005 21:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:346534</guid><dc:creator>cenet</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/cenet/comments/346534.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=346534</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;As you have likely realized SignFile needs a key container with a private key to&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;sign your file. You can read more about key containers and keys &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/public_private_key_pairs.asp"&gt;here&lt;/a&gt;: &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;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Often you'll generate the private/public key pair with makecert. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;You’ll then use the keys makecert generated when calling signfile.&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;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;But, what if you want to sign files on a machine you didn't create the public/private key pair on? In that case you'll need a tool that can:&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;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(1) Export your private key from a named key container. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(2) Import your exported private key to a named key container.&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;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Unfortunately I'm not away of an MS tool that will do this. However, writing such a tool for the desktop should be pretty easy. Look at the CryptExportKey/CryptImportKey API's.&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;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;When I get more time I'll post the code for this, or if someone writes this code in the mean time, feel free to attach it to this blog.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;[Author: Igor Dvorkin]&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=346534" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>LSP Installation on CE.</title><link>http://blogs.msdn.com/cenet/archive/2004/12/07/277890.aspx</link><pubDate>Tue, 07 Dec 2004 21:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:277890</guid><dc:creator>cenet</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/cenet/comments/277890.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=277890</wfw:commentRss><description> &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;[Last Edited on 12/7/2004]&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;The target audience for this post is LSP developers who are looking to install their LSP. &lt;br /&gt; Developers with experience with desktop LSP installation will also&lt;br /&gt; find this very useful. &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;This post also explains LSP installation differences between CE&lt;br /&gt; and XP, and explains how to install an LSP on CE. &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;Note this post applies to Windows CE 5.0 and greater. As with earlier releases, LSP chain order on CE is solely determined by the order of installation.&amp;nbsp; However, prior to version 5.0 there was no “Order” key and installation order was difficult to coordinate.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&lt;br /&gt; 1) LSP Installation differences between CE and the desktop&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Installed catalog is not persisted across reboots&lt;br /&gt; &amp;nbsp; &amp;nbsp; No WSCWriteProviderOrder function&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; No SPORDER application&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; WSCEnemurateProviders returns current catalog (not catalog at time app started)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Installing LSP on the fly can be dangerous&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; All LSP Installers run on every bootup&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Order of LSP chains is based on order installation routines run&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; LSPs have cooperative installers&lt;br /&gt; &amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;2) Problems when installing LSPs on the fly:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;* LSP change hasn’t taken effect for all apps:&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; device.exe/services.exe runs for the lifetime of the CE device&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Already open sockets will not use new LSP but new sockets will&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; LSP usually cache catalog at startup.&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; LSP won’t see changed catalog till restart.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;Example:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Server application is creating and using sockets&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Socket A is created with one chain before the LSP installs&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Socket B is created with another chain after install&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; If the application calls select with socket A and B, select fails&lt;br /&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;because the sockets have two different providers (see the documentation for select).&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&lt;br /&gt; 3) Why select works for IPv4 / IPv6, TCP / UDP: &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sv4 = socket (AF_INET,..);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; SOCKET sv6 = socket (AF_INET6,...);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; FDSET fds;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; FD_SET(fds,sv4);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; FD_SET(fds,sv6);&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Select (fdset1,...); &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; You would expect this to fail since sv4 and sv6 should be implemented by&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; different providers.&amp;nbsp; But our default base providers install with same GUID&lt;/span&gt;,&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; s&lt;span style="font-size: 10pt; font-family: Arial;"&gt;o this call will work with no LSPs installed. Several apps, including&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Activesync, call select on both IPv4 and IPv6 sockets in the same fd_set.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;4) What should your LSP Installer do? &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp; * Layer over TCPv4/TCPv6/UDPv4/UDPv6 with the same ProviderId GUID.&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Keeps select() working for all applications.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;5) How to configure CE to install your LSP &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;* Add a key to: &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HKEY_LOCAL_MACHINE\Comm\WS2\LSP\&amp;lt;your lsp&amp;gt;]&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; "Dll"="your_lsp.dll"&amp;nbsp; ; DLL containing your installer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; ;"DllEntry"="DllRegisterServer" ; // Function called to perform installation&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; // Default value is DllRegisterServer&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Order"=dword:400&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; // Order at which you’ll install&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; //&amp;nbsp; Default value is 0xFFFFFFFF&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; // Change this value to change your position in the&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp; // Protocol Stack&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&amp;nbsp;* On startup, before any apps have called WSAStartup, all installers will be&lt;br /&gt; run in the order specified (lowest Order value first).&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt; &lt;/span&gt;&lt;/font&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;br /&gt; &lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;[Author: Igor Dvorkin]&lt;br /&gt; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt; &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=277890" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>Layered Service Providers (LSPs) on Windows CE </title><link>http://blogs.msdn.com/cenet/archive/2004/12/01/273271.aspx</link><pubDate>Wed, 01 Dec 2004 20:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:273271</guid><dc:creator>cenet</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/cenet/comments/273271.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=273271</wfw:commentRss><description>&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;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;One of the difficulties I have supporting the LSP developer community is the&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;amount of time between me implementing a change, and having LSP developers become aware of it. Often, the time delta is such that I can't incorporate developer feedback till the next version of CE.&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;To help mitigate this issue I'd like to try putting my proposed recommendations and sample code on this blog. This will allow me to get feedback, and you to shape the growth of the CE LSP technology.&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;To help me understand who I should be targeting, &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;I’d like to know what you use your LSPs for. I’d appreciate if you added a comment stating what your LSP does, what version of CE (or PPC/SP)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;it needs to run on, and &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;if the LSP primarily passes through to the next level in the LSP chain. &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;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;[Author: Igor Dvorkin]&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=273271" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item><item><title>About Igor...</title><link>http://blogs.msdn.com/cenet/archive/2004/12/01/273269.aspx</link><pubDate>Wed, 01 Dec 2004 20:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:273269</guid><dc:creator>cenet</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/cenet/comments/273269.aspx</comments><wfw:commentRss>http://blogs.msdn.com/cenet/commentrss.aspx?PostID=273269</wfw:commentRss><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;My name is Igor Dvorkin. I've been with Window CE since 2002. I spend my time working on security and networking. Some of my interests on the security side are smartcards, local authentication, cryptography and penetration testing. On the networking side, I spend my time working with Layered Service Providers (LSPs) and desktop pass through for active sync. &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&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; &lt;p&gt;[Author: Igor Dvorkin]&lt;/p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=273269" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/cenet/archive/tags/Author_3A00_+Igor+Dvorkin/default.aspx">Author: Igor Dvorkin</category></item></channel></rss>