﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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/"><channel><title>博客园-msn㊣Microshaoft.comnaIBnaiM nOracle (大舌头) I Love download EditPlus.v3.11(340)!</title><link>http://www.cnblogs.com/Microshaoft/</link><description>&amp;copy; 0000 - 9999 ㊣ Microshaoft &amp;trade; &amp;reg;砍头不要紧 爱情价更高 欲穷千里目 粒粒皆辛苦 身披七彩祥云 脚踏金甲圣衣 卧鼠藏虫http://microshaoft.googlepages.com/</description><language>zh-cn</language><lastBuildDate>Mon, 06 Jul 2009 11:11:19 GMT</lastBuildDate><pubDate>Mon, 06 Jul 2009 11:11:19 GMT</pubDate><ttl>60</ttl><item><title>X509 static RSACryptoServiceProvider 高并发加解密</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/06/19/1506899.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Fri, 19 Jun 2009 08:24:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/06/19/1506899.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1506899.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/06/19/1506899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1506899.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1506899.html</trackback:ping><description><![CDATA[<pre>
<font face="Fixedsys">
<font color="#008000">/*</font>
<font color="#008000">makecert.exe -n &quot;CN=Microshaoft X509 Test - A&quot; -sky exchange -pe -sv a.pvk a.cer</font>
<font color="#008000">pvk2pfx.exe -pvk a.pvk -spc a.cer -pfx a.pfx -f -po 123</font>
<font color="#008000">makecert.exe -n &quot;CN=Microshaoft X509 Test - B&quot; -sky exchange -pe -sv b.pvk b.cer</font>
<font color="#008000">pvk2pfx.exe -pvk b.pvk -spc b.cer -pfx b.pfx -f -po abc</font>
<font color="#008000">*/</font>
<font color="#0000ff">namespace </font><font color="#800080">ConsoleApplication</font>
<font color="#800080">{</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.IO</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.</font><font color="#008080">Text</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Threading</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Security.Cryptography</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Security.Cryptography.X509Certificates</font><font color="#000000">;</font>
    <font color="#0000ff">public class </font><font color="#000000">Class1</font>
    <font color="#800080">{</font>
        <font color="#0000ff">static void </font><font color="#ff0000">Main</font><font color="#800080">(</font><font color="#0000ff">string</font><font color="#800080">[] </font><font color="#000000">args</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#000000">encryptorPrivateKeyPfxProvider </font><font color="#800080">= </font><font color="#000000">encryptorPrivateKeyPfx</font><font color="#800080">.</font><font color="#008080">PrivateKey </font><font color="#0000ff">as </font><font color="#800000">RSACryptoServiceProvider</font><font color="#000000">;</font>
            <font color="#000000">encryptorPublicKeyCerProvider </font><font color="#800080">= </font><font color="#000000">encryptorPublicKeyCer</font><font color="#800080">.</font><font color="#008080">PublicKey</font><font color="#800080">.</font><font color="#008080">Key </font><font color="#0000ff">as </font><font color="#800000">RSACryptoServiceProvider</font><font color="#000000">;</font>
            <font color="#000000">decryptorPublicKeyCerProvider </font><font color="#800080">= </font><font color="#000000">decryptorPublicKeyCer</font><font color="#800080">.</font><font color="#008080">PublicKey</font><font color="#800080">.</font><font color="#008080">Key </font><font color="#0000ff">as </font><font color="#800000">RSACryptoServiceProvider</font><font color="#000000">;</font>
            <font color="#000000">decryptorPrivateKeyPfxProvider </font><font color="#800080">= </font><font color="#000000">decryptorPrivateKeyPfx</font><font color="#800080">.</font><font color="#008080">PrivateKey </font><font color="#0000ff">as </font><font color="#800000">RSACryptoServiceProvider</font><font color="#000000">;</font>
            <font color="#0000ff">for </font><font color="#800080">(</font><font color="#0000ff">int </font><font color="#000000">i </font><font color="#800080">= </font><font color="#000000">0 ; i </font><font color="#800080">&lt; </font><font color="#000000">2000 ; i</font><font color="#800080">++)</font>
            <font color="#800080">{</font>
                <font color="#800000">ThreadStart </font><font color="#000000">ts </font><font color="#800080">= new </font><font color="#800000">ThreadStart</font><font color="#800080">(</font><font color="#ff0000">Run</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800000">Thread </font><font color="#000000">t </font><font color="#800080">= new </font><font color="#800000">Thread</font><font color="#800080">(</font><font color="#000000">ts</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#000000">t</font><font color="#800080">.</font><font color="#008080">Name </font><font color="#800080">= </font><font color="#000000">_ThreadID</font><font color="#800080">.</font><font color="#ff0000">ToString</font><font color="#800080">()</font><font color="#000000">;</font>
                <font color="#000000">_ThreadID </font><font color="#800080">++</font><font color="#000000">;</font>
                <font color="#000000">t</font><font color="#800080">.</font><font color="#ff0000">Start</font><font color="#800080">()</font><font color="#000000">;</font>
                <font color="#008000">//Run();</font>
            <font color="#800080">}</font>
        
        <font color="#800080">}</font>
        <font color="#0000ff">private static volatile int </font><font color="#000000">_ThreadID </font><font color="#800080">= </font><font color="#000000">0;</font>
        <font color="#0000ff">private static object </font><font color="#000000">_syncLockObject </font><font color="#800080">= new </font><font color="#0000ff">object</font><font color="#800080">()</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">X509Certificate2 </font><font color="#000000">encryptorPrivateKeyPfx </font><font color="#800080">= new </font><font color="#800000">X509Certificate2</font><font color="#800080">(</font><font color="#000000">@</font><font color="#ff00ff">&quot;a.pfx&quot;</font><font color="#000000">, </font><font color="#ff00ff">&quot;123&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">X509Certificate2 </font><font color="#000000">encryptorPublicKeyCer </font><font color="#800080">= new </font><font color="#800000">X509Certificate2</font><font color="#800080">(</font><font color="#000000">@</font><font color="#ff00ff">&quot;a.cer&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">X509Certificate2 </font><font color="#000000">decryptorPublicKeyCer </font><font color="#800080">= new </font><font color="#800000">X509Certificate2</font><font color="#800080">(</font><font color="#000000">@</font><font color="#ff00ff">&quot;b.cer&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">X509Certificate2 </font><font color="#000000">decryptorPrivateKeyPfx </font><font color="#800080">= new </font><font color="#800000">X509Certificate2</font><font color="#800080">(</font><font color="#000000">@</font><font color="#ff00ff">&quot;b.pfx&quot;</font><font color="#000000">, </font><font color="#ff00ff">&quot;abc&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">RSACryptoServiceProvider </font><font color="#000000">encryptorPrivateKeyPfxProvider </font><font color="#800080">= null</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">RSACryptoServiceProvider </font><font color="#000000">encryptorPublicKeyCerProvider </font><font color="#800080">= null</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">RSACryptoServiceProvider </font><font color="#000000">decryptorPublicKeyCerProvider </font><font color="#800080">= null</font><font color="#000000">;</font>
        <font color="#0000ff">private static </font><font color="#800000">RSACryptoServiceProvider </font><font color="#000000">decryptorPrivateKeyPfxProvider </font><font color="#800080">= null</font><font color="#000000">;</font>
        <font color="#0000ff">static void </font><font color="#ff0000">Run</font><font color="#800080">()</font>
        <font color="#800080">{</font>
            <font color="#008000">//</font>
            <font color="#008000">// TODO: 在此处添加代码以启动应用程序</font>
            <font color="#008000">//</font>
            <font color="#0000ff">string </font><font color="#000000">s </font><font color="#800080">= </font><font color="#ff00ff">&quot;原明文原明文原明文原明文原明文原明文原明文原明文原明文&quot;</font><font color="#000000">;</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">data </font><font color="#800080">= </font><font color="#008080">Encoding</font><font color="#800080">.</font><font color="#008080">UTF8</font><font color="#800080">.</font><font color="#ff0000">GetBytes</font><font color="#800080">(</font><font color="#000000">s</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">signature;</font>
            <font color="#0000ff">bool </font><font color="#000000">DoOAEPadding </font><font color="#800080">= </font><font color="#0000ff">false</font><font color="#000000">;</font>
            <font color="#0000ff">bool </font><font color="#000000">verifyed </font><font color="#800080">= </font><font color="#0000ff">false</font><font color="#000000">;</font>
<font color="#008000">///            X509Certificate2 encryptorPrivateKeyPfx = null;</font>
<font color="#008000">///            X509Certificate2 encryptorPublicKeyCer = null;</font>
<font color="#008000">///            X509Certificate2 decryptorPublicKeyCer = null;</font>
<font color="#008000">///            X509Certificate2 decryptorPrivateKeyPfx = null;</font>
            <font color="#0000ff">try</font>
            <font color="#800080">{</font>
<font color="#008000">///                encryptorPrivateKeyPfx = new X509Certificate2(@&quot;a.pfx&quot;, &quot;123&quot;);</font>
<font color="#008000">///                encryptorPublicKeyCer = new X509Certificate2(@&quot;a.cer&quot;);</font>
<font color="#008000">///                decryptorPublicKeyCer = new X509Certificate2(@&quot;b.cer&quot;);</font>
<font color="#008000">///                decryptorPrivateKeyPfx = new X509Certificate2(@&quot;b.pfx&quot;, &quot;abc&quot;);</font>
                <font color="#008000">//using (RSACryptoServiceProvider decryptorPublicKeyCerProvider = decryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider)</font>
                <font color="#800080">{</font>
                    <font color="#008000">//加密</font>
                    <font color="#000000">data </font><font color="#800080">= </font><font color="#000000">decryptorPublicKeyCerProvider</font><font color="#800080">.</font><font color="#ff0000">Encrypt</font><font color="#800080">(</font><font color="#000000">data, DoOAEPadding</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">hash </font><font color="#800080">= new </font><font color="#800000">SHA1CryptoServiceProvider</font><font color="#800080">().</font><font color="#ff0000">ComputeHash</font><font color="#800080">(</font><font color="#000000">data</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#008000">//using (RSACryptoServiceProvider encryptorPrivateKeyPfxProvider = encryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider)</font>
                <font color="#800080">{</font>
                    <font color="#008000">//签名</font>
                    <font color="#000000">signature </font><font color="#800080">= </font><font color="#000000">encryptorPrivateKeyPfxProvider</font><font color="#800080">.</font><font color="#ff0000">SignHash</font><font color="#800080">(</font><font color="#000000">hash, </font><font color="#ff00ff">&quot;SHA1&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#008000">//using (RSACryptoServiceProvider encryptorPublicKeyCerProvider = encryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider)</font>
                <font color="#800080">{</font>
                    <font color="#008000">//验签</font>
                    <font color="#000000">verifyed </font><font color="#800080">= </font><font color="#000000">encryptorPublicKeyCerProvider</font><font color="#800080">.</font><font color="#ff0000">VerifyHash</font><font color="#800080">(</font><font color="#000000">hash, </font><font color="#ff00ff">&quot;SHA1&quot;</font><font color="#000000">, signature</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#008000">//using (RSACryptoServiceProvider decryptorPrivateKeyPfxProvider = decryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider)</font>
                <font color="#800080">{</font>
                    <font color="#008000">//解密</font>
                    <font color="#000000">data </font><font color="#800080">= </font><font color="#000000">decryptorPrivateKeyPfxProvider</font><font color="#800080">.</font><font color="#ff0000">Decrypt</font><font color="#800080">(</font><font color="#000000">data, DoOAEPadding</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#000000">s </font><font color="#800080">= </font><font color="#008080">Encoding</font><font color="#800080">.</font><font color="#008080">UTF8</font><font color="#800080">.</font><font color="#ff0000">GetString</font><font color="#800080">(</font><font color="#000000">data</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;{0},{1},{2}&quot;</font><font color="#000000">, </font><font color="#800000">Thread</font><font color="#800080">.</font><font color="#008080">CurrentThread</font><font color="#800080">.</font><font color="#008080">Name</font><font color="#000000">, verifyed, s</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">catch </font><font color="#800080">(</font><font color="#008080">Exception </font><font color="#000000">e</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">e</font><font color="#800080">.</font><font color="#ff0000">ToString</font><font color="#800080">())</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">finally</font>
            <font color="#800080">{</font>
<font color="#008000">///                if (encryptorPrivateKeyPfx != null)</font>
<font color="#008000">///                {</font>
<font color="#008000">///                    encryptorPrivateKeyPfx.Reset();</font>
<font color="#008000">///                }</font>
<font color="#008000">///                if (encryptorPublicKeyCer != null)</font>
<font color="#008000">///                {</font>
<font color="#008000">///                    encryptorPublicKeyCer.Reset();</font>
<font color="#008000">///                }</font>
<font color="#008000">///                if (decryptorPublicKeyCer != null)</font>
<font color="#008000">///                {</font>
<font color="#008000">///                    decryptorPublicKeyCer.Reset();</font>
<font color="#008000">///                }</font>
            <font color="#800080">}</font>
        <font color="#800080">}</font>
    <font color="#800080">}</font>
<font color="#800080">}</font>
</font>
</pre><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1506899.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48008/" target="_blank">IBM发布全球首款开源智能编译器</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title> EditPlus 于 2009-06-02 升级到 v3.11(340) </title><link>http://www.cnblogs.com/Microshaoft/archive/2009/06/08/1499220.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Mon, 08 Jun 2009 15:35:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/06/08/1499220.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1499220.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/06/08/1499220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1499220.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1499220.html</trackback:ping><description><![CDATA[<p>What's<br />Version 3.11(Build 340)</p>
<p>&lt;feature&gt;<br />* 'Send PWD after each interval' FTP option.<br />* Allows custom file filter on the Directory Window.<br />* 'Save current file' option for user tool setting.<br />* 'FTP account' option on the Project dialog box.<br />* 'Directory name' option in the Project dialog box.<br />* Upload dialog box accepts drag and drop.<br />* 'Undo/Redo All' commands ('Edit'-&gt;'Clipboard').<br />* 'Delete Empty Lines' command ('Edit'-&gt;'Delete').<br />* 'Delete Duplicated Lines' command ('Edit'-&gt;'Delete').<br />* Supports syntax highlighting of backup files.<br />* Allows multiple selections on the Output Window.<br /><span style="color: red">* 'Import/Export' button on the 'Set Directories' dialog box.</span><br />* Adds color option for the Cliptext/directory window.<br />* Increases user tool button to 20.<br />* Toolbar button for 'Close Others'.<br />&lt;bug fix&gt;<br />* Cancel button on the FTP transfer screen works immediately.<br />* Directory Window did not work with certain file extensions.<br />* Displays 'Remove Leading Spaces' command in the popup menu too.</p><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1499220.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48007/" target="_blank">IE颓势不减 微软下月公布最新浏览器架构</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>EncodingHelper Identify Encoding by BOM</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/05/23/1487625.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Sat, 23 May 2009 05:26:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/05/23/1487625.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1487625.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/05/23/1487625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1487625.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1487625.html</trackback:ping><description><![CDATA[<pre>
<font face="Fixedsys">
<font color="#0000ff">namespace </font><font color="#000000">Microshaoft</font>
<font color="#800080">{</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.IO</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.</font><font color="#008080">Text</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Collections.Generic</font><font color="#000000">;</font>
    <font color="#0000ff">public static class </font><font color="#000000">EncodingHelper</font>
    <font color="#800080">{</font>
        <font color="#0000ff">public static </font><font color="#008080">Encoding </font><font color="#000000">IdentifyEncoding</font>
                                    <font color="#800080">(</font>
                                        <font color="#008080">Stream </font><font color="#000000">stream</font>
                                        <font color="#000000">, </font><font color="#008080">Encoding </font><font color="#000000">defaultEncoding</font>
                                        <font color="#000000">, </font><font color="#008080">Encoding</font><font color="#800080">[] </font><font color="#000000">identifyEncodings</font>
                                    <font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">data </font><font color="#800080">= </font><font color="#000000">StreamDataHelper</font><font color="#800080">.</font><font color="#000000">ReadDataToBytes</font><font color="#800080">(</font><font color="#000000">stream</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">return </font><font color="#000000">IdentifyEncoding</font>
                        <font color="#800080">(</font>
                            <font color="#000000">data</font>
                            <font color="#000000">, defaultEncoding</font>
                            <font color="#000000">, identifyEncodings</font>
                        <font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public static </font><font color="#008080">Encoding </font><font color="#000000">IdentifyEncoding</font>
                                    <font color="#800080">(</font>
                                        <font color="#008080">Stream </font><font color="#000000">stream</font>
                                        <font color="#000000">, </font><font color="#008080">Encoding </font><font color="#000000">defaultEncoding</font>
                                    <font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">data </font><font color="#800080">= </font><font color="#000000">StreamDataHelper</font><font color="#800080">.</font><font color="#000000">ReadDataToBytes</font><font color="#800080">(</font><font color="#000000">stream</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">return </font><font color="#000000">IdentifyEncoding</font>
                        <font color="#800080">(</font>
                            <font color="#000000">data</font>
                            <font color="#000000">, defaultEncoding</font>
                        <font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public static </font><font color="#008080">Encoding </font><font color="#000000">IdentifyEncoding</font>
                                    <font color="#800080">(</font>
                                        <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">data</font>
                                        <font color="#000000">, </font><font color="#008080">Encoding </font><font color="#000000">defaultEncoding</font>
                                    <font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#800000">EncodingInfo</font><font color="#800080">[] </font><font color="#000000">encodingInfos </font><font color="#800080">= </font><font color="#008080">Encoding</font><font color="#800080">.</font><font color="#ff0000">GetEncodings</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#008080">List</font><font color="#800080">&lt;</font><font color="#008080">Encoding</font><font color="#800080">&gt; </font><font color="#000000">list </font><font color="#800080">= new </font><font color="#008080">List</font><font color="#800080">&lt;</font><font color="#008080">Encoding</font><font color="#800080">&gt;()</font><font color="#000000">;</font>
            <font color="#0000ff">foreach </font><font color="#800080">(</font><font color="#800000">EncodingInfo </font><font color="#000000">info </font><font color="#0000ff">in </font><font color="#000000">encodingInfos</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#008080">Encoding </font><font color="#000000">e </font><font color="#800080">= </font><font color="#000000">info</font><font color="#800080">.</font><font color="#ff0000">GetEncoding</font><font color="#800080">()</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">e</font><font color="#800080">.</font><font color="#ff0000">GetPreamble</font><font color="#800080">().</font><font color="#008080">Length </font><font color="#800080">&gt; </font><font color="#000000">0</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#000000">list</font><font color="#800080">.</font><font color="#ff0000">Add</font><font color="#800080">(</font><font color="#000000">e</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#008080">System</font><font color="#800080">.</font><font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">e</font><font color="#800080">.</font><font color="#008080">EncodingName</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
            <font color="#800080">}</font>
            <font color="#008080">Encoding</font><font color="#800080">[] </font><font color="#000000">encodings </font><font color="#800080">= new </font><font color="#008080">Encoding</font><font color="#800080">[</font><font color="#000000">list</font><font color="#800080">.</font><font color="#008080">Count</font><font color="#800080">]</font><font color="#000000">;</font>
            <font color="#000000">list</font><font color="#800080">.</font><font color="#ff0000">CopyTo</font><font color="#800080">(</font><font color="#000000">encodings</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">return </font><font color="#000000">IdentifyEncoding</font>
                        <font color="#800080">(</font>
                            <font color="#000000">data</font>
                            <font color="#000000">, defaultEncoding</font>
                            <font color="#000000">, encodings</font>
                        <font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public static </font><font color="#008080">Encoding </font><font color="#000000">IdentifyEncoding</font>
                                    <font color="#800080">(</font>
                                        <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">data</font>
                                        <font color="#000000">, </font><font color="#008080">Encoding </font><font color="#000000">defaultEncoding</font>
                                        <font color="#000000">, </font><font color="#008080">Encoding</font><font color="#800080">[] </font><font color="#000000">identifyEncodings</font>
                                    <font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#008080">Encoding </font><font color="#000000">encoding </font><font color="#800080">= </font><font color="#000000">defaultEncoding;</font>
            <font color="#0000ff">foreach </font><font color="#800080">(</font><font color="#008080">Encoding </font><font color="#000000">e </font><font color="#0000ff">in </font><font color="#000000">identifyEncodings</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">buffer </font><font color="#800080">= </font><font color="#000000">e</font><font color="#800080">.</font><font color="#ff0000">GetPreamble</font><font color="#800080">()</font><font color="#000000">;</font>
                <font color="#0000ff">int </font><font color="#000000">l </font><font color="#800080">= </font><font color="#000000">buffer</font><font color="#800080">.</font><font color="#008080">Length</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">l </font><font color="#800080">== </font><font color="#000000">0</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">continue</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">bool </font><font color="#000000">flag </font><font color="#800080">= </font><font color="#0000ff">false</font><font color="#000000">;</font>
                <font color="#0000ff">for </font><font color="#800080">(</font><font color="#0000ff">int </font><font color="#000000">i </font><font color="#800080">= </font><font color="#000000">0; i </font><font color="#800080">&lt; </font><font color="#000000">l; i</font><font color="#800080">++)</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">buffer</font><font color="#800080">[</font><font color="#000000">i</font><font color="#800080">] != </font><font color="#000000">data</font><font color="#800080">[</font><font color="#000000">i</font><font color="#800080">])</font>
                    <font color="#800080">{</font>
                        <font color="#000000">flag </font><font color="#800080">= </font><font color="#0000ff">true</font><font color="#000000">;</font>
                        <font color="#0000ff">break</font><font color="#000000">;</font>
                    <font color="#800080">}</font>
                <font color="#800080">}</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">flag</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">continue</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">else</font>
                <font color="#800080">{</font>
                    <font color="#000000">encoding </font><font color="#800080">= </font><font color="#000000">e;</font>
                <font color="#800080">}</font>
            <font color="#800080">}</font>
            <font color="#0000ff">return </font><font color="#000000">encoding;</font>
        <font color="#800080">}</font>
    <font color="#800080">}</font>
<font color="#800080">}</font>
<font color="#0000ff">namespace </font><font color="#000000">Microshaoft</font>
<font color="#800080">{</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.IO</font><font color="#000000">;</font>
    <font color="#0000ff">public static class </font><font color="#000000">StreamDataHelper</font>
    <font color="#800080">{</font>
        <font color="#0000ff">public static byte</font><font color="#800080">[] </font><font color="#000000">ReadDataToBytes</font><font color="#800080">(</font><font color="#008080">Stream </font><font color="#000000">stream</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">buffer </font><font color="#800080">= new </font><font color="#0000ff">byte</font><font color="#800080">[</font><font color="#000000">64 </font><font color="#800080">* </font><font color="#000000">1024</font><font color="#800080">]</font><font color="#000000">;</font>
            <font color="#800000">MemoryStream </font><font color="#000000">ms </font><font color="#800080">= new </font><font color="#800000">MemoryStream</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#0000ff">int </font><font color="#000000">r </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#0000ff">int </font><font color="#000000">l </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#0000ff">long </font><font color="#000000">position </font><font color="#800080">= -</font><font color="#000000">1;</font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">CanSeek</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#000000">position </font><font color="#800080">= </font><font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">Position</font><font color="#000000">;</font>
                <font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">while </font><font color="#800080">(</font><font color="#0000ff">true</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#000000">r </font><font color="#800080">= </font><font color="#000000">stream</font><font color="#800080">.</font><font color="#ff0000">Read</font><font color="#800080">(</font><font color="#000000">buffer, 0, buffer</font><font color="#800080">.</font><font color="#008080">Length</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">r </font><font color="#800080">&gt; </font><font color="#000000">0</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#000000">l </font><font color="#800080">+= </font><font color="#000000">r;</font>
                    <font color="#000000">ms</font><font color="#800080">.</font><font color="#ff0000">Write</font><font color="#800080">(</font><font color="#000000">buffer, 0, r</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">else</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">break</font><font color="#000000">;</font>
                <font color="#800080">}</font>
            <font color="#800080">}</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">bytes </font><font color="#800080">= new </font><font color="#0000ff">byte</font><font color="#800080">[</font><font color="#000000">l</font><font color="#800080">]</font><font color="#000000">;</font>
            <font color="#000000">ms</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#000000">ms</font><font color="#800080">.</font><font color="#ff0000">Read</font><font color="#800080">(</font><font color="#000000">bytes, 0, </font><font color="#800080">(</font><font color="#0000ff">int</font><font color="#800080">) </font><font color="#000000">l</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">ms</font><font color="#800080">.</font><font color="#ff0000">Close</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#000000">ms</font><font color="#800080">.</font><font color="#ff0000">Dispose</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#000000">ms </font><font color="#800080">= null</font><font color="#000000">;</font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">position </font><font color="#800080">&gt;= </font><font color="#000000">0</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">position;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">return </font><font color="#000000">bytes;</font>
        <font color="#800080">}</font>
    <font color="#800080">}</font>
<font color="#800080">}</font>
</font>
</pre><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1487625.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48002/" target="_blank">竞争日趋激烈 微软欲借 Windows 7 扭转战局</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>FindPrivateKey X509</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/05/19/1460665.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Tue, 19 May 2009 15:02:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/05/19/1460665.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1460665.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/05/19/1460665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1460665.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1460665.html</trackback:ping><description><![CDATA[<pre>
<font face="Fixedsys">
<font color="#0000ff">namespace </font><font color="#800080">Microsoft.</font><font color="#000000">ChannelSDK</font><font color="#800080">.Tools.</font><font color="#000000">FindPrivateKey</font>
<font color="#800080">{</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.IO</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Security.Cryptography.X509Certificates</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Runtime.InteropServices</font><font color="#000000">;</font>
    <font color="#0000ff">class </font><font color="#000000">FindPrivateKey</font>
    <font color="#800080">{</font>
        <font color="#0000ff">static void </font><font color="#000000">PrintHelp</font><font color="#800080">()</font>
        <font color="#800080">{</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;FindPrivateKey helps user to find the location of the Private Key file of a X.509 Certificate.&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;Usage: FindPrivateKey &lt;storeName&gt; &lt;storeLocation&gt; [{ {-n &lt;subjectName&gt;} | {-t &lt;thumbprint&gt;} } [-f | -d | -a]]&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;       &lt;subjectName&gt; subject name of the certificate&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;       &lt;thumbprint&gt;  thumbprint of the certificate (use certmgr.exe to get it)&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;       -f            output file name only&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;       -d            output directory only&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;       -a            output absolute file name&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;e.g. FindPrivateKey My CurrentUser -n \&quot;CN=John Doe\&quot;&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;e.g. FindPrivateKey My LocalMachine -t \&quot;03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52\&quot; -a&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">static void </font><font color="#ff0000">Main</font><font color="#800080">(</font><font color="#0000ff">string</font><font color="#800080">[] </font><font color="#000000">args</font><font color="#800080">)</font>
        <font color="#800080">{            </font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">args</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">&lt; </font><font color="#000000">2 </font><font color="#800080">|| </font><font color="#000000">args</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">== </font><font color="#000000">3 </font><font color="#800080">|| </font><font color="#000000">args</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">&gt; </font><font color="#000000">5 </font>
                <font color="#800080">|| (</font><font color="#000000">args</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">&gt; </font><font color="#000000">2 </font><font color="#800080">&amp;&amp; </font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">2</font><font color="#800080">] != </font><font color="#ff00ff">&quot;-n&quot; </font><font color="#800080">&amp;&amp; </font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">2</font><font color="#800080">] != </font><font color="#ff00ff">&quot;-t&quot;</font><font color="#800080">)</font>
                <font color="#800080">|| (</font><font color="#000000">args</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">== </font><font color="#000000">5 </font><font color="#800080">&amp;&amp; </font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">4</font><font color="#800080">] != </font><font color="#ff00ff">&quot;-f&quot; </font><font color="#800080">&amp;&amp; </font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">4</font><font color="#800080">] != </font><font color="#ff00ff">&quot;-d&quot; </font><font color="#800080">&amp;&amp; </font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">4</font><font color="#800080">] != </font><font color="#ff00ff">&quot;-a&quot;</font><font color="#800080">))</font>
            <font color="#800080">{</font>
                <font color="#000000">PrintHelp</font><font color="#800080">()</font><font color="#000000">;</font>
                <font color="#0000ff">return</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">try</font>
            <font color="#800080">{</font>
                <font color="#800080">StoreName </font><font color="#000000">storeName </font><font color="#800080">= (StoreName)</font><font color="#ff0000">Enum</font><font color="#800080">.</font><font color="#ff0000">Parse</font><font color="#800080">(typeof(StoreName)</font><font color="#000000">, args</font><font color="#800080">[</font><font color="#000000">0</font><font color="#800080">]</font><font color="#000000">, </font><font color="#0000ff">true</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#008080">StoreLocation </font><font color="#000000">storeLocation </font><font color="#800080">= (</font><font color="#008080">StoreLocation</font><font color="#800080">)</font><font color="#ff0000">Enum</font><font color="#800080">.</font><font color="#ff0000">Parse</font><font color="#800080">(typeof(</font><font color="#008080">StoreLocation</font><font color="#800080">)</font><font color="#000000">, args</font><font color="#800080">[</font><font color="#000000">1</font><font color="#800080">]</font><font color="#000000">, </font><font color="#0000ff">true</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800000">X509Certificate2 </font><font color="#000000">cert;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">args</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">&gt; </font><font color="#000000">2</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#008000">// insert a comma followed by a space for store.Certificates.Find(findType, key, false) </font>
                    <font color="#008000">// to successful find the certificate</font>
                    <font color="#0000ff">string </font><font color="#000000">key </font><font color="#800080">= </font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">3</font><font color="#800080">]</font><font color="#000000">;</font>
                    <font color="#0000ff">string</font><font color="#800080">[] </font><font color="#000000">keys </font><font color="#800080">= </font><font color="#000000">key</font><font color="#800080">.</font><font color="#ff0000">Split</font><font color="#800080">(</font><font color="#ff00ff">','</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#000000">key </font><font color="#800080">= </font><font color="#0000ff">string</font><font color="#800080">.</font><font color="#008080">Empty</font><font color="#000000">;</font>
                    <font color="#0000ff">for </font><font color="#800080">(</font><font color="#0000ff">int </font><font color="#000000">i </font><font color="#800080">= </font><font color="#000000">0; i </font><font color="#800080">&lt; </font><font color="#000000">keys</font><font color="#800080">.</font><font color="#008080">Length</font><font color="#000000">; i</font><font color="#800080">++)</font>
                    <font color="#800080">{</font>
                        <font color="#000000">key </font><font color="#800080">+= </font><font color="#000000">keys</font><font color="#800080">[</font><font color="#000000">i</font><font color="#800080">]</font><font color="#000000">;</font>
                        <font color="#0000ff">if </font><font color="#800080">( </font><font color="#000000">i </font><font color="#800080">!= </font><font color="#000000">keys</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">-</font><font color="#000000">1 </font><font color="#800080">)</font>
                         <font color="#000000">key </font><font color="#800080">+= </font><font color="#ff00ff">&quot;, &quot;</font><font color="#000000">;</font>
                    <font color="#800080">}</font>
                    <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">2</font><font color="#800080">] == </font><font color="#ff00ff">&quot;-n&quot;</font><font color="#800080">)</font>
                        <font color="#000000">cert </font><font color="#800080">= </font><font color="#000000">LoadCertificate</font><font color="#800080">(</font><font color="#000000">storeName, storeLocation, key, </font><font color="#800080">X509FindType.FindBySubjectDistinguishedName)</font><font color="#000000">;</font>
                    <font color="#0000ff">else</font>
                        <font color="#000000">cert </font><font color="#800080">= </font><font color="#000000">LoadCertificate</font><font color="#800080">(</font><font color="#000000">storeName, storeLocation, key, </font><font color="#800080">X509FindType.FindByThumbprint)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">else</font>
                <font color="#800080">{</font>
                    <font color="#000000">cert </font><font color="#800080">= </font><font color="#000000">SelectCertificate</font><font color="#800080">(</font><font color="#000000">storeName, storeLocation</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">cert </font><font color="#800080">== null)</font>
                        <font color="#0000ff">return</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">string </font><font color="#000000">privateKeyFile </font><font color="#800080">= </font><font color="#000000">GetKeyFileName</font><font color="#800080">(</font><font color="#000000">cert</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#0000ff">string </font><font color="#000000">privateKeyDirectory </font><font color="#800080">= </font><font color="#000000">GetKeyFileDirectory</font><font color="#800080">(</font><font color="#000000">privateKeyFile</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">args</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">== </font><font color="#000000">5</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">4</font><font color="#800080">] == </font><font color="#ff00ff">&quot;-f&quot;</font><font color="#800080">)</font>
                        <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">privateKeyFile</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#0000ff">else if </font><font color="#800080">(</font><font color="#000000">args</font><font color="#800080">[</font><font color="#000000">4</font><font color="#800080">] == </font><font color="#ff00ff">&quot;-d&quot;</font><font color="#800080">)</font>
                        <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">privateKeyDirectory</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#0000ff">else</font>
                        <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;a:{0}\\{1}&quot;</font><font color="#000000">, privateKeyDirectory, privateKeyFile</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">else</font>
                <font color="#800080">{</font>
                    <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;Private key directory:&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">privateKeyDirectory</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;Private key file name:&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">privateKeyFile</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
            <font color="#800080">}</font>
            <font color="#0000ff">catch </font><font color="#800080">(</font><font color="#008080">Exception </font><font color="#000000">ex</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;FindPrivateKey failed for the following reason:&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">ex</font><font color="#800080">.</font><font color="#008080">Message</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;\nUse /? option for help&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800080">}</font>
        <font color="#800080">}</font>
        <font color="#0000ff">static </font><font color="#800000">X509Certificate2 </font><font color="#000000">SelectCertificate</font><font color="#800080">(StoreName </font><font color="#000000">storeName, </font><font color="#008080">StoreLocation </font><font color="#000000">storeLocation</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#800000">X509Certificate2 </font><font color="#000000">result;</font>
            <font color="#800000">X509Store </font><font color="#000000">store </font><font color="#800080">= new </font><font color="#800000">X509Store</font><font color="#800080">(</font><font color="#000000">storeName, storeLocation</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">store</font><font color="#800080">.</font><font color="#ff0000">Open</font><font color="#800080">(OpenFlags.</font><font color="#ff0000">ReadOnly</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">try</font>
            <font color="#800080">{</font>
                <font color="#800000">X509Certificate2Collection </font><font color="#000000">matches;</font>
                <font color="#000000">matches </font><font color="#800080">= </font><font color="#800000">X509Certificate2UI</font><font color="#800080">.</font><font color="#ff0000">SelectFromCollection</font><font color="#800080">(</font><font color="#000000">store</font><font color="#800080">.</font><font color="#008080">Certificates</font><font color="#000000">, </font><font color="#ff00ff">&quot;Select certificate&quot;</font><font color="#000000">, </font><font color="#ff00ff">&quot;Select the certificate to find the location of the associated private key file:&quot;</font><font color="#000000">, </font><font color="#800080">X509SelectionFlag.SingleSelection)</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">matches</font><font color="#800080">.</font><font color="#008080">Count </font><font color="#800080">!= </font><font color="#000000">1</font><font color="#800080">)</font>
                    <font color="#000000">result </font><font color="#800080">= null</font><font color="#000000">;</font>
                <font color="#0000ff">else</font>
                    <font color="#000000">result </font><font color="#800080">= </font><font color="#000000">matches</font><font color="#800080">[</font><font color="#000000">0</font><font color="#800080">]</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">finally</font>
            <font color="#800080">{</font>
                <font color="#000000">store</font><font color="#800080">.</font><font color="#ff0000">Close</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">return </font><font color="#000000">result;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">static </font><font color="#800000">X509Certificate2 </font><font color="#000000">LoadCertificate</font><font color="#800080">(StoreName </font><font color="#000000">storeName, </font><font color="#008080">StoreLocation </font><font color="#000000">storeLocation, </font><font color="#0000ff">string </font><font color="#000000">key, </font><font color="#800080">X509FindType </font><font color="#000000">findType</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#800000">X509Certificate2 </font><font color="#000000">result;</font>
            <font color="#800000">X509Store </font><font color="#000000">store </font><font color="#800080">= new </font><font color="#800000">X509Store</font><font color="#800080">(</font><font color="#000000">storeName, storeLocation</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">store</font><font color="#800080">.</font><font color="#ff0000">Open</font><font color="#800080">(OpenFlags.</font><font color="#ff0000">ReadOnly</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">try</font>
            <font color="#800080">{</font>
                <font color="#800000">X509Certificate2Collection </font><font color="#000000">matches;</font>
                <font color="#000000">matches </font><font color="#800080">= </font><font color="#000000">store</font><font color="#800080">.</font><font color="#008080">Certificates</font><font color="#800080">.</font><font color="#ff0000">Find</font><font color="#800080">(</font><font color="#000000">findType, key, </font><font color="#0000ff">false</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">matches</font><font color="#800080">.</font><font color="#008080">Count </font><font color="#800080">&gt; </font><font color="#000000">1</font><font color="#800080">)</font>
                    <font color="#0000ff">throw </font><font color="#800080">new </font><font color="#800000">InvalidOperationException</font><font color="#800080">(</font><font color="#008080">String</font><font color="#800080">.</font><font color="#ff0000">Format</font><font color="#800080">(</font><font color="#ff00ff">&quot;More than one certificate with key '{0}' found in the store.&quot;</font><font color="#000000">, key</font><font color="#800080">))</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">matches</font><font color="#800080">.</font><font color="#008080">Count </font><font color="#800080">== </font><font color="#000000">0</font><font color="#800080">)</font>
                    <font color="#0000ff">throw </font><font color="#800080">new </font><font color="#800000">InvalidOperationException</font><font color="#800080">(</font><font color="#008080">String</font><font color="#800080">.</font><font color="#ff0000">Format</font><font color="#800080">(</font><font color="#ff00ff">&quot;No certificates with key '{0}' found in the store.&quot;</font><font color="#000000">, key</font><font color="#800080">))</font><font color="#000000">;</font>
                <font color="#000000">result </font><font color="#800080">= </font><font color="#000000">matches</font><font color="#800080">[</font><font color="#000000">0</font><font color="#800080">]</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">finally</font>
            <font color="#800080">{</font>
                <font color="#000000">store</font><font color="#800080">.</font><font color="#ff0000">Close</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">return </font><font color="#000000">result;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">static string </font><font color="#000000">GetKeyFileName</font><font color="#800080">(</font><font color="#800000">X509Certificate2 </font><font color="#000000">cert</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#800000">IntPtr            </font><font color="#000000">hProvider     </font><font color="#800080">= </font><font color="#800000">IntPtr</font><font color="#800080">.Zero</font><font color="#000000">; </font><font color="#008000">// CSP handle</font>
            <font color="#0000ff">bool              </font><font color="#000000">freeProvider  </font><font color="#800080">= </font><font color="#0000ff">false</font><font color="#000000">;       </font><font color="#008000">// Do we need to free the CSP ?</font>
            <font color="#0000ff">uint               </font><font color="#000000">acquireFlags  </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#0000ff">int                  </font><font color="#000000">_keyNumber </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#0000ff">string              </font><font color="#000000">keyFileName </font><font color="#800080">= null</font><font color="#000000">;</font>
            <font color="#0000ff">byte</font><font color="#800080">[]              </font><font color="#000000">keyFileBytes </font><font color="#800080">= null</font><font color="#000000">;</font>
            <font color="#008000">//</font>
            <font color="#008000">// Determine whether there is private key information available for this certificate in the key store</font>
            <font color="#008000">//</font>
            <font color="#0000ff">if </font><font color="#800080">( </font><font color="#000000">CryptAcquireCertificatePrivateKey</font><font color="#800080">(</font><font color="#000000">cert</font><font color="#800080">.</font><font color="#008080">Handle</font><font color="#000000">,</font>
                <font color="#000000">acquireFlags,</font>
                <font color="#800000">IntPtr</font><font color="#800080">.Zero</font><font color="#000000">,</font>
                <font color="#0000ff">ref </font><font color="#000000">hProvider,</font>
                <font color="#0000ff">ref </font><font color="#000000">_keyNumber,</font>
                <font color="#0000ff">ref </font><font color="#000000">freeProvider</font><font color="#800080">) )</font>
            <font color="#800080">{</font>
                <font color="#800000">IntPtr </font><font color="#000000">pBytes  </font><font color="#800080">= </font><font color="#800000">IntPtr</font><font color="#800080">.Zero</font><font color="#000000">; </font><font color="#008000">// Native Memory for the CRYPT_KEY_PROV_INFO structure</font>
                <font color="#0000ff">int    </font><font color="#000000">cbBytes </font><font color="#800080">= </font><font color="#000000">0;           </font><font color="#008000">// Native Memory size</font>
                <font color="#0000ff">try</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">if </font><font color="#800080">( </font><font color="#000000">CryptGetProvParam</font><font color="#800080">(</font><font color="#000000">hProvider, CryptGetProvParamType</font><font color="#800080">.</font><font color="#000000">PP_UNIQUE_CONTAINER, </font><font color="#800000">IntPtr</font><font color="#800080">.Zero</font><font color="#000000">, </font><font color="#0000ff">ref </font><font color="#000000">cbBytes, 0</font><font color="#800080">) )</font>
                    <font color="#800080">{</font>
                        <font color="#000000">pBytes </font><font color="#800080">= </font><font color="#ff0000">Marshal</font><font color="#800080">.</font><font color="#ff0000">AllocHGlobal</font><font color="#800080">(</font><font color="#000000">cbBytes</font><font color="#800080">)</font><font color="#000000">;</font>
                        <font color="#0000ff">if </font><font color="#800080">( </font><font color="#000000">CryptGetProvParam</font><font color="#800080">(</font><font color="#000000">hProvider, CryptGetProvParamType</font><font color="#800080">.</font><font color="#000000">PP_UNIQUE_CONTAINER, pBytes, </font><font color="#0000ff">ref </font><font color="#000000">cbBytes, 0</font><font color="#800080">) )</font>
                        <font color="#800080">{</font>
                            <font color="#000000">keyFileBytes </font><font color="#800080">= new </font><font color="#0000ff">byte</font><font color="#800080">[</font><font color="#000000">cbBytes</font><font color="#800080">]</font><font color="#000000">;</font>
                            <font color="#ff0000">Marshal</font><font color="#800080">.</font><font color="#ff0000">Copy</font><font color="#800080">(</font><font color="#000000">pBytes,keyFileBytes,0,cbBytes</font><font color="#800080">)</font><font color="#000000">;</font>
                            <font color="#008000">// Copy eveything except tailing null byte</font>
                            <font color="#000000">keyFileName </font><font color="#800080">= </font><font color="#008080">System</font><font color="#800080">.</font><font color="#008080">Text</font><font color="#800080">.</font><font color="#008080">Encoding</font><font color="#800080">.</font><font color="#008080">ASCII</font><font color="#800080">.</font><font color="#ff0000">GetString</font><font color="#800080">(</font><font color="#000000">keyFileBytes, 0, keyFileBytes</font><font color="#800080">.</font><font color="#008080">Length</font><font color="#800080">-</font><font color="#000000">1</font><font color="#800080">)</font><font color="#000000">;</font>
                        <font color="#800080">}</font>
                    <font color="#800080">}        </font>
                <font color="#800080">}</font>
                <font color="#0000ff">finally</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">if </font><font color="#800080">( </font><font color="#000000">freeProvider </font><font color="#800080">)</font>
                        <font color="#000000">CryptReleaseContext</font><font color="#800080">(</font><font color="#000000">hProvider,0</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#008000">//</font>
                    <font color="#008000">// Free our native memory</font>
                    <font color="#008000">//</font>
                    <font color="#0000ff">if </font><font color="#800080">( </font><font color="#000000">pBytes </font><font color="#800080">!= </font><font color="#800000">IntPtr</font><font color="#800080">.Zero )</font>
                        <font color="#ff0000">Marshal</font><font color="#800080">.</font><font color="#ff0000">FreeHGlobal</font><font color="#800080">(</font><font color="#000000">pBytes</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
            <font color="#800080">}</font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">keyFileName </font><font color="#800080">== null)</font>
                <font color="#0000ff">throw </font><font color="#800080">new </font><font color="#800000">InvalidOperationException</font><font color="#800080">(</font><font color="#ff00ff">&quot;Unable to obtain private key file name&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">return </font><font color="#000000">keyFileName;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">static string </font><font color="#000000">GetKeyFileDirectory</font><font color="#800080">(</font><font color="#0000ff">string </font><font color="#000000">keyFileName</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#008000">// Look up All User profile from environment variable</font>
            <font color="#0000ff">string </font><font color="#000000">allUserProfile </font><font color="#800080">= </font><font color="#008080">System</font><font color="#800080">.</font><font color="#800000">Environment</font><font color="#800080">.</font><font color="#ff0000">GetFolderPath</font><font color="#800080">(</font><font color="#800000">Environment</font><font color="#800080">.</font><font color="#000000">SpecialFolder</font><font color="#800080">.</font><font color="#000000">CommonApplicationData</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#008000">// set up searching directory</font>
            <font color="#0000ff">string </font><font color="#000000">machineKeyDir </font><font color="#800080">= </font><font color="#000000">allUserProfile </font><font color="#800080">+ </font><font color="#ff00ff">&quot;\\Microsoft\\Crypto\\RSA\\MachineKeys&quot;</font><font color="#000000">;</font>
            <font color="#008000">// Seach the key file</font>
            <font color="#0000ff">string</font><font color="#800080">[] </font><font color="#000000">fs </font><font color="#800080">= </font><font color="#008080">System</font><font color="#800080">.IO.</font><font color="#008080">Directory</font><font color="#800080">.</font><font color="#ff0000">GetFiles</font><font color="#800080">(</font><font color="#000000">machineKeyDir, keyFileName</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#008000">// If found</font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">fs</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">&gt; </font><font color="#000000">0</font><font color="#800080">)</font>
                <font color="#0000ff">return </font><font color="#000000">machineKeyDir;</font>
            <font color="#008000">// Next try current user profile</font>
            <font color="#0000ff">string </font><font color="#000000">currentUserProfile </font><font color="#800080">= </font><font color="#008080">System</font><font color="#800080">.</font><font color="#800000">Environment</font><font color="#800080">.</font><font color="#ff0000">GetFolderPath</font><font color="#800080">(</font><font color="#800000">Environment</font><font color="#800080">.</font><font color="#000000">SpecialFolder</font><font color="#800080">.</font><font color="#000000">ApplicationData</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#008000">// seach all sub directory</font>
            <font color="#0000ff">string </font><font color="#000000">userKeyDir </font><font color="#800080">= </font><font color="#000000">currentUserProfile </font><font color="#800080">+ </font><font color="#ff00ff">&quot;\\Microsoft\\Crypto\\RSA\\&quot;</font><font color="#000000">;</font>
            <font color="#000000">fs </font><font color="#800080">= </font><font color="#008080">System</font><font color="#800080">.IO.</font><font color="#008080">Directory</font><font color="#800080">.</font><font color="#ff0000">GetDirectories</font><font color="#800080">(</font><font color="#000000">userKeyDir</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">fs</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">&gt; </font><font color="#000000">0</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#008000">// for each sub directory</font>
                <font color="#0000ff">foreach </font><font color="#800080">(</font><font color="#0000ff">string </font><font color="#000000">keyDir </font><font color="#0000ff">in </font><font color="#000000">fs</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#000000">fs </font><font color="#800080">= </font><font color="#008080">System</font><font color="#800080">.IO.</font><font color="#008080">Directory</font><font color="#800080">.</font><font color="#ff0000">GetFiles</font><font color="#800080">(</font><font color="#000000">keyDir, keyFileName</font><font color="#800080">)</font><font color="#000000">;</font>
                    <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">fs</font><font color="#800080">.</font><font color="#008080">Length </font><font color="#800080">== </font><font color="#000000">0</font><font color="#800080">)</font>
                        <font color="#0000ff">continue</font><font color="#000000">;</font>
                    <font color="#0000ff">else</font>
                        <font color="#008000">// found</font>
                        <font color="#0000ff">return </font><font color="#000000">keyDir;</font>
                <font color="#800080">}</font>
            <font color="#800080">}</font>
            <font color="#0000ff">throw </font><font color="#800080">new </font><font color="#800000">InvalidOperationException</font><font color="#800080">(</font><font color="#ff00ff">&quot;Unable to locate private key file directory&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#800080">[</font><font color="#000000">DllImport</font><font color="#800080">(</font><font color="#ff00ff">&quot;crypt32&quot;</font><font color="#000000">, </font><font color="#008080">CharSet </font><font color="#800080">= </font><font color="#008080">CharSet</font><font color="#800080">.</font><font color="#008080">Unicode</font><font color="#000000">, SetLastError </font><font color="#800080">= </font><font color="#0000ff">true</font><font color="#800080">)]</font>
        <font color="#0000ff">internal extern static bool </font><font color="#000000">CryptAcquireCertificatePrivateKey</font><font color="#800080">(</font><font color="#800000">IntPtr </font><font color="#000000">pCert, </font><font color="#0000ff">uint </font><font color="#000000">dwFlags, </font><font color="#800000">IntPtr </font><font color="#000000">pvReserved, </font><font color="#0000ff">ref </font><font color="#800000">IntPtr </font><font color="#000000">phCryptProv, </font><font color="#0000ff">ref int </font><font color="#000000">pdwKeySpec, </font><font color="#0000ff">ref bool </font><font color="#000000">pfCallerFreeProv</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">[</font><font color="#000000">DllImport</font><font color="#800080">(</font><font color="#ff00ff">&quot;advapi32&quot;</font><font color="#000000">, </font><font color="#008080">CharSet </font><font color="#800080">= </font><font color="#008080">CharSet</font><font color="#800080">.</font><font color="#008080">Unicode</font><font color="#000000">, SetLastError </font><font color="#800080">= </font><font color="#0000ff">true</font><font color="#800080">)]</font>
        <font color="#0000ff">internal extern static bool </font><font color="#000000">CryptGetProvParam</font><font color="#800080">(</font><font color="#800000">IntPtr </font><font color="#000000">hCryptProv, CryptGetProvParamType dwParam, </font><font color="#800000">IntPtr </font><font color="#000000">pvData, </font><font color="#0000ff">ref int </font><font color="#000000">pcbData, </font><font color="#0000ff">uint </font><font color="#000000">dwFlags</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">[</font><font color="#000000">DllImport</font><font color="#800080">(</font><font color="#ff00ff">&quot;advapi32&quot;</font><font color="#000000">, SetLastError </font><font color="#800080">= </font><font color="#0000ff">true</font><font color="#800080">)]</font>
        <font color="#0000ff">internal extern static bool </font><font color="#000000">CryptReleaseContext</font><font color="#800080">(</font><font color="#800000">IntPtr </font><font color="#000000">hProv, </font><font color="#0000ff">uint </font><font color="#000000">dwFlags</font><font color="#800080">)</font><font color="#000000">;</font>
    <font color="#800080">}</font>
    <font color="#0000ff">enum </font><font color="#000000">CryptGetProvParamType</font>
    <font color="#800080">{</font>
        <font color="#000000">PP_ENUMALGS </font><font color="#800080">= </font><font color="#000000">1,</font>
        <font color="#000000">PP_ENUMCONTAINERS </font><font color="#800080">= </font><font color="#000000">2,</font>
        <font color="#000000">PP_IMPTYPE </font><font color="#800080">= </font><font color="#000000">3,</font>
        <font color="#000000">PP_NAME </font><font color="#800080">= </font><font color="#000000">4,</font>
        <font color="#000000">PP_VERSION </font><font color="#800080">= </font><font color="#000000">5,</font>
        <font color="#000000">PP_CONTAINER </font><font color="#800080">= </font><font color="#000000">6,</font>
        <font color="#000000">PP_CHANGE_PASSWORD </font><font color="#800080">= </font><font color="#000000">7,</font>
        <font color="#000000">PP_KEYSET_SEC_DESCR </font><font color="#800080">= </font><font color="#000000">8,       </font><font color="#008000">// get/set security descriptor of keyset</font>
        <font color="#000000">PP_CERTCHAIN </font><font color="#800080">= </font><font color="#000000">9,      </font><font color="#008000">// for retrieving certificates from tokens</font>
        <font color="#000000">PP_KEY_TYPE_SUBTYPE </font><font color="#800080">= </font><font color="#000000">10,</font>
        <font color="#000000">PP_PROVTYPE </font><font color="#800080">= </font><font color="#000000">16,</font>
        <font color="#000000">PP_KEYSTORAGE </font><font color="#800080">= </font><font color="#000000">17,</font>
        <font color="#000000">PP_APPLI_CERT </font><font color="#800080">= </font><font color="#000000">18,</font>
        <font color="#000000">PP_SYM_KEYSIZE </font><font color="#800080">= </font><font color="#000000">19,</font>
        <font color="#000000">PP_SESSION_KEYSIZE </font><font color="#800080">= </font><font color="#000000">20,</font>
        <font color="#000000">PP_UI_PROMPT </font><font color="#800080">= </font><font color="#000000">21,</font>
        <font color="#000000">PP_ENUMALGS_EX </font><font color="#800080">= </font><font color="#000000">22,</font>
        <font color="#000000">PP_ENUMMANDROOTS </font><font color="#800080">= </font><font color="#000000">25,</font>
        <font color="#000000">PP_ENUMELECTROOTS </font><font color="#800080">= </font><font color="#000000">26,</font>
        <font color="#000000">PP_KEYSET_TYPE </font><font color="#800080">= </font><font color="#000000">27,</font>
        <font color="#000000">PP_ADMIN_PIN </font><font color="#800080">= </font><font color="#000000">31,</font>
        <font color="#000000">PP_KEYEXCHANGE_PIN </font><font color="#800080">= </font><font color="#000000">32,</font>
        <font color="#000000">PP_SIGNATURE_PIN </font><font color="#800080">= </font><font color="#000000">33,</font>
        <font color="#000000">PP_SIG_KEYSIZE_INC </font><font color="#800080">= </font><font color="#000000">34,</font>
        <font color="#000000">PP_KEYX_KEYSIZE_INC </font><font color="#800080">= </font><font color="#000000">35,</font>
        <font color="#000000">PP_UNIQUE_CONTAINER </font><font color="#800080">= </font><font color="#000000">36,</font>
        <font color="#000000">PP_SGC_INFO </font><font color="#800080">= </font><font color="#000000">37,</font>
        <font color="#000000">PP_USE_HARDWARE_RNG </font><font color="#800080">= </font><font color="#000000">38,</font>
        <font color="#000000">PP_KEYSPEC </font><font color="#800080">= </font><font color="#000000">39,</font>
        <font color="#000000">PP_ENUMEX_SIGNING_PROT </font><font color="#800080">= </font><font color="#000000">40,</font>
        <font color="#000000">PP_CRYPT_COUNT_KEY_USE </font><font color="#800080">= </font><font color="#000000">41,</font>
    <font color="#800080">}</font>
<font color="#800080">}</font>
</font>
</pre><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1460665.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>CryptoHelper X509/RSA/TripleDes/Hash/MD5/SHA1 (Release 2)</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/05/19/1460641.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Tue, 19 May 2009 14:59:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/05/19/1460641.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1460641.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/05/19/1460641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1460641.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1460641.html</trackback:ping><description><![CDATA[摘要: /*makecert.exe -n &quot;CN=Microshaoft X509 Test - A&quot; -sky exchange -pe -sv a.pvk a.cerpvk2pfx.exe -pvk a.pvk -spc a.cer -pfx a.pfx -f -po 123makecert.exe -n &quot;CN=Microshaoft X509 Test - B&qu&nbsp;&nbsp;<a href='http://www.cnblogs.com/Microshaoft/archive/2009/05/19/1460641.html'>阅读全文</a><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1460641.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Smtp Client LinkedResource AlternateView</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/05/11/1454532.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Mon, 11 May 2009 15:24:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/05/11/1454532.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1454532.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/05/11/1454532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1454532.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1454532.html</trackback:ping><description><![CDATA[<pre>
<font face="Fixedsys">
<font color="#0000ff">namespace </font><font color="#800080">ConsoleApplication</font>
<font color="#800080">{</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Net</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Net.Mail</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Net.Mime</font><font color="#000000">;</font>
    <font color="#0000ff">public class </font><font color="#000000">Class1</font>
    <font color="#800080">{</font>
        <font color="#0000ff">static void </font><font color="#ff0000">Main</font><font color="#800080">(</font><font color="#0000ff">string</font><font color="#800080">[] </font><font color="#000000">args</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#0000ff">string </font><font color="#000000">html </font><font color="#800080">= </font><font color="#ff00ff">&quot;&lt;html&gt;&lt;body&gt;&lt;a href=\&quot;http://www.live.com\&quot;&gt;&lt;img src=\&quot;cid:attachment1\&quot;&gt;&lt;/a&gt;&quot;</font><font color="#000000">;</font>
            <font color="#000000">html </font><font color="#800080">+= </font><font color="#ff00ff">&quot;&lt;script src=\&quot;cid:attachment2\&quot;&gt;&lt;/script&gt;中国字&quot;</font><font color="#000000">;</font>
            <font color="#000000">html </font><font color="#800080">+= </font><font color="#ff00ff">&quot;&lt;a href=\&quot;http://www.google.com\&quot;&gt;&lt;br&gt;&lt;img src=\&quot;cid:attachment1\&quot;&gt;&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;&quot;</font><font color="#000000">;</font>
            <font color="#800000">AlternateView </font><font color="#000000">view </font><font color="#800080">= </font><font color="#800000">AlternateView</font><font color="#800080">.</font><font color="#ff0000">CreateAlternateViewFromString</font><font color="#800080">(</font><font color="#000000">html, </font><font color="#800080">null</font><font color="#000000">, </font><font color="#800000">MediaTypeNames</font><font color="#800080">.</font><font color="#008080">Text</font><font color="#800080">.Html)</font><font color="#000000">;</font>
            <font color="#800000">LinkedResource </font><font color="#000000">picture </font><font color="#800080">= new </font><font color="#800000">LinkedResource</font><font color="#800080">(</font><font color="#000000">@</font><font color="#ff00ff">&quot;pic.JPG&quot;</font><font color="#000000">, </font><font color="#800000">MediaTypeNames</font><font color="#800080">.</font><font color="#008080">Image</font><font color="#800080">.</font><font color="#008080">Jpeg</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">picture</font><font color="#800080">.</font><font color="#008080">ContentId </font><font color="#800080">= </font><font color="#ff00ff">&quot;attachment1&quot;</font><font color="#000000">;</font>
            <font color="#000000">view</font><font color="#800080">.</font><font color="#008080">LinkedResources</font><font color="#800080">.</font><font color="#ff0000">Add</font><font color="#800080">(</font><font color="#000000">picture</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">LinkedResource </font><font color="#000000">script </font><font color="#800080">= new </font><font color="#800000">LinkedResource</font><font color="#800080">(</font><font color="#000000">@</font><font color="#ff00ff">&quot;a.js&quot;</font><font color="#000000">, </font><font color="#800000">MediaTypeNames</font><font color="#800080">.</font><font color="#008080">Text</font><font color="#800080">.</font><font color="#000000">Plain</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">script</font><font color="#800080">.</font><font color="#008080">ContentId </font><font color="#800080">= </font><font color="#ff00ff">&quot;attachment2&quot;</font><font color="#000000">;</font>
            <font color="#000000">view</font><font color="#800080">.</font><font color="#008080">LinkedResources</font><font color="#800080">.</font><font color="#ff0000">Add</font><font color="#800080">(</font><font color="#000000">script</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">MailMessage </font><font color="#000000">mail </font><font color="#800080">= new </font><font color="#800000">MailMessage</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#000000">mail </font><font color="#800080">.</font><font color="#008080">AlternateViews</font><font color="#800080">.</font><font color="#ff0000">Add</font><font color="#800080">(</font><font color="#000000">view</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">mail</font><font color="#800080">.</font><font color="#008080">From </font><font color="#800080">= new </font><font color="#800000">MailAddress</font><font color="#800080">(</font><font color="#ff00ff">&quot;xxxx@gmail.com&quot;</font><font color="#000000">, </font><font color="#ff00ff">&quot;Microshaoft-gmail&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">mail</font><font color="#800080">.</font><font color="#008080">To</font><font color="#800080">.</font><font color="#ff0000">Add</font><font color="#800080">(new </font><font color="#800000">MailAddress</font><font color="#800080">(</font><font color="#ff00ff">&quot;yyyy@live.com&quot;</font><font color="#000000">, </font><font color="#ff00ff">&quot;Microshaoft-live&quot;</font><font color="#800080">))</font><font color="#000000">;</font>
            <font color="#000000">mail</font><font color="#800080">.</font><font color="#008080">Subject </font><font color="#800080">= </font><font color="#ff00ff">&quot;Linked Resource Attachment Alternate Views Smtp Client Test &quot; </font><font color="#800080">+ </font><font color="#008080">DateTime</font><font color="#800080">.</font><font color="#008080">Now</font><font color="#800080">.</font><font color="#ff0000">ToString</font><font color="#800080">(</font><font color="#ff00ff">&quot;yyyy-MM-dd HH:mm:ss&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">SmtpClient </font><font color="#000000">client </font><font color="#800080">= new </font><font color="#800000">SmtpClient</font><font color="#800080">(</font><font color="#ff00ff">&quot;smtp.gmail.com&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">client</font><font color="#800080">.</font><font color="#008080">Credentials </font><font color="#800080">= new </font><font color="#800000">NetworkCredential</font><font color="#800080">(</font><font color="#ff00ff">&quot;user&quot;</font><font color="#000000">,</font><font color="#ff00ff">&quot;password&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">client</font><font color="#800080">.</font><font color="#008080">EnableSsl </font><font color="#800080">= </font><font color="#0000ff">true</font><font color="#000000">;</font>
            <font color="#000000">client</font><font color="#800080">.</font><font color="#ff0000">Send</font><font color="#800080">(</font><font color="#000000">mail</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#ff00ff">&quot;Hello World&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">Console</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#800000">Environment</font><font color="#800080">.</font><font color="#008080">Version</font><font color="#800080">.</font><font color="#ff0000">ToString</font><font color="#800080">())</font><font color="#000000">;</font>
        <font color="#800080">}</font>
    <font color="#800080">}</font>
<font color="#800080">}</font>
</font>
</pre> <img src ="http://www.cnblogs.com/Microshaoft/aggbug/1454532.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48000/" target="_blank">数万名网友签名抗议星际争霸2取消局域网功能</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Trace Soap Messages Logger SoapExtension</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/05/11/1454031.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Mon, 11 May 2009 03:55:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/05/11/1454031.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1454031.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/05/11/1454031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1454031.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1454031.html</trackback:ping><description><![CDATA[<pre>
<font face="Fixedsys">
<font color="#0000ff">namespace </font><font color="#000000">Microshaoft</font>
<font color="#800080">{</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.IO</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.Web.</font><font color="#008080">Services</font><font color="#800080">.</font><font color="#008080">Protocols</font><font color="#000000">;</font>
    <font color="#0000ff">using </font><font color="#008080">System</font><font color="#800080">.</font><font color="#008080">Configuration</font><font color="#000000">;</font>
    <font color="#0000ff">public class </font><font color="#000000">TraceSoapMessagesLoggerSoapExtension </font><font color="#800080">: </font><font color="#800000">SoapExtension</font>
    <font color="#800080">{</font>
        <font color="#0000ff">private </font><font color="#008080">Stream </font><font color="#000000">_originalStream;</font>
        <font color="#0000ff">private </font><font color="#008080">Stream </font><font color="#000000">_workStream;</font>
        <font color="#0000ff">private string </font><font color="#000000">_filePath;</font>
        <font color="#0000ff">public override </font><font color="#008080">Stream </font><font color="#ff0000">ChainStream</font><font color="#800080">(</font><font color="#008080">Stream </font><font color="#000000">stream</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#000000">_originalStream </font><font color="#800080">= </font><font color="#000000">stream;</font>
            <font color="#000000">_workStream </font><font color="#800080">= new </font><font color="#800000">MemoryStream</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#0000ff">return </font><font color="#000000">_workStream;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public override object </font><font color="#ff0000">GetInitializer</font><font color="#800080">(</font><font color="#800000">LogicalMethodInfo </font><font color="#000000">methodInfo, </font><font color="#800000">SoapExtensionAttribute </font><font color="#000000">attribute</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#008000">//return ((TraceExtensionAttribute)attribute).Filename;</font>
            <font color="#0000ff">return </font><font color="#800080">null</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">private static string </font><font color="#000000">_SoapMessagesLogPath </font><font color="#800080">= </font><font color="#800000">ConfigurationManager</font><font color="#800080">.</font><font color="#008080">AppSettings</font><font color="#800080">[</font><font color="#ff00ff">&quot;SoapMessagesLogPath&quot;</font><font color="#800080">]</font><font color="#000000">;</font>
        <font color="#0000ff">public override object </font><font color="#ff0000">GetInitializer</font><font color="#800080">(</font><font color="#008080">Type </font><font color="#000000">WebServiceType</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#008000">// Return a file name to log the trace information to, based on the</font>
            <font color="#008000">// type.</font>
            <font color="#0000ff">if </font><font color="#800080">(!</font><font color="#000000">_SoapMessagesLogPath</font><font color="#800080">.</font><font color="#ff0000">EndsWith</font><font color="#800080">(</font><font color="#000000">@</font><font color="#ff00ff">&quot;\&quot;))</font>
            <font color="#800080">{</font>
                <font color="#000000">_SoapMessagesLogPath </font><font color="#800080">+= </font><font color="#000000">@</font><font color="#ff00ff">&quot;\&quot;;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">return </font><font color="#000000">_SoapMessagesLogPath </font><font color="#800080">+ </font><font color="#000000">WebServiceType</font><font color="#800080">.</font><font color="#008080">FullName </font><font color="#800080">+ </font><font color="#ff00ff">&quot;.{0}.{1}.log&quot;</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#008000">// Receive the file name stored by GetInitializer and store it in a</font>
        <font color="#008000">// member variable for this specific instance.</font>
        <font color="#0000ff">public override void </font><font color="#ff0000">Initialize</font><font color="#800080">(</font><font color="#0000ff">object </font><font color="#000000">initializer</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#000000">_filePath </font><font color="#800080">= (</font><font color="#0000ff">string</font><font color="#800080">) </font><font color="#000000">initializer;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public override void </font><font color="#ff0000">ProcessMessage</font><font color="#800080">(</font><font color="#800000">SoapMessage </font><font color="#000000">message</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#0000ff">switch </font><font color="#800080">(</font><font color="#000000">message</font><font color="#800080">.</font><font color="#008080">Stage</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#0000ff">case </font><font color="#800080">SoapMessageStage.BeforeSerialize:</font>
                    <font color="#0000ff">break</font><font color="#000000">;</font>
                <font color="#0000ff">case </font><font color="#800080">SoapMessageStage.AfterSerialize:</font>
                    <font color="#000000">WriteStream</font><font color="#800080">()</font><font color="#000000">;</font>
                    <font color="#0000ff">break</font><font color="#000000">;</font>
                <font color="#0000ff">case </font><font color="#800080">SoapMessageStage.BeforeDeserialize:</font>
                    <font color="#000000">ReadStream</font><font color="#800080">()</font><font color="#000000">;</font>
                    <font color="#0000ff">break</font><font color="#000000">;</font>
                <font color="#0000ff">case </font><font color="#800080">SoapMessageStage.AfterDeserialize:</font>
                    <font color="#0000ff">break</font><font color="#000000">;</font>
                <font color="#0000ff">default</font><font color="#800080">:</font>
                    <font color="#0000ff">throw </font><font color="#800080">new </font><font color="#008080">Exception</font><font color="#800080">(</font><font color="#ff00ff">&quot;invalid stage&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800080">}</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public void </font><font color="#000000">WriteStream</font><font color="#800080">()</font>
        <font color="#800080">{</font>
            <font color="#000000">_workStream</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">buffer </font><font color="#800080">= </font><font color="#000000">ReadStreamToBytes</font><font color="#800080">(</font><font color="#000000">_workStream</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">TextReader </font><font color="#000000">reader </font><font color="#800080">= new </font><font color="#800000">StreamReader</font><font color="#800080">(</font><font color="#000000">_workStream</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">string </font><font color="#000000">s </font><font color="#800080">= </font><font color="#000000">reader</font><font color="#800080">.</font><font color="#ff0000">ReadToEnd</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#000000">WriteLog</font><font color="#800080">(</font><font color="#000000">s, </font><font color="#ff00ff">&quot;response&quot;</font><font color="#000000">, _filePath</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">_originalStream</font><font color="#800080">.</font><font color="#ff0000">Write</font><font color="#800080">(</font><font color="#000000">buffer, 0, buffer</font><font color="#800080">.</font><font color="#008080">Length</font><font color="#800080">)</font><font color="#000000">;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public void </font><font color="#000000">ReadStream</font><font color="#800080">()</font>
        <font color="#800080">{</font>
            <font color="#008000">//解压 请求</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">bytes </font><font color="#800080">= </font><font color="#000000">ReadStreamToBytes</font><font color="#800080">(</font><font color="#000000">_originalStream</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800000">TextReader </font><font color="#000000">reader </font><font color="#800080">= new </font><font color="#800000">StreamReader</font><font color="#800080">(</font><font color="#000000">_originalStream</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">string </font><font color="#000000">s </font><font color="#800080">= </font><font color="#000000">reader</font><font color="#800080">.</font><font color="#ff0000">ReadToEnd</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#000000">WriteLog</font><font color="#800080">(</font><font color="#000000">s, </font><font color="#ff00ff">&quot;request&quot;</font><font color="#000000">, _filePath</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">_workStream</font><font color="#800080">.</font><font color="#ff0000">Write</font><font color="#800080">(</font><font color="#000000">bytes, 0, bytes</font><font color="#800080">.</font><font color="#008080">Length</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">_workStream</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">0;</font>
        <font color="#800080">}</font>
        <font color="#0000ff">private static void </font><font color="#000000">WriteLog</font><font color="#800080">(</font><font color="#0000ff">string </font><font color="#000000">data, </font><font color="#0000ff">string </font><font color="#000000">title, </font><font color="#0000ff">string </font><font color="#000000">filePath</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#0000ff">string </font><font color="#000000">path </font><font color="#800080">= </font><font color="#008080">Path</font><font color="#800080">.</font><font color="#ff0000">GetDirectoryName</font><font color="#800080">(</font><font color="#000000">filePath</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#0000ff">if </font><font color="#800080">(!</font><font color="#008080">Directory</font><font color="#800080">.</font><font color="#ff0000">Exists</font><font color="#800080">(</font><font color="#000000">path</font><font color="#800080">))</font>
            <font color="#800080">{</font>
                <font color="#008080">Directory</font><font color="#800080">.</font><font color="#ff0000">CreateDirectory</font><font color="#800080">(</font><font color="#000000">path</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">string </font><font color="#000000">fileName </font><font color="#800080">= </font><font color="#0000ff">string</font><font color="#800080">.</font><font color="#ff0000">Format</font><font color="#800080">(</font><font color="#000000">filePath, title, </font><font color="#008080">DateTime</font><font color="#800080">.</font><font color="#008080">Now</font><font color="#800080">.</font><font color="#ff0000">ToString</font><font color="#800080">(</font><font color="#ff00ff">&quot;yyyy-MM-dd.HH&quot;</font><font color="#800080">))</font><font color="#000000">;</font>
            <font color="#0000ff">using </font><font color="#800080">(</font><font color="#800000">FileStream </font><font color="#000000">fs </font><font color="#800080">= new </font><font color="#800000">FileStream</font>
                                        <font color="#800080">(</font>
                                            <font color="#000000">fileName</font>
                                            <font color="#000000">, </font><font color="#800080">FileMode.OpenOrCreate</font><font color="#000000">, </font><font color="#800080">FileAccess.ReadWrite</font><font color="#000000">, </font><font color="#800080">FileShare.ReadWrite</font>
                                         <font color="#800080">)</font>
                    <font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#800000">StreamWriter </font><font color="#000000">w </font><font color="#800080">= new </font><font color="#800000">StreamWriter</font><font color="#800080">(</font><font color="#000000">fs</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#000000">w</font><font color="#800080">.</font><font color="#008080">BaseStream</font><font color="#800080">.</font><font color="#ff0000">Seek</font><font color="#800080">(</font><font color="#000000">0, </font><font color="#800080">SeekOrigin.</font><font color="#ff0000">End</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#000000">w</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">title </font><font color="#800080">+ </font><font color="#ff00ff">&quot;Begin===========&quot; </font><font color="#800080">+ </font><font color="#008080">DateTime</font><font color="#800080">.</font><font color="#008080">Now</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#000000">w</font><font color="#800080">.</font><font color="#ff0000">Flush</font><font color="#800080">()</font><font color="#000000">;</font>
                <font color="#000000">w</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">data</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#000000">w</font><font color="#800080">.</font><font color="#ff0000">WriteLine</font><font color="#800080">(</font><font color="#000000">title </font><font color="#800080">+ </font><font color="#ff00ff">&quot;End=============&quot;</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#000000">w</font><font color="#800080">.</font><font color="#ff0000">Flush</font><font color="#800080">()</font><font color="#000000">;</font>
                <font color="#000000">w</font><font color="#800080">.</font><font color="#ff0000">Close</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#800080">}</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public static byte</font><font color="#800080">[] </font><font color="#000000">ReadStreamToBytes</font><font color="#800080">(</font><font color="#008080">Stream </font><font color="#000000">stream</font><font color="#800080">)</font>
        <font color="#800080">{</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">buffer </font><font color="#800080">= new </font><font color="#0000ff">byte</font><font color="#800080">[</font><font color="#000000">64 </font><font color="#800080">* </font><font color="#000000">1024</font><font color="#800080">]</font><font color="#000000">;</font>
            <font color="#0000ff">int </font><font color="#000000">r </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#0000ff">int </font><font color="#000000">l </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#0000ff">long </font><font color="#000000">position </font><font color="#800080">= -</font><font color="#000000">1;</font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">CanSeek</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#000000">position </font><font color="#800080">= </font><font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">Position</font><font color="#000000">;</font>
                <font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#800080">}</font>
            <font color="#800000">MemoryStream </font><font color="#000000">ms </font><font color="#800080">= new </font><font color="#800000">MemoryStream</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#0000ff">while </font><font color="#800080">(</font><font color="#0000ff">true</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#000000">r </font><font color="#800080">= </font><font color="#000000">stream</font><font color="#800080">.</font><font color="#ff0000">Read</font><font color="#800080">(</font><font color="#000000">buffer, 0, buffer</font><font color="#800080">.</font><font color="#008080">Length</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">r </font><font color="#800080">&gt; </font><font color="#000000">0</font><font color="#800080">)</font>
                <font color="#800080">{</font>
                    <font color="#000000">l </font><font color="#800080">+= </font><font color="#000000">r;</font>
                    <font color="#000000">ms</font><font color="#800080">.</font><font color="#ff0000">Write</font><font color="#800080">(</font><font color="#000000">buffer, 0, r</font><font color="#800080">)</font><font color="#000000">;</font>
                <font color="#800080">}</font>
                <font color="#0000ff">else</font>
                <font color="#800080">{</font>
                    <font color="#0000ff">break</font><font color="#000000">;</font>
                <font color="#800080">}</font>
            <font color="#800080">}</font>
            <font color="#0000ff">byte</font><font color="#800080">[] </font><font color="#000000">bytes </font><font color="#800080">= new </font><font color="#0000ff">byte</font><font color="#800080">[</font><font color="#000000">l</font><font color="#800080">]</font><font color="#000000">;</font>
            <font color="#000000">ms</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">0;</font>
            <font color="#000000">ms</font><font color="#800080">.</font><font color="#ff0000">Read</font><font color="#800080">(</font><font color="#000000">bytes, 0, </font><font color="#800080">(</font><font color="#0000ff">int</font><font color="#800080">) </font><font color="#000000">l</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#000000">ms</font><font color="#800080">.</font><font color="#ff0000">Close</font><font color="#800080">()</font><font color="#000000">;</font>
            <font color="#000000">ms </font><font color="#800080">= null</font><font color="#000000">;</font>
            <font color="#0000ff">if </font><font color="#800080">(</font><font color="#000000">position </font><font color="#800080">&gt;= </font><font color="#000000">0</font><font color="#800080">)</font>
            <font color="#800080">{</font>
                <font color="#000000">stream</font><font color="#800080">.</font><font color="#008080">Position </font><font color="#800080">= </font><font color="#000000">position;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">return </font><font color="#000000">bytes;</font>
        <font color="#800080">}</font>
    <font color="#800080">}</font>
    <font color="#800080">[</font><font color="#000000">AttributeUsage</font><font color="#800080">(AttributeTargets.</font><font color="#008080">Method</font><font color="#800080">)]</font>
    <font color="#0000ff">public class </font><font color="#000000">TraceSoapMessagesLoggerSoapExtensionAttribute </font><font color="#800080">: </font><font color="#800000">SoapExtensionAttribute</font>
    <font color="#800080">{</font>
        <font color="#0000ff">private int </font><font color="#000000">_priority;</font>
        <font color="#0000ff">public override int </font><font color="#008080">Priority</font>
        <font color="#800080">{</font>
            <font color="#0000ff">get</font>
            <font color="#800080">{</font>
                <font color="#0000ff">return </font><font color="#000000">_priority;</font>
            <font color="#800080">}</font>
            <font color="#0000ff">set</font>
            <font color="#800080">{</font>
                <font color="#000000">_priority </font><font color="#800080">= value</font><font color="#000000">;</font>
            <font color="#800080">}</font>
        <font color="#800080">}</font>
        <font color="#0000ff">public override </font><font color="#008080">Type ExtensionType</font>
        <font color="#800080">{</font>
            <font color="#0000ff">get</font>
            <font color="#800080">{</font>
                <font color="#0000ff">return </font><font color="#800080">typeof(</font><font color="#000000">TraceSoapMessagesLoggerSoapExtension</font><font color="#800080">)</font><font color="#000000">;</font>
            <font color="#800080">}</font>
        <font color="#800080">}</font>
    <font color="#800080">}</font>
<font color="#800080">}</font>
</font>
</pre><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1454031.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48000/" target="_blank">数万名网友签名抗议星际争霸2取消局域网功能</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>一道 SQL 面试题</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/05/03/1448085.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Sun, 03 May 2009 04:19:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/05/03/1448085.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1448085.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/05/03/1448085.html#Feedback</comments><slash:comments>26</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1448085.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1448085.html</trackback:ping><description><![CDATA[<p>这是我在2002年左右,给公司出的一道SQL面试大题,前10(1~10)问,允许应考者充分准备不必现场作答,<br />
后3(11~13)问要求应考者现场作答。当年被面试的人,对题目褒贬不一。</p>
<p>作为命题者(准确的说其中一些题目应该是我从一些经典的SQL考试题派生出来的),我的初衷还是主要考察<br />
关系运算、集合运算相关的SQL查询语法知识的,能轻松应答的人,我个人认为,应该算是一个颇有"SQL查询"编写经验,<br />
或者说熟练掌握了"SQL DML语法"的开发人员了。<br />
,然而在实际工作中,虽然"一句蔚为壮观的SQL" 实现了 "功能",但是这 "一句SQL" 究竟执行的 "性能" 如何呢?<br />
我想提醒读者,这些题目的答案不一定适用在实际的工作中。</p>
<p>一些参考答案及分析过几天贴出来。</p>
<p>有兴趣的网友可以在线回复作答一下，讨论一下</p>
<p>二维关系表 T(F1,F2,F3,F4,F5,F6,F7) 表示如下关系:<br />
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐<br />
│&nbsp; 学生ID&nbsp; │ 学生姓名 │&nbsp; 课程ID&nbsp; │ 课程名称 │&nbsp;&nbsp; 成绩&nbsp;&nbsp; │&nbsp; 教师ID&nbsp; │ 教师姓名 │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S3&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 王五&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K4&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 政治&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 53&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T4&nbsp;&nbsp;&nbsp; │&nbsp; 赵老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S1&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 张三&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K1&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 数学&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 61&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T1&nbsp;&nbsp;&nbsp; │&nbsp; 张老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S2&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 李四&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K3&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 英语&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 88&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T3&nbsp;&nbsp;&nbsp; │&nbsp; 李老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S1&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 张三&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K4&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 政治&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 77&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T4&nbsp;&nbsp;&nbsp; │&nbsp; 赵老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S2&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 李四&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K4&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 政治&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 67&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T5&nbsp;&nbsp;&nbsp; │&nbsp; 周老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S3&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 王五&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K2&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 语文&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 90&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T2&nbsp;&nbsp;&nbsp; │&nbsp; 王老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S3&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 王五&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K1&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 数学&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 55&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T1&nbsp;&nbsp;&nbsp; │&nbsp; 张老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S1&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 张三&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K2&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 语文&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 81&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T2&nbsp;&nbsp;&nbsp; │&nbsp; 王老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S4&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 赵六&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K2&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 语文&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 59&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T1&nbsp;&nbsp;&nbsp; │&nbsp; 王老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S1&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 张三&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K3&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 英语&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 37&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T3&nbsp;&nbsp;&nbsp; │&nbsp; 李老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp;&nbsp; S2&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 李四&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; K1&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp; 数学&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 81&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; T1&nbsp;&nbsp;&nbsp; │&nbsp; 张老师&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp; ....&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤<br />
│&nbsp;&nbsp; ....&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
└─────┴─────┴─────┴─────┴─────┴─────┴─────┘</p>
<p><br />
请以一句 T-SQL (Ms SQL Server 2000) 或 Jet SQL (Ms Access) 作答!<br />
1.如果 T 表还有一字段 F0 数据类型为自动增量整型(唯一,不会重复),<br />
&nbsp;而且 T 表中含有除 F0 字段外,请删除其它字段完全相同的重复多余的脏记录数据(要保留其中的一条):</p>
<p><br />
2.查询列印各科成绩最高和最低的记录: (就是各门课程的最高、最低分的学生和老师)<br />
&nbsp;课程ID,课程名称,最高分,学生ID,学生姓名,教师ID,教师姓名,最低分,学生ID,学生姓名,教师ID,教师姓名</p>
<p><br />
3.按成绩从高到低顺序,查询列印所有学生四门(数学,语文,英语,政治)课程成绩: (就是每个学生的四门课程的成绩单)<br />
&nbsp;学生ID,学生姓名,数学,语文,英语,政治,有效课程数,有效平均分<br />
&nbsp;(注: 有效课程即在 T 表中有该学生的成绩记录,如不明白可不列印"有效课程数"和"有效平均分")</p>
<p><br />
4.查询列印数学成绩第 10 名到第 15 名的学生成绩单<br />
&nbsp;或列印平均成绩第 10 名到第 15 名的学生成绩单<br />
&nbsp;[学生ID],[学生姓名],数学,语文,英语,政治,平均成绩</p>
<p><br />
5.按各科不及格率的百分数从低到高和平均成绩从高到低顺序,查询统计列印各科平均成绩和不及格率的百分数(用"N行"表示): (就是分析哪门课程难)<br />
&nbsp;课程ID,课程名称,平均成绩,及格百分数</p>
<p><br />
6.查询列印四门课程平均成绩和及格率的百分数(用"1行4列"表示): (就是分析哪门课程难)<br />
&nbsp;数学平均分,数学及格百分数,语文平均分,语文及格百分数,英语平均分,英语及格百分数,政治平均分,政治及格百分数</p>
<p><br />
7.按不同老师所教不同课程平均分从高到低,查询列印: (就是分析哪个老师的哪个课程水平高)<br />
&nbsp;教师ID,教师姓名,课程ID,课程名称,平均分 (平均分按去掉一个最高分和一个最低分后取)</p>
<p><br />
8.查询统计列印各科成绩,各分数段人数:<br />
&nbsp;课程ID,课程名称,[100-85],[85-70],[70-60],[&lt;60]</p>
<p><br />
9.查询列印学生平均成绩及其名次</p>
<p><br />
10.查询列印各科成绩前三名的记录:(不考虑成绩并列情况)<br />
&nbsp;学生ID,学生姓名,课程ID,课程名称,成绩,教师ID,教师姓名</p>
<p><br />
11.查询列印参加了所有考试科目的学生</p>
<p><br />
12.查询列印"至少"与学生"S3 (王五)"参加了相同考试科目的学生</p>
<p><br />
13.规范化</p>
<img src ="http://www.cnblogs.com/Microshaoft/aggbug/1448085.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47999/" target="_blank">Silverlight打造杰克逊纪念专题</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Xml/Binary SerializerHelper and XmlReader read xml node/attribute on foward-only sequential</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/05/01/SerializerHelper.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Thu, 30 Apr 2009 16:24:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/05/01/SerializerHelper.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1447308.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/05/01/SerializerHelper.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1447308.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1447308.html</trackback:ping><description><![CDATA[摘要: namespace Test{ using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; using Test.Share; using Microshaoft; public class Class1 { static void Main(string[]&nbsp;&nbsp;<a href='http://www.cnblogs.com/Microshaoft/archive/2009/05/01/SerializerHelper.html'>阅读全文</a><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1447308.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47998/" target="_blank">传诺基亚正在开发Android手机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Console Win32 API  Native Methods Helper</title><link>http://www.cnblogs.com/Microshaoft/archive/2009/03/28/1423798.html</link><dc:creator>Microshaoft</dc:creator><author>Microshaoft</author><pubDate>Fri, 27 Mar 2009 17:33:00 GMT</pubDate><guid>http://www.cnblogs.com/Microshaoft/archive/2009/03/28/1423798.html</guid><wfw:comment>http://www.cnblogs.com/Microshaoft/comments/1423798.html</wfw:comment><comments>http://www.cnblogs.com/Microshaoft/archive/2009/03/28/1423798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Microshaoft/comments/commentRss/1423798.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Microshaoft/services/trackbacks/1423798.html</trackback:ping><description><![CDATA[摘要: namespace ConsoleApplication{ using System; using Microshaoft; /// &lt;summary&gt; /// Class1 的摘要说明。 /// &lt;/summary&gt; public class Class1 { /// &lt;summary&gt; /// 应用程序的主入口点。 /// &lt;/summary&gt; &nbsp;&nbsp;<a href='http://www.cnblogs.com/Microshaoft/archive/2009/03/28/1423798.html'>阅读全文</a><img src ="http://www.cnblogs.com/Microshaoft/aggbug/1423798.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47996/" target="_blank">7月编程语言排行榜</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>