Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<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:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" 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="notify_files/filelist.xml"> <title>Muxim Notify Object Sample</title> <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PlaceName"/> <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PlaceType"/> <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"/> <!--[if gte mso 9]><xml>
<w:WordDocument> <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if !mso]><object
classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object> <style> st1\:*{behavior:url(#ieooui) } </style> <![endif]--> <style> <!--
/* Font Definitions */ @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:����; mso-font-charset:134; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"\@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"; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 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";} h1 {mso-style-next:Normal; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:1; font-size:10.0pt; font-family:Verdana; mso-fareast-font-family:SimSun; mso-font-kerning:0pt; font-weight:bold;} 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;} 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;} span.GramE {mso-style-name:""; mso-gram-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:354117224; mso-list-type:hybrid; mso-list-template-ids:-730287492 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:\F0B7; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-family:Symbol;} @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;} @list l1 {mso-list-id:379671731; mso-list-type:hybrid; mso-list-template-ids:-1929328134 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-text:"%1\)"; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level2 {mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level3 {mso-level-tab-stop:1.5in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level4 {mso-level-tab-stop:2.0in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level5 {mso-level-tab-stop:2.5in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level6 {mso-level-tab-stop:3.0in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level7 {mso-level-tab-stop:3.5in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level8 {mso-level-tab-stop:4.0in; mso-level-number-position:left; text-indent:-.25in;} @list l1:level9 {mso-level-tab-stop:4.5in; mso-level-number-position:left; text-indent:-.25in;} @list l2 {mso-list-id:1626816921; mso-list-type:hybrid; mso-list-template-ids:-553597382 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l2:level1 {mso-level-text:"%1\)"; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l2:level2 {mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in;} @list l2:level3 {mso-level-tab-stop:1.5in; mso-level-number-position:left; text-indent:-.25in;} @list l2:level4 {mso-level-tab-stop:2.0in; mso-level-number-position:left; text-indent:-.25in;} @list l2:level5 {mso-level-tab-stop:2.5in; mso-level-number-position:left; text-indent:-.25in;} @list l2:level6 {mso-level-tab-stop:3.0in; mso-level-number-position:left; text-indent:-.25in;} @list l2:level7 {mso-level-tab-stop:3.5in; mso-level-number-position:left; text-indent:-.25in;} @list l2:level8 {mso-level-tab-stop:4.0in; mso-level-number-position:left; text-indent:-.25in;} @list l2: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'>MUX.DLL � Sample Notify Object <o:p></o:p></span></h2>
<p><span style='font-size:10.0pt;font-family:Arial;color:red'>[This is preliminary documentation and subject to change.]</span><span style='font-size: 10.0pt;font-family:Verdana'><o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>SUMMARY<o:p></o:p></span></h3>
<h3><span style='font-size:12.0pt;font-family:Verdana'>MUX Notify Object<o:p></o:p></span></h3>
<p><span style='font-size:10.0pt;font-family:Verdana'>This sample demonstrates how to write a notify object for installing and configuring an NDIS MUX intermediate miniport (IM) driver that implements a N:1 relationship between upper and lower bindings i.e. it creates multiple virtual network devices on top of a single lower adapter. Protocols bind to these virtual adapters as if they are real adapters. Examples of </span><st1:place><st1:PlaceName><span style='font-size:10.0pt;font-family:Verdana'>Intermediate</span></st1:PlaceName><span style='font-size:10.0pt;font-family:Verdana'> </span><st1:PlaceType><span style='font-size:10.0pt;font-family:Verdana'>Miniport</span></st1:PlaceType></st1:place><span style='font-size:10.0pt;font-family:Verdana'> drivers that can use this type of notify objects are Virtual LAN (VLAN) drivers.<o:p></o:p></span></p>
<p><b style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'>Operation</span></b><span style='font-family:Verdana'><o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>During installation, the notify object performs the following operations.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt; font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>�<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>It creates one virtual adapter for each physical adapter the MUX protocol edge binds to.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt; font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>�<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>It disables the bindings of other protocols such as TCP/IP to physical adapters if it has been compiled with DISABLE_PROTOCOLS_TO_PHYSICAL defined in the Sources file. This is the most commonly desired behavior for N:1 MUX drivers.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo2; tab-stops:list .5in'><![if !supportLists]><span style='font-size:10.0pt; font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>�<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>It disables the bindings of the protocol edge of the MUX IM driver with all its virtual adapters.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>The notify object provides a custom property page for the MUX IM driver. The custom property page allows the user to add one or more virtual adapters on top of a physical adapter or delete an existing virtual adapter.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>When the MUX IM driver is uninstalled, binding is disabled, or the user deletes all the virtual adapters on top of a physical adapter, the notify object restores the bindings of other protocols to the physical adapter if it has been compiled with the preprocessor flag DISABLE_PROTOCOLS_TO_PHYSICAL defined in the Sources file.<o:p></o:p></span></p>
<p><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt; font-family:Verdana'>Windows 2000 Specific<o:p></o:p></span></b></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>During the installation, the notify object copies the INF file for the virtual adapter from the installation media to the system INF directory by using the <span class=SpellE>SetupCopyOEMInf</span> function. This is done because Windows 2000 does not support the <span class=SpellE>CopyINF</span> directive to copy INF files from another INF file.<o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>BUILDING THE SAMPLE<o:p></o:p></span></h3>
<p style='tab-stops:657.0pt'><span style='font-size:10.0pt;font-family:Verdana'>To build the sample, type <b>build -ceZ</b>. This command produces the binary mux.dll, which is the sample notify object.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>The sample compiles properly for 32-bit and 64-bit, and builds properly with Microsoft� Visual C� 6.0.<o:p></o:p></span></p>
<p><b style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt; font-family:Verdana'>Preprocessor Flags:<o:p></o:p></span></b></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>DISABLE_PROTOCOLS_TO_PHYSICAL<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>When this flag is defined in the Sources file, the notify object disables the bindings of other protocols such as TCP/IP to the physical adapters during the installation. When all the virtual adapters are removed either through the custom property page or as a result of uninstalling the MUX driver, the notify object re-enables those bindings.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>PASSTHRU_NOTIFY<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>This is defined to allow the MUX driver to be used in a <span class=SpellE>passthru</span> mode. When this flag is defined, the notify object:<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo4; tab-stops:list .5in'><![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'>Creates only one virtual miniport for every physical adapter the MUX protocol edge binds to.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo4; tab-stops:list .5in'><![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'>Disables the property page to prevent adding of additional virtual miniports. <o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo4; tab-stops:list .5in'><![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'>3)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>Stores the device name of the virtual adapter in REG_SZ registry value under HKLM\System\<span class=SpellE>CurrentControlSet\Services\muxp\Parameters\Adapters</span><span class=GramE>\{</span><span class=SpellE><i style='mso-bidi-font-style:normal'>PhysicalAdaptersInstanceGuid</i></span><i style='mso-bidi-font-style:normal'>}\</i>UpperBindings, because there is one to one binding. In the MUX mode (when this flag is not defined), the notify object stores the device name in a REG_MULTI_SZ registry value as there could be more than one virtual miniports.<o:p></o:p></span></p>
<p style='margin-left:.25in'><span style='font-size:10.0pt;font-family:Verdana'>You can also use this notify object with the Passthru driver by doing the following:<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo6; tab-stops:list .5in'><![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'>Change the protocol name in file <span class=SpellE>src\network\ndis\passthru\passthru.c</span> from PASSTHRU to MUXP.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo6; tab-stops:list .5in'><![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'>Change the driver name from Passthru to MUX in the sources file.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo6; tab-stops:list .5in'><![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'>3)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>Rebuild the driver to obtain a mux.sys driver binary.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo6; tab-stops:list .5in'><![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'>4)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>Build the MUX notify object with PASSTHRU_NOTIFY defined.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo6; tab-stops:list .5in'><![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'>5)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span style='font-size:10.0pt;font-family:Verdana'>Use the MUX <span class=SpellE><span class=GramE>inf</span></span> files, <span class=SpellE>muxp.inf</span> and <span class=SpellE>mux_mp.inf</span>, to install the driver and <span class=SpellE>dll</span>.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>The benefit of using techniques in the MUX notify object for a 1:1 intermediate driver (e.g. Passthru) is to be able to exercise higher level of control over the bindings of MUX with other components in the system, which is not possible with the IM filter driver.<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>CUSTOM_EVENTS<o:p></o:p></span></p>
<p><span style='font-size:10.0pt;font-family:Verdana'>When this macro is defined, the notify object shows how to send custom events to the MUX IM driver when a virtual miniport is added or removed.<o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>CODE TOUR<o:p></o:p></span></h3>
<h4><span style='font-family:Verdana'>File Manifest<o:p></o:p></span></h4>
<pre><u>File<span style='mso-tab-count:2'>���������� </span>Description<o:p></o:p></u></pre><pre><span class=SpellE>Dllmain.cpp</span><span style='mso-tab-count:1'>��� </span>File containing implementations of DLL entry point and exports. </pre><pre><span class=SpellE>Implinc.cpp</span><span style='mso-tab-count:1'>��� </span>File including source code for ATL utilities.</pre><pre>mux.htm<span style='mso-tab-count:2'>������� </span>The documentation for this sample.</pre><pre><span class=SpellE>Pch.h</span><span style='mso-tab-count:2'>��������� </span>Pre-compiled header file.</pre><pre><span class=SpellE>Resource.h</span><span style='mso-tab-count:1'>���� </span>The resource header.</pre><pre><span class=SpellE>notify.cpp</span><span style='mso-tab-count:1'>���� </span>Notify object implementation.</pre><pre><span class=SpellE>virtual.cpp</span><span style='mso-tab-count:1'>��� </span>Virtual adapter class implementation.</pre><pre><span class=SpellE>adapter.cpp</span><span style='mso-tab-count:1'>��� </span>Physical adapter class implementation.</pre><pre><span class=SpellE>common.cpp</span><span style='mso-tab-count:1'>���� </span>Global functions, variables and macro definitions.</pre><pre><span class=SpellE>mux.def</span><span style='mso-tab-count:2'>������� </span>The sample's linker definition file.</pre><pre><span class=SpellE>mux.h</span><span style='mso-tab-count:2'>��������� </span>The header file for <span class=SpellE>mux.cpp</span>.</pre><pre><span class=SpellE>virtual.h</span><span style='mso-tab-count:1'>����� </span>Virtual adapter class declaration.</pre><pre><span class=SpellE>Adapter.h</span><span style='mso-tab-count:1'>����� </span>Physical adapter class declaration.</pre><pre><span class=SpellE>notify.rc</span><span style='mso-tab-count:1'>����� </span>The resource file.</pre><pre><span class=SpellE>notify.rgs</span><span style='mso-tab-count:1'>���� </span>Script-based registry.</pre><pre><span class=SpellE>notifyn.idl</span><span style='mso-tab-count:1'>��� </span>The notify object's .<span class=SpellE>idl</span> file.</pre><pre><span class=SpellE>setupdi.cpp</span><span style='mso-tab-count:1'>��� </span>Functions to copy the miniport INF file to the system.</pre><pre><o:p> </o:p></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'><b style='mso-bidi-font-weight:normal'><a href="#_top"><span style='font-size: 10.0pt;font-family:Verdana;font-weight:normal'>Top of page</span></a></b><span style='font-size:10.0pt;font-family:Verdana'> <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 2001</span><span style='font-size:10.0pt;font-family:Verdana'> <o:p></o:p></span></p>
</div>
</body>
</html>
|