268 lines
47 KiB
Plaintext
268 lines
47 KiB
Plaintext
{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
|
|
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
|
|
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
|
|
\red192\green192\blue192;}{\stylesheet{\nowidctlpar\widctlpar\adjustright \fs20\cgrid \snext0 Normal;}{\s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\widctlpar\adjustright \fs34\cgrid \sbasedon0 \snext0 heading 1,H1;}{\s2\sb140\sa60\sl-380\slmult0
|
|
\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \fs30\cgrid \sbasedon1 \snext0 heading 2,H2,h2;}{\s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel1\adjustright \fs28\cgrid \sbasedon2 \snext0 heading 3,H3.struct,Struct,h3;}{
|
|
\s4\sb60\sl-240\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\fs21\cgrid \sbasedon1 \snext23 heading 4,H4,h4;}{\s5\sa40\sl-200\slmult0\keepn\nowidctlpar\widctlpar\tx1800\tx3600\tx5400\outlinelevel0\adjustright \i\f1\fs16\cgrid
|
|
\sbasedon1 \snext23 heading 5,H5,h5;}{\s6\sa40\sl-200\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \i\f1\fs16\cgrid \sbasedon1 \snext23 heading 6,H6,h6;}{\s7\sa40\sl-200\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel5\adjustright
|
|
\i\f1\fs16\cgrid \sbasedon6 \snext8 heading 7,H7;}{\s8\sa40\sl-200\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel5\adjustright \i\f1\fs16\cgrid \sbasedon6 \snext9 heading 8,H8;}{\s9\sa40\sl-200\slmult0
|
|
\keepn\nowidctlpar\widctlpar\outlinelevel7\adjustright \i\f1\fs16\cgrid \sbasedon8 \snext0 heading 9,H9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\li835\sl-220\slmult0\keepn\nowidctlpar\widctlpar\tqr\tldot\tx6960\tqr\tldot\tx8640\adjustright
|
|
\fs19\cgrid \sbasedon16 \snext15 TOC4,toc4;}{\s16\sl-220\slmult0\keepn\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs19\cgrid \sbasedon0 \snext29 \sautoupd toc 1,toc1;}{\s17\li1109\sl-220\slmult0\keepn\nowidctlpar\widctlpar
|
|
\tqr\tldot\tx6960\tqr\tldot\tx8640\adjustright \fs19\cgrid \sbasedon16 \snext17 TOC5,toc5;}{\s18\li200\sa80\nowidctlpar\widctlpar\adjustright \fs21\cgrid \sbasedon0 \snext0 Def1,VAR,DL,DFN;}{\s19\li547\sa80\nowidctlpar\widctlpar\adjustright \fs21\cgrid
|
|
\sbasedon18 \snext19 Def2;}{\s20\sl-220\slmult0\nowidctlpar\widctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid \snext20 Ex,CODE,PRE,CITE;}{
|
|
\s21\fi-360\li360\sa80\nowidctlpar\widctlpar\tx280\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls34\pnrnot0\pndec }\ls34\adjustright \fs21\cgrid \sbasedon23 \snext21 \sautoupd List Bullet,UL,Lb1,b1,lb1;}{\s22\fi-360\li360\sa80\nowidctlpar\widctlpar
|
|
\tqr\tx160\tx280{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls2047\ilvl11\adjustright \fs21\cgrid \sbasedon23 \snext22 List Number,OL,Ln1,n1;}{\s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid \snext23
|
|
n,Normal1,body text,Blockquote,P;}{\s24\sl-240\slmult0\keepn\nowidctlpar\widctlpar\adjustright \fs21\cgrid \snext18 Term1,DT;}{\s25\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar\widctlpar\adjustright \b\fs19\cgrid \sbasedon0 \snext0 Thf;}{
|
|
\s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\tx280\tx560\adjustright \fs19\cgrid \sbasedon0 \snext26 Tpf;}{\s27\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\adjustright \fs19\cgrid \sbasedon26 \snext27 tph;}{\s28\sb540\sa540\sl-540\slmult0
|
|
\keepn\nowidctlpar\widctlpar\adjustright \fs44\cgrid \snext0 Ch;}{\s29\li280\sl-220\slmult0\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs19\cgrid \sbasedon16 \snext29 \sautoupd toc 2,toc2;}{\s30\li560\sl-220\slmult0\nowidctlpar\widctlpar
|
|
\tqr\tldot\tx8640\adjustright \fs19\cgrid \sbasedon16 \snext30 \sautoupd toc 3,toc3;}{\s31\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar\widctlpar\adjustright \b\fs19\cgrid \snext32 Tt,TT;}{\s32\qr\sl-20\slmult0\keepn\nowidctlpar\widctlpar\brdrt
|
|
\brdrs\brdrw15 \adjustright \fs8\cgrid \snext0 Tr;}{\s33\li240\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar\widctlpar\adjustright \b\fs19\cgrid \sbasedon23 \snext33 Th;}{\s34\li240\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\tx280\tx560\adjustright
|
|
\fs19\cgrid \sbasedon23 \snext34 Tp;}{\s35\qr\sl-160\slmult0\nowidctlpar\widctlpar\adjustright \fs12\cgrid \sbasedon0 \snext0 Le,e;}{\s36\li280\sa80\nowidctlpar\widctlpar\adjustright \fs21\cgrid \sbasedon23 \snext36 Lp1;}{\s37\li-1800\sa280\sl-240\slmult0
|
|
\keepn\nowidctlpar\widctlpar\adjustright \caps\fs22\expnd24\expndtw120\cgrid \snext28 Cn;}{\s38\li280\sl-220\slmult0\nowidctlpar\widctlpar
|
|
\tx670\tx1060\tx1450\tx1840\tx2230\tx2620\tx3010\tx3400\tx3790\tx4180\tx4570\tx4960\tx5350\tx5740\tx6130\tx6520\tx6910\adjustright \f2\fs16\cgrid \sbasedon0 \snext38 Exl;}{\s39\li-1770\ri30\sb50\sl-80\slmult0\nowidctlpar\widctlpar\brdrt
|
|
\brdrs\brdrw15\brdrcf2 \adjustright \fs12\cgrid \snext0 header rule;}{\s40\li-1770\ri30\sb280\sa250\sl-120\slmult0\keepn\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brdrcf2 \adjustright \fs8\cf8\cgrid \snext0 Rule,HR;}{
|
|
\s41\fi-280\li520\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\tx520\adjustright \fs19\cgrid \sbasedon34 \snext41 Tpi;}{\s42\fi-140\li140\sb20\sa40\sl-200\slmult0\nowidctlpar\widctlpar\tx280\adjustright \fs17\cgrid \sbasedon34 \snext42 Tf;}{
|
|
\s43\fi-280\li280\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\tx280\adjustright \fs19\cgrid \sbasedon41 \snext43 Tpif;}{\s44\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid \sbasedon23 \snext44 Art;}{\s45\sl180\slmult0
|
|
\nowidctlpar\widctlpar\adjustright \i\f1\fs16\cgrid \sbasedon0 \snext45 footer;}{\s46\sl-210\slmult0\nowidctlpar\widctlpar\tqr\tx6960\adjustright \b\f1\fs18\cgrid \sbasedon0 \snext39 header;}{\s47\sb40\sl-200\slmult0\nowidctlpar\widctlpar
|
|
\tldot\tx8280\tqr\tx8640\adjustright \i\f1\fs16\cgrid \sbasedon0 \snext0 \sautoupd toc 4;}{\s48\sa240\sl-220\slmult0\nowidctlpar\widctlpar\tx280\tx560\adjustright \b\fs19\cgrid \snext0 Cap;}{\s49\qr\li-1770\ri30\sb80\sa80\sl180\slmult0
|
|
\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \adjustright \fs16\cgrid \sbasedon64 \snext0 Tew;}{\s50\li240\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar
|
|
\tx630\tx1020\tx1410\tx1800\tx2190\tx2580\tx2970\tx3360\tx3750\tx4140\tx4530\tx4920\tx5310\tx5700\tx6090\tx6480\tx6870\adjustright \f2\fs16\cgrid \sbasedon68 \snext50 Tex;}{\s51\qr\sl-140\slmult0\nowidctlpar\widctlpar\adjustright \fs12\cgrid
|
|
\sbasedon0 \snext0 Tes;}{\*\cs52 \additive \cf11 \sbasedon10 annotation reference;}{\s53\sa180\nowidctlpar\widctlpar\adjustright \cf11\cgrid \sbasedon0 \snext53 annotation text;}{\s54\li720\sa60\nowidctlpar\widctlpar\adjustright \f2\fs20\cgrid
|
|
\sbasedon0 \snext54 Normal Indent;}{\*\cs55 \additive \b\f0\fs19 \sbasedon10 Inline Code;}{\s56\sb40\sl-238\slmult0\keepn\nowidctlpar\widctlpar\pvpara\posy0\absh235\dxfrtext130\dfrmtxtx130\dfrmtxty0\adjustright \b\f1\fs18\cf2\cgrid \sbasedon57 \snext58
|
|
Wh;}{\s57\sb40\sl-238\slmult0\keepn\nowidctlpar\widctlpar\pvpara\posy0\absh235\dxfrtext130\dfrmtxtx130\dfrmtxty0\adjustright \b\f1\fs18\cgrid \snext58 Nh;}{\s58\sb40\sa80\keepn\nowidctlpar\widctlpar\adjustright \fs21\cgrid \sbasedon59 \snext60 Np1;}{
|
|
\s59\sa80\keepn\nowidctlpar\widctlpar\adjustright \fs21\cgrid \sbasedon23 \snext60 Np2;}{\s60\li30\ri30\sa40\sl-140\slmult0\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \adjustright \fs12\cf8\cgrid \snext0 Ne;}{\s61\li30\ri30\sb40\sl-80\slmult0
|
|
\keepn\nowidctlpar\widctlpar\brdrb\brdrdb\brdrw15\brdrcf2 \adjustright \fs12\cf8\cgrid \snext56 Ws;}{\s62\li30\ri30\sl-200\slmult0\nowidctlpar\widctlpar\brdrt\brdrdb\brdrw15\brsp20\brdrcf2 \adjustright \fs16\cf8\cgrid \sbasedon0 \snext0 We;}{
|
|
\s63\li30\ri30\sl-80\slmult0\keepn\nowidctlpar\widctlpar\brdrb\brdrs\brdrw15\brsp20 \adjustright \fs12\cf8\cgrid \snext57 Ns;}{\s64\qr\li30\ri30\sb80\sa80\sl-180\slmult0\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15\brsp20 \adjustright \fs16\cgrid
|
|
\sbasedon0 \snext0 Te;}{\s65\li-1800\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar\widctlpar\adjustright \b\fs19\cgrid \sbasedon31 \snext32 Ttw;}{\s66\sl-200\slmult0
|
|
\keepn\nowidctlpar\widctlpar\pvpara\phpg\posy0\absw1560\dxfrtext240\dfrmtxtx240\dfrmtxty0\adjustright \i\f1\fs16\cgrid \snext0 Mp;}{\s67\li-1800\sl-220\slmult0\nowidctlpar\widctlpar
|
|
\tx-1410\tx-1020\tx-630\tx-240\tx150\tx540\tx930\tx1320\tx1710\tx2100\tx2490\tx2880\tx3270\tx3660\tx4050\tx4440\tx4830\tx5220\tx5610\tx6000\tx6390\tx6780\adjustright \f2\fs16\cgrid \sbasedon0 \snext67 Exw,PRE WIDE;}{\s68\sb20\sa60\sl-220\slmult0
|
|
\nowidctlpar\widctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid \sbasedon0 \snext68 Texf;}{\s69\sb160\sa240\keepn\nowidctlpar\widctlpar
|
|
\tqr\tx1560\pvpara\phpg\posy0\absw1560\dxfrtext240\dfrmtxtx240\dfrmtxty0\adjustright \fs28\cgrid \sbasedon0 \snext0 ArtSd;}{\s70\sb20\sa60\nowidctlpar\widctlpar\tx240\tx280\tx560\adjustright \fs19\cgrid \sbasedon34 \snext70 Tart;}{\s71\sa40\sl-200\slmult0
|
|
\nowidctlpar\widctlpar\tx3480\tx5280\tx7080\tqr\tx8640\adjustright \i\f1\fs16\cgrid \sbasedon0 \snext0 \sautoupd toc 5;}{\s72\sa40\sl-200\slmult0\nowidctlpar\widctlpar\tx8280\tqr\tx8640\adjustright \f1\fs16\cgrid \sbasedon73 \snext26 \sautoupd
|
|
toc 6,toc6;}{\s73\sa40\sl-200\slmult0\nowidctlpar\widctlpar\tx8280\tqr\tx8640\adjustright \i\f1\fs16\cgrid \sbasedon47 \snext0 \sautoupd toc 9;}{\s74\sa40\sl-200\slmult0\nowidctlpar\widctlpar\tx8280\tqr\tx8640\adjustright \f1\fs16\cgrid
|
|
\sbasedon73 \snext0 \sautoupd toc 7;}{\s75\sa40\sl-200\slmult0\nowidctlpar\widctlpar\tx8280\tqr\tx8640\adjustright \f1\fs16\cgrid \sbasedon73 \snext0 \sautoupd toc 8;}{\s76\fi-280\li280\sa80\nowidctlpar\widctlpar
|
|
\tx280{\*\pn \pnlvlbody\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2047\ilvl10\adjustright \fs21\cgrid \sbasedon21 \snext76 b;}}{\*\listtable{\list\listtemplateid1825333678\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0
|
|
\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-120}{\list\listtemplateid-992318340\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0
|
|
\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid-119}{\list\listtemplateid-1\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext
|
|
\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid-737921570\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360
|
|
}{\listname ;}\listid25302813}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid380248942}
|
|
{\list\listtemplateid-737921570\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid609974127}
|
|
{\list\listtemplateid-617813772\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'02\'00\u-4033 ?;}{\levelnumbers\'01;}\fi-360\li360 }{\listname ;}\listid626393276}
|
|
{\list\listtemplateid-737921570\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s21\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid927155647}
|
|
{\list\listtemplateid-737921570\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid931162004}
|
|
{\list\listtemplateid-737921570\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1358194475}
|
|
{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1362510706}
|
|
{\list\listtemplateid-737921570\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1437867475}
|
|
{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1690257006}
|
|
{\list\listtemplateid-737921570\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1769232843}
|
|
{\list\listtemplateid-278087416\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1925802975}}
|
|
{\*\listoverridetable{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-119\listoverridecount0\ls3}{\listoverride\listid-120\listoverridecount0\ls4}{\listoverride\listid-119
|
|
\listoverridecount0\ls5}{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-119\listoverridecount0\ls7}{\listoverride\listid-120\listoverridecount0\ls8}{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120
|
|
\listoverridecount0\ls10}{\listoverride\listid-119\listoverridecount0\ls11}{\listoverride\listid-120\listoverridecount0\ls12}{\listoverride\listid-119\listoverridecount0\ls13}{\listoverride\listid-120\listoverridecount0\ls14}{\listoverride\listid-119
|
|
\listoverridecount0\ls15}{\listoverride\listid-120\listoverridecount0\ls16}{\listoverride\listid-119\listoverridecount0\ls17}{\listoverride\listid-120\listoverridecount0\ls18}{\listoverride\listid-119\listoverridecount0\ls19}{\listoverride\listid-120
|
|
\listoverridecount0\ls20}{\listoverride\listid-119\listoverridecount0\ls21}{\listoverride\listid-120\listoverridecount0\ls22}{\listoverride\listid1925802975\listoverridecount0\ls23}{\listoverride\listid1925802975\listoverridecount0\ls24}
|
|
{\listoverride\listid-119\listoverridecount0\ls25}{\listoverride\listid-120\listoverridecount0\ls26}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0
|
|
\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 }}\ls27}{\listoverride\listid380248942\listoverridecount0\ls28}{\listoverride\listid25302813\listoverridecount0\ls29}{\listoverride\listid1690257006\listoverridecount0\ls30}
|
|
{\listoverride\listid609974127\listoverridecount0\ls31}{\listoverride\listid626393276\listoverridecount0\ls32}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold
|
|
\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 }}\ls33}{\listoverride\listid927155647\listoverridecount0\ls34}{\listoverride\listid1362510706\listoverridecount0\ls35}{\listoverride\listid1358194475
|
|
\listoverridecount0\ls36}{\listoverride\listid931162004\listoverridecount0\ls37}{\listoverride\listid1769232843\listoverridecount0\ls38}{\listoverride\listid1437867475\listoverridecount0\ls39}{\listoverride\listid-2\listoverridecount1{\lfolevel
|
|
\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360 }}\ls40}}{\info{\title Microsoft\'ae}{\author Rodney Cook}
|
|
{\operator Rodney Cook}{\creatim\yr1997\mo2\dy26\hr15\min28}{\revtim\yr1997\mo2\dy28\hr15\min38}{\printim\yr1997\mo2\dy28\hr15\min37}{\version11}{\edmins114}{\nofpages6}{\nofwords1464}{\nofchars8346}{\*\company MSFT}{\nofcharsws0}{\vern71}}
|
|
\margt1400\margb1400 \facingp\widowctrl\ftnbj\aenddoc\hyphcaps0\formshade\viewkind4\viewscale100\viewzk2\pgbrdrhead\pgbrdrfoot \fet0\sectd \binfsxn265\binsxn265\psz1\sbknone\linex0\headery1987\footery360\endnhere\titlepg\sectdefaultcl {\*\pnseclvl1
|
|
\pnucrm\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta ?}}{\*\pnseclvl5
|
|
\pndec\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang
|
|
{\pntxtb ?}{\pntxta ?}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb ?}{\pntxta ?}}\pard\plain \s23\li-120\sa160\nowidctlpar\widctlpar\brdrb\brdrs\brdrw45\brsp200 \tqr\tx8476\adjustright \fs21\cgrid {\b\i\f1\fs60\expnd16\expndtw80 Microsoft}{
|
|
\b\i\f1\fs16\expnd12\expndtw60 \'ae\line }{\b\i\f1\fs40 Memphis Beta Device Driver Kit}{
|
|
\par }\pard\plain \s28\sb540\sa540\sl-540\slmult0\keepn\nowidctlpar\widctlpar\adjustright \fs44\cgrid {I82930\line USB Device Sample Minidriver Design Notes
|
|
\par }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\tx280\tx560\adjustright \fs19\cgrid {This document is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS DOCUMENT.
|
|
\par Microsoft Corporation may have patents or pending patent applications, trademarks, copyrights, or other intellectual property rights cove
|
|
ring subject matter in this document. The furnishing of this document does not give you any license to the patents, trademarks, copyrights, or other intellectual property rights except as expressly provided in any written license agreement from Microsoft
|
|
Corporation.
|
|
\par Microsoft does not make any representation or warranty regarding specifications in this document or any product or item developed based on these specifications. Microsoft disclaims all express and implied warranties, including but not limited
|
|
to the implied warranties or merchantability, fitness for a particular purpose and freedom from infringement. Without limiting the generality of the foregoing, Microsoft does not make any warranty of any kind that any item developed based on these specifi
|
|
c
|
|
ations, or any portion of a specification, will not infringe any copyright, patent, trade secret or other intellectual property right of any person or entity in any country. It is your responsibility to seek licenses for such intellectual property rights
|
|
w
|
|
here appropriate. Microsoft shall not be liable for any damages arising out of or in connection with the use of these specifications, including liability for lost profit, business interruption, or any other damages whatsoever. Some states do not allow the
|
|
exclusion or limitation of liability or consequential or incidental damages; the above limitation may not apply to you.
|
|
\par ActiveMovie, ActiveVRML, ActiveX, BackOffice, Developer Studio, Direct3D, DirectDraw, DirectInput, DirectMusic, DirectPlay, DirectSound, DirectX, Microsoft, NetMeeting, OpenType, Visual Basic, Visual C++, Win32, Windows, and Windows\~
|
|
NT are trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries. Other product and company names mentioned herein may be the trademarks of their respective owners.
|
|
\par \'a9\~1997\~Microsoft\~Corporation. All rights reserved.
|
|
\par }\pard\plain \s31\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar\widctlpar\adjustright \b\fs19\cgrid {{\*\bkmkstart _Toc324035518}{\*\bkmkstart _Toc324035584}{\*\bkmkstart _Toc324064341}{\*\bkmkstart _Toc324064446}{\*\bkmkstart _Toc324126415}
|
|
{\*\bkmkstart _Toc325420562}{\*\bkmkstart _Toc325941761}{\*\bkmkstart _Toc325941835}{\*\bkmkstart _Toc327597423}{\*\bkmkstart _Toc327836240}{\*\bkmkstart _Toc327836405}{\*\bkmkstart _Toc327836708}{\*\bkmkstart _Toc327858794}{\*\bkmkstart _Toc327862029}
|
|
|
|
\par Revision History
|
|
\par }\trowd \trgaph108\trleft-108\trkeep \clvertalt\clbrdrb\brdrs\brdrw15 \cltxlrtb \cellx1440\clvertalt\clbrdrb\brdrs\brdrw15 \cltxlrtb \cellx7020\pard\plain \s25\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar\widctlpar\intbl\adjustright \b\fs19\cgrid {
|
|
{\*\bkmkend _Toc324035518}{\*\bkmkend _Toc324035584}{\*\bkmkend _Toc324064341}{\*\bkmkend _Toc324064446}{\*\bkmkend _Toc324126415}{\*\bkmkend _Toc325420562}{\*\bkmkend _Toc325941761}{\*\bkmkend _Toc325941835}{\*\bkmkend _Toc327597423}
|
|
{\*\bkmkend _Toc327836240}{\*\bkmkend _Toc327836405}{\*\bkmkend _Toc327836708}{\*\bkmkend _Toc327858794}{\*\bkmkend _Toc327862029}Date\cell Description\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\b \row }\trowd
|
|
\trgaph108\trleft-108\trkeep \clvertalt\cltxlrtb \cellx1440\clvertalt\cltxlrtb \cellx7020\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {1/6/97\cell January 97 Preview draft\cell }\pard\plain
|
|
\nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\row }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {
|
|
\par }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\tx280\tx560\adjustright \fs19\cgrid {
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {\page }{\fs40 Contents
|
|
\par }\pard\plain \s32\qr\sl-20\slmult0\keepn\nowidctlpar\widctlpar\brdrt\brdrs\brdrw15 \adjustright \fs8\cgrid {
|
|
\par }\pard\plain \s16\sl-220\slmult0\keepn\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs19\cgrid {\field\fldedit{\*\fldinst { TOC \\o "1-3" }}{\fldrslt {\lang1024 Overview\tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778549 \\h }{\lang1024
|
|
{\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500340039000000}}}{\fldrslt {\lang1024 3}}}{\lang1024
|
|
\par Background Notes\tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778550 \\h }{\lang1024 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500350030000000}}}{\fldrslt {\lang1024 3}}}{
|
|
\lang1024
|
|
\par }\pard\plain \s29\li280\sl-220\slmult0\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs19\cgrid {\lang1024 Notes on Writing USB Device Minidrivers\tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778551 \\h }{\lang1024 {\*\datafield
|
|
08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500350031000000}}}{\fldrslt {\lang1024 4}}}{\lang1024
|
|
\par }\pard\plain \s16\sl-220\slmult0\keepn\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs19\cgrid {\lang1024 Anatomy of the Sample Minidriver\tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778552 \\h }{\lang1024 {\*\datafield
|
|
08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500350032000000}}}{\fldrslt {\lang1024 4}}}{\lang1024
|
|
\par Event-driven Walkthrough of the Sample Minidriver\tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778553 \\h }{\lang1024 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500350033000000}}
|
|
}{\fldrslt {\lang1024 6}}}{\lang1024
|
|
\par References\tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778554 \\h }{\lang1024 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500350034000000}}}{\fldrslt {\lang1024 6}}}{\lang1024
|
|
|
|
\par }\pard\plain \s29\li280\sl-220\slmult0\nowidctlpar\widctlpar\tqr\tldot\tx8640\adjustright \fs19\cgrid {\lang1024\highlight7 LIST THEM HERE}{\lang1024 \tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778555 \\h }{\lang1024 {\*\datafield
|
|
08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500350035000000}}}{\fldrslt {\lang1024 6}}}{\lang1024
|
|
\par Reference to Other Microsoft-supplied Samples\tab }{\field{\*\fldinst {\lang1024 PAGEREF _Toc381778556 \\h }{\lang1024 {\*\datafield 08d0c9ea79f9bace118c8200aa004ba90b02000000080000000e0000005f0054006f0063003300380031003700370038003500350036000000}}
|
|
}{\fldrslt {\lang1024 6}}}{\lang1024
|
|
\par }\pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \fs34\cgrid }}\pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \fs34\cgrid {\fs19 \page }{
|
|
{\*\bkmkstart _Toc381778549}Overview{\*\bkmkend _Toc381778549}
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {
|
|
The purpose of this Design Note is to document I82930, which is a sample USB device minidriver that is provided by Microsoft, in source-code form, to give the user assistance in writing their own minidriver.
|
|
To be of maximum value, this document requires the user to have the following additional materials close at hand.
|
|
\par {\pntext\pard\plain\s21 \f3\fs21\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s21\fi-360\li360\sa80\nowidctlpar\widctlpar\tx280\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls34\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls34\adjustright
|
|
\fs21\cgrid {\i USB Driver and Minidriver Design Notes and Reference}{, which is another of the documents in the Memphis DDK. All USB device driver-provided function calls made by this sample minidriver are documented here.
|
|
\par {\pntext\pard\plain\s21 \f3\fs21\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s21\fi-360\li360\sa80\nowidctlpar\widctlpar\tx280\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls34\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls34\adjustright {\i
|
|
WDM Design Notes and Reference}{, which is another of the documents in the Memphis DDK. References for I/O Request Packets (IRPs) that are used by this sample minidriver are documented here.
|
|
\par {\pntext\pard\plain\s21 \f3\fs21\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s21\fi-360\li360\sa80\nowidctlpar\widctlpar\tx280\jclisttab\tx360{\*\pn \pnlvlblt\ilvl0\ls34\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls34\adjustright {
|
|
The I82930 source-code files. After you install the WDM DDK, these source code files can be located at }{\highlight7 [}{\i\highlight7 path to be determined}{\highlight7 ].}{ \line
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {I82930 is a driver for the Intel 82930 USB test board. This sample demonstrates how a minidriver gets loaded, and how it submits requests to the USB Driver Interface (USBDI).
|
|
\par There are additional device-specific sample minidrivers located on this Memphis DDK. See the section titled \ldblquote Reference to Other Microsoft-provided Samples\rdblquote for a list of additional sample minidrivers
|
|
provided by Microsoft to give the user assistance in writing their own minidriver. The focus of this Design Note is on the USB device sample minidriver. No attempt is made here to explain the USB Driver Interface -- a \ldblquote and then a miracle occurs
|
|
\rdblquote attitude is taken with regard to USBDI.
|
|
\par This Design Note is organized as follows:
|
|
\par }\pard\plain \s24\sl-240\slmult0\keepn\nowidctlpar\widctlpar\adjustright \fs21\cgrid {\b Background Notes
|
|
\par }\pard\plain \s18\li200\sa80\nowidctlpar\widctlpar\adjustright \fs21\cgrid {Provides important information relevant to writing USB device minidrivers.\line Clarifies the minidriver\rquote
|
|
s role in a layered architecture, by showing what lives above and below it.\line Describes the nature of resources available to the minidriver.
|
|
\par }\pard\plain \s24\sl-240\slmult0\keepn\nowidctlpar\widctlpar\adjustright \fs21\cgrid {\b Anatomy of the Sample Minidriver
|
|
\par }\pard\plain \s18\li200\sa80\nowidctlpar\widctlpar\adjustright \fs21\cgrid {Provides a table that illustrates the anatomy of this sample minidriver.
|
|
\par }\pard\plain \s24\sl-240\slmult0\keepn\nowidctlpar\widctlpar\adjustright \fs21\cgrid {\b Event-driven Walkthrough of the Sample Minidriver
|
|
\par }\pard\plain \s18\li200\sa80\nowidctlpar\widctlpar\adjustright \fs21\cgrid {Provides helpful commentary on the sample source code.\line Identifies those portions of the minidriver that the user needs to adapt to meet their particular device requirements.
|
|
|
|
\par }\pard\plain \s24\sl-240\slmult0\keepn\nowidctlpar\widctlpar\adjustright \fs21\cgrid {\b References
|
|
\par }\pard\plain \s18\li200\sa80\nowidctlpar\widctlpar\adjustright \fs21\cgrid {References to material helpful toward understanding this sample minidriver.\line A reference to other Microsoft-provided sample minidrivers.
|
|
\par }\pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \fs34\cgrid {{\*\bkmkstart _Toc381778550}Background Notes{\*\bkmkend _Toc381778550}
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {A minidriver is a hardware-specific DLL that uses a Microsoft-provided class driver to accomplish most action
|
|
s through function calls, and provides only device-specific controls. Under WDM, the minidriver registers each adapter with the class driver, and the class driver creates a device object to represent each adapter that registers. The registration process i
|
|
s described in }{\i WDM Design Notes and Reference.}{ The minidriver uses the class driver\rquote s device object to make system calls.
|
|
\par }{A WDM USB device driver communicates with a WDM USB stack through an IRP interface. There are two ways to call DDIs:
|
|
\par {\pntext\pard\plain\s21 \f3\fs21\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s21\fi-360\li360\sa80\nowidctlpar\widctlpar\tx280{\*\pn \pnlvlblt\ilvl0\ls40\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls40\adjustright \fs21\cgrid {
|
|
The client device driver passes USB Request Block (URB) structures to the next-lower driver as a parameter in an IRP with Irp->Majo
|
|
rFunction set to IRP_MJ_INTERNAL_DEVICE_CONTROL and the next IRP stack location Parameters.DeviceIoControl.IoControlCode field set to IOCTL_INTERNAL_USB_SUBMIT_URB.
|
|
\par {\pntext\pard\plain\s21 \f3\fs21\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \s21\fi-360\li360\sa80\nowidctlpar\widctlpar\tx280{\*\pn \pnlvlblt\ilvl0\ls40\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls40\adjustright {
|
|
The client device driver passes an IRP with Irp->Majorfunction set to IRP_MJ_INTERNAL_DEVICE_CONTROL, and the next IRP stack location Parameters.DeviceIoControl.IoControlCode field set to one of the other IOCTL_INTERNAL_USB_ function codes. \line
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \fs21\cgrid {The client device driver and bus driver share information in the common structures USBD_INTERFACE_INFORMATION and USBD_PIPE_INFORMATION.
|
|
|
|
\par }{\b {\*\bkmkstart _Toc370556571}{\*\bkmkstart _Toc381151170}I/O Request Packet (IRP) Transfers}{{\*\bkmkend _Toc370556571}{\*\bkmkend _Toc381151170}
|
|
. IRPs are passed to the next lower driver by using the WDM function IoCallDriver with the device object of the next lower driver as a
|
|
parameter.The device object of the next lower driver for all USB client device drivers is the DeviceObject returned from the call to IoAttachDeviceToStack.
|
|
\par }{\b {\*\bkmkstart _Toc370556575}{\*\bkmkstart _Toc381151172}USB Request Block (URB) Transfers}{{\*\bkmkend _Toc370556575}{\*\bkmkend _Toc381151172}. Clients send
|
|
these requests to the bus by including them in an IRP a pointer to a URB structure; a function code within the URB identifies the specific request. For transfer requests, multiple URB structures may be linked and passed in with a single IRP.}{ }{
|
|
The USB driver stack components assume all URB structures passed to them are allocated from the nonpaged pool.
|
|
\par }{\b {\*\bkmkstart _Toc370556576}{\*\bkmkstart _Toc381151173}Common URB Header Structure}{{\*\bkmkend _Toc370556576}{\*\bkmkend _Toc381151173}. Different URB structures are defined for each function. However, every URB has a commo}{n header, _URB_HEADER}{
|
|
. The header portion of a URB must always be initialized with the input parameters }{\i Length }{and }{\i Function}{, and will always return the output parameter }{\i Status}{.
|
|
\par }{\b {\*\bkmkstart _Toc370556577}{\*\bkmkstart _Toc381151174}Bandwidth Allocation}{{\*\bkmkend _Toc370556577}{\*\bkmkend _Toc381151174}
|
|
. Bandwidth allocation occurs through the process of selecting a configuration or interface and acquiring open pipe handles. While a driver holds an open handle for a specific pipe, the bandwidth necessary to transfer data on that pipe (based
|
|
on maximum packet size and service interval) is reserved.
|
|
\par }{\b {\*\bkmkstart _Toc370556578}{\*\bkmkstart _Toc381151175}IOCTL Codes}{. For a discussion of the IOCTL codes that a USB client device driver must use, see }{\i USB Driver and Minidriver Design Notes and Reference}{.
|
|
\par }{\b URB Transfer Requests}{{\*\bkmkend _Toc370556578}{\*\bkmkend _Toc381151175}. For a discussion of URB transfer requests: transfer flags, status codes, halt/stall behavior, and linked URBs, see }{\i USB Driver and Minidriver Design Notes and Reference}
|
|
{.
|
|
\par }\pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\outlinelevel1\adjustright \fs30\cgrid {{\*\bkmkstart _Toc381778551}Notes on Writing USB Device Minidrivers{\*\bkmkend _Toc381778551}
|
|
\par {\pntext\pard\plain\s21 \f3\fs21\highlight7\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s21\fi-360\li360\sa80\nowidctlpar\widctlpar\tx280{\*\pn \pnlvlblt\ilvl0\ls27\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls27\adjustright
|
|
\fs21\cgrid {\highlight7 [}{\i\highlight7 need notes???}{\highlight7 ]}{\line
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {This section has described general issues relevant to writing USB device minidrivers. Now you are ready to start looking at the SONYDCR source code. The following section is an
|
|
\ldblquote anatomy\rdblquote of the sample minidriver code in terms of C modules and driver entry points.
|
|
\par }\pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \fs34\cgrid {{\*\bkmkstart _Toc380474380}{\*\bkmkstart _Toc381778552}Anatomy of the Sample Minidriver{\*\bkmkend _Toc380474380}{\*\bkmkend _Toc381778552}
|
|
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {After you install the WDM DDK, the following source code files can be located at [}{\i path to be determined}{].
|
|
\par }\trowd \trgaph108\trleft-108 \clvertalt\cltxlrtb \cellx1440\clvertalt\cltxlrtb \cellx8748\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {I82930.c\cell
|
|
Shows how a driver gets loaded, and how it submits requests to the USB Driver Interface.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\row }\pard\plain \s35\qr\sl-160\slmult0\nowidctlpar\widctlpar\adjustright \fs12\cgrid {
|
|
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {After you install the WDM DDK, the following header files can be located at [}{\i path to be determined}{].
|
|
\par }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {I82930.h\cell Contains structures that are samples of information that could be used in a device extension structure.\cell }\pard\plain
|
|
\nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\row }\pard\plain \s35\qr\sl-160\slmult0\nowidctlpar\widctlpar\adjustright \fs12\cgrid {
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {
|
|
These sample files are heavily commented, to aid the user in understanding their purpose and their relationship to the stream class driver. Documentation for the DDIs referenced below may be found in }{\i
|
|
USB Driver and Minidriver Design Notes and Reference}{, in }{\i WDM Design Notes and Reference}{
|
|
, or in the source code files for the sample minidriver, listed above. Documentation for the class driver DDIs can be quickly found by looking to the Table of Contents for these documents. When DDIs are part of the sample min
|
|
idriver source code, their file locations are noted in parentheses.\line
|
|
\par }\trowd \trgaph108\trleft-108 \clvertalt\cltxlrtb \cellx4080\clvertalt\cltxlrtb \cellx8760\pard\plain \s25\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar\widctlpar\intbl\adjustright \b\fs19\cgrid {Minidriver DDI\cell Description\cell }\pard\plain
|
|
\nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\row }\trowd \trgaph108\trleft-108 \clvertalt\cltxlrtb \cellx4080\clvertalt\cltxlrtb \cellx8760\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl
|
|
\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS DriverEntry(
|
|
\par IN PDRIVER_OBJECT DriverObject,
|
|
\par IN PUNICODE_STRING RegistryPath
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Installable driver initialization entry point. This entry point is called directly by the I/O system.\cell }\pard\plain
|
|
\nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright
|
|
\f2\fs16\cgrid {NTSTATUS I82930_Dispatch(
|
|
\par IN PDEVICE_OBJECT DeviceObject,
|
|
\par IN PIRP Irp
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Process the IRPs sent to this device.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain
|
|
\s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {VOID I82930_Unload(
|
|
\par IN PDRIVER_OBJECT DriverObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Free allocated resources.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain
|
|
\s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_StartDevice(
|
|
\par IN PDEVICE_OBJECT DeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Initializes a given instance of the device on the USB. The device descriptor is obtained and stored.\cell }\pard\plain
|
|
\nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright
|
|
\f2\fs16\cgrid {NTSTATUS I82930_RemoveDevice(
|
|
\par IN PDEVICE_OBJECT DeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Stops a given instance of an 82930 device on the USB.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row
|
|
}\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_StopDevice(
|
|
\par IN PDEVICE_OBJECT DeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Stops a given instance of an 82930 device on the USB.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row
|
|
}\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_PnPAddDevice(
|
|
\par IN PDRIVER_OBJECT DriverObject,
|
|
\par IN PDEVICE_OBJECT PhysicalDeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Creates a new instance of the device.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain
|
|
\s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_CreateDeviceObject(
|
|
\par IN PDRIVER_OBJECT DriverObject,
|
|
\par IN PDEVICE_OBJECT *DeviceObject,
|
|
\par LONG Instance
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Creates a FunctionalDeviceObject.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain
|
|
\s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_CallUSBD(
|
|
\par IN PDEVICE_OBJECT DeviceObject,
|
|
\par IN PURB Urb
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Passes a URB to the USBD class driver.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain
|
|
\s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_ConfigureDevice(
|
|
\par IN PDEVICE_OBJECT DeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Initializes a given instance of the device on the USB and selects the configuration.\cell }\pard\plain
|
|
\nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright
|
|
\f2\fs16\cgrid {NTSTATUS I82930_SelectInterface(
|
|
\par IN PDEVICE_OBJECT DeviceObject,
|
|
\par IN PUSB_CONFIGURATION_DESCRIPTOR\line ConfigurationDescriptor,
|
|
\par PUSB_INTERFACE_INFORMATION Interface
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Initializes an 82930 with multiple interfaces.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row
|
|
}\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {VOID I82930_Cleanup(
|
|
\par PDEVICE_OBJECT DeviceObject
|
|
\par (;\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {???\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain \s20\sl-220\slmult0
|
|
\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_BuildPipeList(
|
|
\par IN PDEVICE_OBJECT DeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {???\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain \s20\sl-220\slmult0
|
|
\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {NTSTATUS I82930_ResetPipe(
|
|
\par IN PDEVICE_OBJECT DeviceObject,
|
|
\par IN PI82930_PIPE Pipe
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {Reset both pipes associated with a video channel on the camera.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {
|
|
\fs21 \row }\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {VOID I82930_DecrementIoCount(
|
|
\par IN PDEVICE_OBJECT DeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {???\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\trowd \trgaph108\trleft-108 \clvertalt\cltxlrtb
|
|
\cellx4080\clvertalt\cltxlrtb \cellx8760\pard\plain \s20\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630\adjustright \f2\fs16\cgrid {
|
|
VOID I82930_IncrementIoCount(
|
|
\par IN PDEVICE_OBJECT DeviceObject
|
|
\par );\cell }\pard\plain \s26\sb20\sa60\sl-220\slmult0\nowidctlpar\widctlpar\intbl\tx280\tx560\adjustright \fs19\cgrid {???\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \fs20\cgrid {\fs21 \row }\pard\plain
|
|
\s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {
|
|
\par }\pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \fs34\cgrid {{\*\bkmkstart _Toc381778553}Event-driven Walkthrough of the Sample Minidriver{\*\bkmkend _Toc381778553}
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {
|
|
The following steps briefly describe ??????????????????? for the sample USB device minidriver. The sample minidriver routines mentioned here are described in greater detail in the comments of the sample source code and i
|
|
n routine-specific notes that follow.
|
|
\par {\pntext\pard\plain\s23 \fs21\highlight7\cgrid \hich\af0\dbch\af0\loch\f0 1.\tab}}\pard \s23\fi-360\li360\sa160\nowidctlpar\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls35\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls35\adjustright {
|
|
\highlight7 [}{\i\highlight7 need event-driven walkthrough}{\highlight7 ]}{
|
|
\par }\pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \fs34\cgrid {{\*\bkmkstart _Toc381778554}References{\*\bkmkend _Toc381778554}
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {Documentation for the class driver DDIs can be quickly found by looking to the Table of Contents for }{\i WDM Design Notes and Reference,}{ or }{\i USB Drive
|
|
r and Minidriver Design Notes and Reference}{. However, some DDIs need additional documentation when viewed in the context of this sample minidriver.
|
|
\par }\pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar\widctlpar\outlinelevel1\adjustright \fs30\cgrid {\highlight7 {\*\bkmkstart _Toc381778555}LIST THEM HERE}{{\*\bkmkend _Toc381778555}
|
|
\par {\*\bkmkstart _Toc381778556}Reference to Other Microsoft-supplied Samples{\*\bkmkend _Toc381778556}
|
|
\par }\pard\plain \s23\sa160\nowidctlpar\widctlpar\adjustright \fs21\cgrid {The following Microsoft-supplied minidrivers are available as part of this Memphis DDK.
|
|
\par }{\i SCSAMPLE: Stream Class Sample Minidriver Design Notes }{documents the SCSAMPLE sample minidriver. The location of the sample source code is given in that document. (}{\i need info on demonstration value of this minidriver}{)
|
|
\par
|
|
\par }} |