|
|
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
<head> <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 10"> <meta name=Originator content="Microsoft Word 10"> <link rel=File-List href="uiosample_files/filelist.xml"> <title>Sample NDIS connection-less protocol driver sample</title> <!--[if gte mso 9]><xml>
<w:WordDocument> <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:Compatibility> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--> <style> <!--
/* Font Definitions */ @font-face {font-family:Courier; panose-1:2 7 4 9 2 2 5 2 4 4; mso-font-charset:0; mso-generic-font-family:modern; mso-font-format:other; mso-font-pitch:fixed; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:Verdana; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} @font-face {font-family:"MS Sans Serif"; mso-font-alt:"Times New Roman"; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:auto; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} h2 {mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; mso-outline-level:2; font-size:18.0pt; font-family:"Times New Roman"; mso-fareast-font-family:SimSun; font-weight:bold;} h3 {mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; mso-outline-level:3; font-size:13.5pt; font-family:"Times New Roman"; mso-fareast-font-family:SimSun; font-weight:bold;} h4 {mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; mso-outline-level:4; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:SimSun; font-weight:bold;} p.MsoBodyText, li.MsoBodyText, div.MsoBodyText {margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:Verdana; mso-fareast-font-family:"Times New Roman"; mso-bidi-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:blue; text-decoration:underline; text-underline:single;} p {mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} pre {margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; font-size:10.0pt; font-family:"Courier New"; mso-fareast-font-family:"Courier New";} span.SpellE {mso-style-name:""; mso-spl-e:yes;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:460344179; mso-list-type:hybrid; mso-list-template-ids:1661754128 -1479363788 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.25in;} @list l0:level2 {mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level3 {mso-level-tab-stop:1.5in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level4 {mso-level-tab-stop:2.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level5 {mso-level-tab-stop:2.5in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level6 {mso-level-tab-stop:3.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level7 {mso-level-tab-stop:3.5in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level8 {mso-level-tab-stop:4.0in; mso-level-number-position:left; text-indent:-.25in;} @list l0:level9 {mso-level-tab-stop:4.5in; mso-level-number-position:left; text-indent:-.25in;} ol {margin-bottom:0in;} ul {margin-bottom:0in;} --> </style> <!--[if gte mso 10]>
<style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]--> </head>
<body lang=EN-US link=blue vlink=blue style='tab-interval:.5in'>
<div class=Section1>
<h2><span style='font-family:Verdana'>NDIS connection-less protocol driver sample<o:p></o:p></span></h2>
<h3><span style='font-family:Verdana'>SUMMARY<o:p></o:p></span></h3>
<p><span style='font-size:10.0pt;font-family:Verdana'>This sample demonstrates a connection-less NDIS 5.0/5.1 protocol driver. The driver supports sending and receiving raw Ethernet frames using ReadFile/WriteFile calls from user-mode. As an NDIS protocol, it illustrates how to establish and tear down bindings to Ethernet adapters, i.e. those that export medium type <i>NdisMedium802_3</i>. It shows how to set a packet filter, send and receive data, and handle plug-and-play events. It also shows use of the following NDIS 5.1 features/APIs:<o:p></o:p></span></p>
<p style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .75in'><![if !supportLists]><span style='font-size:10.0pt; font-family:Verdana;mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>Canceling sends<o:p></o:p></span></p>
<p style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .75in'><![if !supportLists]><span style='font-size:10.0pt; font-family:Verdana;mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>NdisQueryPendingIOCount()<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>The sample works on Windows 2000, Windows XP, and Windows Server 2003 32-bit and 64-bit platforms. <o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>BUILDING THE SAMPLE<o:p></o:p></span></h3>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>From the Free or Checked Build environment, execute <b>build -ceZ</b> in the ndisprot directory. <o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>INSTALLATION<o:p></o:p></span></h3>
<p><span style='font-size:10.0pt;font-family:Verdana'>The driver is installed using the INF file ndisprot.inf, which is provided in the driver directory. In Network Connections UI, select an adapter and open <b>Properties</b>.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>Click <b>Install</b>, then <b>Protocol</b>, then <b>Add</b>, and then <b>Have disk</b>. Then point to the location of the .inf and driver.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>Select <b>Sample NDIS Protocol Driver </b>and click <b>OK</b>. After installing the protocol, copy over the test application uiotest.exe to a convenient location. Please note that the driver service has been set to manual start in the INF file. As a result, it doesn't get loaded automatically when you install.<o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>USAGE<o:p></o:p></span></h3>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>To start the driver, type<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><span style='mso-tab-count:1'>��������� </span>Net start ndisprot<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>To stop the driver, type<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><span style='mso-tab-count:1'>��������� </span>Net stop ndisprot<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>To test the driver, run uiotest. For help on usage, run uiotest -?<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<pre style='margin-left:.5in'>usage: UIOTEST [options] <devicename></pre><pre style='margin-left:.5in'>options:</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-e: Enumerate devices</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-r: Read</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-w: Write (default)</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-l <length>: length of each packet (default: 100)</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-n <count>: number of packets (defaults to infinity)</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>������ </span>-m <MAC address> (defaults to local MAC)</pre>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'>Uiotest exercises the IOCTLs supported by NDISPROT, and sends and/or receives data on the selected device. In order to use uiotest, the user must have administrative privilege. Users should pass down a big enough buffer in order to receive the entire received data. If the length of the buffer passed down is smaller than the length of the received data, NDISPROT will only copy part of the data and discard the rest when the given buffer is full.<o:p></o:p></span></p>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'>Use the �e option to enumerate all devices to which NDISPROT is bound:<o:p></o:p></span></p>
<pre style='margin-left:.5in'>C:\uio>uiotest -e</pre><pre style='margin-left: .5in'> 0. \DEVICE\{9273DA7D-5275-4B9A-AC56-68A49D121F1F}</pre><pre style='margin-left:.5in'><span style='mso-spacerun:yes'>���� </span>- Intel-Based 10/100 Ethernet Card</pre>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Verdana'>The following command sends and receives 2 packets on a device</span><span style='font-size:10.0pt;font-family:Verdana'>). Since these packets are sent to the local MAC address (default), both packets are received. </span><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Verdana'> The device name parameter to uiotest is picked up from the output of uiotest �e (see above).<o:p></o:p></span></p>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
<pre style='margin-left:.5in'>C:\uio>uiotest -n 2 \DEVICE\{9273DA7D-5275-4B9A-AC56-68A49D121F1F}</pre><pre style='margin-left:.5in'>DoWriteProc: finished sending 2 packets of 100 bytes each</pre><pre style='margin-left:.5in'>DoReadProc finished: read 2 packets</pre> <p> <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:Verdana'>For security reasons, this driver does not allow packets with fake MAC addresses to be sent from usermode applications.<o:p></o:p></span></p> </P>
<h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-family:Verdana'>TIPS<o:p></o:p></span></h3>
<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'>With a checked version of ndisprot.sys, you can control the volume of debug information generated by changing the variable ndisprotDebugLevel. Refer to debug.h for more information. <o:p></o:p></span></p>
<h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-family:Verdana'>CODE TOUR<o:p></o:p></span></h3>
<h4 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-family:Verdana'>File Manifest<o:p></o:p></span></h4>
<pre><b><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>Directory: Test</span></b><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><br style='mso-special-character:line-break'> <![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'> <![endif]><o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size: 7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><u><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>File</span></u><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><span style='mso-tab-count:2'>������������ </span><u>Description</u><span style='mso-tab-count:1'>����� </span><o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>uiotest.c<span style='mso-tab-count:1'>������� </span>User-mode test application<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><b><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>Directory: Sys</span></b><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><br style='mso-special-character:line-break'> <![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'> <![endif]><o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size: 7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre><pre><u><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>File</span></u><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'><span style='mso-tab-count:2'>������������ </span><u>Description</u><span style='mso-tab-count:1'>����� </span><o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>debug.c<span style='mso-tab-count:2'>��������� </span>Routines to aid debugging<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>debug.h<span style='mso-tab-count:2'>��������� </span>Debug macro definitions<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>macros.h<span style='mso-tab-count:2'>�������� </span>Spinlock, event, referencing macros<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ndisbind.c<span style='mso-tab-count:1'>������ </span>NDIS protocol entry points to handle binding/unbinding from adapters<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ndisprot.h<span style='mso-tab-count:1'>������� </span>Data structure definitions<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ndisprot.inf<span style='mso-tab-count:1'>����� </span>INF file for installing NDISPROT<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>ntdisp.c<span style='mso-tab-count:2'>�������� </span>NT Entry points and dispatch routines for NDISPROT<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>nuiouser.h<span style='mso-tab-count:1'>������ </span>IOCTL and associated structure definitions<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>recv.c<span style='mso-tab-count:2'>���������� </span>NDIS protocol entry points for receiving data, and IRP_MJ_READ processing<o:p></o:p></span></pre><pre><span style='font-size:9.0pt;mso-bidi-font-size:7.5pt;font-family:Courier'>send.c<span style='mso-tab-count:2'>���������� </span>NDIS protocol routines for sending data, and IRP_MJ_WRITE processing<o:p></o:p></span></pre><pre><span style='font-size:7.5pt;font-family:Courier'><o:p> </o:p></span></pre>
<p align=center style='text-align:center;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:10.0pt;font-family:Verdana'><a href="#top">Top of page</a> <o:p></o:p></span></p>
<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=624 style='width:6.5in;mso-cellspacing:0in;mso-padding-alt:0in 0in 0in 0in'> <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:1.5pt'> <td style='background:aqua;padding:.75pt .75pt .75pt .75pt;height:1.5pt'> <p class=MsoNormal><o:p> </o:p></p> </td> </tr> </table>
<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span style='font-size:7.5pt;font-family:"MS Sans Serif"'>� Microsoft Corporation 2000</span><span style='font-size:10.0pt;font-family:Verdana'> <o:p></o:p></span></p>
</div>
</body>
</html>
|