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.

755 lines
118 KiB

  1. {\rtf1\ansi \deff4\deflang1033{\fonttbl{\f1\froman\fcharset2\fprq2 Symbol;}{\f4\froman\fcharset0\fprq2 Times New Roman;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f11\fmodern\fcharset0\fprq1 Courier New;}}
  2. {\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;
  3. \red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar \f4\fs20 \snext0 Normal;}{\s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar \f4\fs34 \sbasedon0\snext0
  4. heading 1;}{\s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 \sbasedon1\snext0 heading 2;}{\s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 \sbasedon2\snext0 heading 3;}{\s4\sa60\keepn\nowidctlpar \b\f5\fs20 \sbasedon0\snext0 heading 4;}{
  5. \s5\sb240\sa60\nowidctlpar \f4\fs20 \sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\nowidctlpar \i\f4\fs22 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\nowidctlpar \f5\fs20 \sbasedon0\snext0 heading 7;}{\s8\sb240\sa60\nowidctlpar \i\f5\fs20
  6. \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\nowidctlpar \b\i\f5\fs18 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\keepn\nowidctlpar \f11\fs18 \sbasedon4\snext15 Code;}{\*\cs16 \additive\b\i\fs20\cf6 \sbasedon10
  7. Rob's Notes;}{\*\cs17 \additive\f11\fs20 \sbasedon10 Code (character);}{\*\cs18 \additive\fs20\super \sbasedon10 footnote reference;}{\*\cs19 \additive\b\fs20 \sbasedon10 API (character);}{\s20\nowidctlpar \b\f4\fs20 \sbasedon0\snext0 API;}{
  8. \s21\sb240\sa60\nowidctlpar \b\f5\fs72\kerning28 \sbasedon0\snext21 Title;}{\s22\nowidctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 \sbasedon0\snext22 header;}{\s23\nowidctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 \sbasedon0\snext23 footer;}{\*\cs24 \additive\fs20
  9. \sbasedon10 page number;}{\s25\fi-2160\li3600\nowidctlpar \f4\fs16 \sbasedon0\snext25 Body Text 2;}{\s26\sa160\nowidctlpar \f4\fs21 \snext26 n,Normal1,body text,Blockquote,P;}{\s27\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar \b\f4\fs19 \snext0 Tt,TT;}{
  10. \s28\sb540\sa540\sl-540\slmult0\keepn\nowidctlpar \f4\fs44 \snext0 Ch;}{\s29\sb20\sa60\sl-220\slmult0\nowidctlpar\tx280\tx560 \f4\fs19 \sbasedon0\snext29 Tpf;}{\s30\li200\sa80\nowidctlpar \f4\fs21 \sbasedon0\snext0 Def1,VAR,DL,DFN;}{\s31\sl-220\slmult0
  11. \nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 \snext31 Ex,CODE,PRE,CITE;}{\s32\fi-360\li360\sa80\nowidctlpar\tx360{\*\pn \pnlvl10
  12. \pnf5\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\f4\fs21 \sbasedon26\snext32 List Bullet,UL,Lb1,b1;}{\s33\fi-360\li360\sa80\nowidctlpar\tqr\tx160\tx280{\*\pn \pnlvl10\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\f4\fs21 \sbasedon26\snext33 List Number;}{
  13. \s34\sl-240\slmult0\keepn\nowidctlpar \f4\fs21 \snext30 Term1,DT;}{\s35\sb20\sa60\sl-220\slmult0\keepn\nowidctlpar \b\f4\fs19 \sbasedon0\snext0 Thf;}{\s36\sl-220\slmult0\keepn\nowidctlpar\tqr\tldot\tx8640 \f4\fs19 \sbasedon0\snext37 toc 1;}{
  14. \s37\li280\sl-220\slmult0\nowidctlpar\tqr\tldot\tx8640 \f4\fs19 \sbasedon36\snext37 toc 2;}{\s38\li560\sl-220\slmult0\nowidctlpar\tqr\tldot\tx8640 \f4\fs19 \sbasedon36\snext38 toc 3;}{\s39\sb20\sa60\sl-220\slmult0\nowidctlpar \f4\fs19 \sbasedon29\snext39
  15. tph;}{\s40\li600\nowidctlpar \f4\fs20 \sbasedon0\snext0 toc 4;}{\s41\li800\nowidctlpar \f4\fs20 \sbasedon0\snext0 toc 5;}{\s42\li1000\nowidctlpar \f4\fs20 \sbasedon0\snext0 toc 6;}{\s43\li1200\nowidctlpar \f4\fs20 \sbasedon0\snext0 toc 7;}{
  16. \s44\li1400\nowidctlpar \f4\fs20 \sbasedon0\snext0 toc 8;}{\s45\li1600\nowidctlpar \f4\fs20 \sbasedon0\snext0 toc 9;}{\s46\li547\sa80\nowidctlpar \f4\fs21 \sbasedon30\snext46 Def2;}{\s47\li835\sl-220\slmult0
  17. \keepn\nowidctlpar\tqr\tldot\tx6960\tqr\tldot\tx8640 \f4\fs19 \sbasedon36\snext47 TOC4,toc4;}{\s48\li1109\sl-220\slmult0\keepn\nowidctlpar\tqr\tldot\tx6960\tqr\tldot\tx8640 \f4\fs19 \sbasedon36\snext48 TOC5,toc5;}{\s49\sa160\nowidctlpar \b\f4\fs21\cf6
  18. \sbasedon26\snext49 Comment;}{\s50\nowidctlpar \f4\fs20 \sbasedon0\snext50 footnote text;}{\s51\fi-1440\li2880\nowidctlpar \f4\fs16 \sbasedon0\snext51 Body Text Indent 2;}{\s52\qr\sl-160\slmult0\widctlpar \f4\fs12 \sbasedon0\snext0 Le,e;}{
  19. \s53\li-1800\sb80\sa240\widctlpar\tx0\tx280\tx560 \f4\fs28 \snext0 Art;}{\s54\nowidctlpar \b\f4\fs20\cf2 \sbasedon0\snext54 Body Text;}}{\info{\title VXDCLNT--Sample Ring-0 HID Device Mapper}{\author Denys Howard}{\operator Denys Howard}
  20. {\creatim\yr1997\mo3\dy21\hr16\min50}{\revtim\yr1997\mo4\dy18\hr9\min43}{\printim\yr1997\mo4\dy17\hr16\min12}{\version2}{\edmins36}{\nofpages12}{\nofwords2624}{\nofchars14959}{\*\company Microsoft}{\vern57443}}
  21. \facingp\widowctrl\ftnbj\aenddoc\aftnnar\hyphcaps0\formshade \fet0\sectd \sbkodd\pgnrestart\linex0\endnhere\titlepg {\headerl \pard\plain \s22\qr\widctlpar\brdrb\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst {\b\f5\fs18
  22. styleref Ch \\* Mergeformat }}{\fldrslt {\b\f5\fs18\lang1024 VXDCLNT\emdash Sample Ring-0 HID Device Mapper}}}{\b\f5\fs18 }{\b\f5\fs18\expnd-7\expndtw-35 }{\b\f5\fs18 \emdash }{\b\f5\fs18\expnd-7\expndtw-35 }{\b\f5\fs18 }{\field{\*\fldinst {
  23. \b\f5\fs18 page }}{\fldrslt {\b\f5\fs18\lang1024 12}}}{\b\f5\fs18
  24. \par }\pard \s22\widctlpar\tqc\tx4320\tqr\tx8640
  25. \par }{\headerr \pard\plain \s22\qr\widctlpar\brdrb\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst {\b\f5\fs18 styleref Ch \\* Mergeformat }}{\fldrslt {\b\f5\fs18\lang1024 VXDCLNT\emdash Sample Ring-0 HID Device Mapper}}}{\b\f5\fs18 }
  26. {\b\f5\fs18\expnd-7\expndtw-35 }{\b\f5\fs18 \emdash }{\b\f5\fs18\expnd-7\expndtw-35 }{\b\f5\fs18 }{\field{\*\fldinst {\b\f5\fs18 page }}{\fldrslt {\b\f5\fs18\lang1024 11}}}{\b\f5\fs18
  27. \par }\pard \s22\widctlpar\tqc\tx4320\tqr\tx8640
  28. \par }{\footerl \pard\plain \s23\widctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 {\b\i\f5\fs22 Microsoft Confidential Draft. Do Not Redistribute.}{\b\fs22 \line }{\i\f5\fs16 \'a9 1997 Microsoft Corporation. All rights reserved.}{\f5\fs16
  29. \par }}{\footerr \pard\plain \s23\widctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 {\b\i\f5\fs22 Microsoft Confidential Draft. Do Not Redistribute.}{\b\fs22 \line }{\i\f5\fs16 \'a9 1997 Microsoft Corporation. All rights reserved.}
  30. \par }{\footerf \pard\plain \s23\widctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 {\b\i\f5\fs22 Microsoft Confidential Draft. Do Not Redistribute.}{\b\fs22 \line }{\i\f5\fs16 \'a9 1997 Microsoft Corporation. All rights reserved.}
  31. \par }{\*\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
  32. \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
  33. {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s26\sa160\widctlpar\brdrb\brdrs\brdrw45\brsp200 \tqr\tx8476 \f4\fs21 {\b\i\f5\fs60\expnd16\expndtw80 Microsoft}{\b\i\f5\fs16\expnd12\expndtw60 \'ae
  34. \line }{\b\i\f5\fs36 Memphis Developer's Release Device Driver Kit}{\fs36
  35. \par }\pard\plain \s28\sb540\sa540\sl-540\slmult0\keepn\widctlpar \f4\fs44 {\fs40 VXDCLNT\emdash Sample Ring-0 HID Device Mapper
  36. \par }\pard\plain \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 \f4\fs19 This document is for informational purposes only. MICROSOFT{\b }MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS DOCUMENT.
  37. \par \pard \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 Microsoft Corporation may have patents o
  38. r pending patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. The furnishing of this document does not give you any license to the patents, trademarks, copyrights, or other intellect
  39. ual property rights except as expressly provided in any written license agreement from Microsoft Corporation.
  40. \par \pard \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 Microsoft does not make any representation or warranty regarding specifications in this document or any product or item developed based on these sp
  41. ecifications. 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,
  42. Microsoft does not make any warranty of any kind that any item developed based on these specifications, or any portion of a specification, will not infringe any copyright, patent, trade secret or other intellectual property right of any person or entity
  43. in
  44. any country. It is your responsibility to seek licenses for such intellectual property rights where appropriate. Microsoft shall not be liable for any damages arising out of or in connection with the use of these specifications, including liability for l
  45. ost 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.
  46. \par \pard \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 ActiveMovie, ActiveVRML, ActiveX, BackOf
  47. fice, Developer Studio, Direct3D, DirectDraw, DirectInput, DirectMIDI, DirectMPEG, DirectMusic, DirectPlay, DirectSound, DirectX, Microsoft, NetMeeting, OpenType, Visual Basic, Visual C++, Win32, Windows, and Windows\~
  48. 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.
  49. \par \pard \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 \'a9\~1997\~Microsoft\~Corporation. All rights reserved.
  50. \par \pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\widctlpar \f4\fs34 \page {\*\bkmkstart _Toc383742559}{\*\bkmkstart _Toc384008987}{\*\bkmkstart _Toc379612476}Introduction{\*\bkmkend _Toc383742559}{\*\bkmkend _Toc384008987}
  51. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 A HID mapper VxD is one which maps I/O to and from a USB HID device (or some other HID-controllable device) to a legacy interface. Memphis includes three such mappers:
  52. \par {\pntext\pard\plain\f1\fs21 \'b7\tab}\pard\plain \s32\fi-360\li360\sa80\widctlpar\tx280{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\f4\fs21 Kbhid.vxd maps keyboard HID reports to Vkd.vxd.
  53. \par {\pntext\pard\plain\f1\fs21 \'b7\tab}Mouhid.vxd maps mouse HID reports to Vmd.vxd.
  54. \par {\pntext\pard\plain\f1\fs21 \'b7\tab}Joyhid.vxd maps HID reports from joysticks and other game devices to Vjoyd.vxd.
  55. \par \pard\plain \s52\qr\sl-160\slmult0\widctlpar \f4\fs12
  56. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The following diagram shows the relationships of these files:
  57. \par \pard \s26\qc\sa160\nowidctlpar {\pard\plain \s26\qc\sa160\nowidctlpar \f4\fs21 {\object\objemb\objw6356\objh3353{\*\objclass }{\*\objdata 01050000020000000f000000576f72642e506963747572652e3800000000000000000000760000
  58. d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  59. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  60. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  61. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  62. fffffffffffffffffdffffff11000000fefffffffeffffff05000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000feffffff29000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e00
  63. 00001f00000020000000feffffff22000000230000002400000025000000260000002700000028000000fefffffffeffffff2b0000002c0000002d0000002e0000002f0000003000000031000000feffffff33000000340000003500000036000000370000003800000039000000feffffffffffffffffffffffffffffff
  64. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  65. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  66. ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff040000000709020000000000c000000000000046000000000000000000000000a0fc
  67. 14a0174cbc0103000000800100000000000001004f006c00650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
  68. 0000000000000000000000001400000000000000030050004900430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0002010100000003000000ffffffff0000000000000000000000000000000000000000000000000000
  69. 00000000000000000000010000004c0000000000000003004d004500540041000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
  70. 000000000000000000000000040000001618000000000000feffffff02000000feffffff04000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  71. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  72. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  73. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
  74. ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0100000200000000000000000000000000000000ffffffff00c0000000600100ffffffff000000000000000000000000000000000000000000000000d002c0214c0000000000000000000800c92b000019170000d3180000180d00000000
  75. 0000000000000000000000000000e8030000e80300000000000000000000000000000000000000000000000000000000000000000000d002c0210000000000000000ee0200002d070000100e00005c0000008e4000008f40000007000000000000000100feff030a0000ffffffff0709020000000000c000000000000046
  76. 170000004d6963726f736f667420576f72642050696374757265000a0000004d53576f7264446f63000f000000576f72642e506963747572652e3800f439b271000000000000000000000000ffffffff000000000000000000000000000000000000000000000300d002c0210000000000000000ee02000036080000100e
  77. 0000640000009b400000a64000000700000000000000ffff0000ffffffff00c0000000600100ffffffff000000000000000000000000000000000000000000000000d002c0210000000000000000ee0200009a080000100e00008b000000a6400000d64000000700000000000000ffff0000ffffffff00c0000000600100
  78. ffffffff000000000000000000000000000000000000000000000000d002c02100000000000000000800c92b19170000010009000003070c000006003a00000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b0200000000050000000c027505580a
  79. 1c000000fb021000070000000000bc02000000000000000253797374656d0000080000000c008a0100000a00060000000c008a0100000a00040000002d0100000500000002010100000007000000fc020000ffffff000000040000002d01010008000000fa0200000700000000000000040000002d0102000c0000002403
  80. 040087031903cf061903cf0665028703650208000000fa0200000000000000000000040000002d01030004000000f001020007000000fc020000ffffff000000040000002d01020004000000f0010100050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01010008000000
  81. fa0200000700000000000000040000002d0104000c000000240304000b071903530a1903530a65020b076502040000002d01030004000000f0010400040000002d01020004000000f001010005000000020101000000050000000201010000001c000000fb02adff0000000000009001000000000400001254696d657320
  82. 4e657720526f6d616e006b7eed77c057ef7701040a6d00000a00040000002d01010005000000090200000000050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000b074504530a4504
  83. 530a91030b079103040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040087034504cf064504cf069103
  84. 87039103040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030045044b0345044b03910303009103
  85. 040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040003007105530a7105530abd040300bd0404000000
  86. 2d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030019034b0319034b03650203006502040000002d010300
  87. 04000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300b700530ab700530a030003000300040000002d01030004000000
  88. f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300ed011b06ed011b06390103003901040000002d01030004000000f0010500
  89. 040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304009306ed01530aed01530a390193063901040000002d01030004000000f001050004000000
  90. 2d01020004000000f0010400050000000201010000000500000002010100000005000000020101000000030000001e000700000016046a05b807c504630205000000020101000000040000002d0101003a000000320ad6049e021f00040000000000580a750548494420436c617373204472697665722028484944434c41
  91. 53532e53595329003c001c003c0015003800170025002000200015003c001c0017002a0025001c0015001c003c001c003c00380033003c002e002e0015002e003c002e001c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604ba0004071500
  92. 170305000000020101000000040000002d01010028000000320a2600b2031300040000000000580a75054c6567616379204170706c69636174696f6e7300330025002a00250025002a0015003c002a002a001700170025002500170017002a002a00200005000000020101000000040000002701ffff0500000002010100
  93. 000005000000020101000000030000001e000700000016040204d40999034f0705000000020101000000040000002d0101001a000000320aaa0396070a00040000000000580a75054a4f594849442e56584420003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff050000000201
  94. 0100000005000000020101000000030000001e00070000001604020450069903cb0305000000020101000000040000002d0101001a000000320aaa0306040a00040000000000580a75054b42444849442e5658443c0038003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff05000000
  95. 02010100000005000000020101000000030000001e000700000016040204cc029903470005000000020101000000040000002d0101001a000000320aaa0379000a00040000000000580a75054d4f554849442e5658444a003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500
  96. 000002010100000005000000020101000000030000001e00070000001604d602cc026d02470005000000020101000000040000002d01010016000000320a7e02c3000700040000000000580a7505564d442e565844003c004a003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100
  97. 000005000000020101000000030000001e00070000001604d6028c066d02cb0305000000020101000000040000002d01010016000000320a7e026c040700040000000000580a7505564b442e565844003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000
  98. 020101000000030000001e00070000001604d602100a6d024f0705000000020101000000040000002d01010019000000320a7e02c2070900040000000000580a7505564a4f59442e565844003c0020003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000
  99. 020101000000030000001e00070000001604c801100a5f014f0705000000020101000000040000002d01010019000000320a7001b6070900040000000000580a750557494e4d4d2e444c4c004f001c003c004a004a0015003c003300330005000000020101000000040000002701ffff0500000002010100000005000000
  100. 020101000000030000001e00070000001604c801ac045f01bf0005000000020101000000040000002d01010017000000320a7001ef010800040000000000580a7505555345522e4558453c002e0033003800150033003c00330005000000020101000000040000002701ffff0500000002010100000008000000fa020000
  101. 0600000000000000040000002d010400050000001402d700a7010500000013022301a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb011c0193011c01a7013901040000002d010200
  102. 04000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009301de00bb01de00a701c100040000002d01020004000000f0010400040000002d01030004000000f001050005000000
  103. 0201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014020302a7010500000013024f02a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000
  104. 24030300bb01480293014802a7016502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030093010a02bb010a02a701ed01040000002d01020004000000
  105. f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f03a7010500000013027b03a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000
  106. fa0200000100000000000000040000002d0105000a00000024030300bb01740393017403a7019103040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300
  107. 93013603bb013603a7011903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b04a701050000001302a704a701040000002d01030004000000f00104000700
  108. 0000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01a0049301a004a701bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa020000
  109. 0100000000000000040000002d0105000a0000002403030093016204bb016204a7014504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b042b0505000000
  110. 1302a7042b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f05a0041705a0042b05bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc02
  111. 0000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170562043f0562042b054504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa020000060000000000
  112. 0000040000002d0104000500000014022f032b050500000013027b032b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f057403170574032b059103040000002d01020004000000f001
  113. 0400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170536033f0536032b051903040000002d01020004000000f0010400040000002d01030004000000f001050005000000020101000000
  114. 0500000002010100000008000000fa0200000600000000000000040000002d01040005000000140203022b050500000013024f022b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f05
  115. 4802170548022b056502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030017050a023f050a022b05ed01040000002d01020004000000f00104000400
  116. 00002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d7002b0505000000130223012b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100
  117. 000000000000040000002d0105000a000000240303003f051c0117051c012b053901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303001705de003f05
  118. de002b05c100040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b04af08050000001302a704af08040000002d01030004000000f001040007000000fc020000
  119. 000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c308a0049b08a004af08bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa020000010000000000
  120. 0000040000002d0105000a000000240303009b086204c3086204af084504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f03af080500000013027b03af08
  121. 040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c30874039b087403af089103040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc02000000000000
  122. 0000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b083603c3083603af081903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa020000060000000000000004000000
  123. 2d0104000500000014020302af080500000013024f02af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c30848029b084802af086502040000002d01020004000000f001040004000000
  124. 2d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b080a02c3080a02af08ed01040000002d01020004000000f0010400040000002d01030004000000f001050005000000020101000000050000000201
  125. 0100000008000000fa0200000600000000000000040000002d010400050000001402d700af080500000013022301af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c3081c019b081c01
  126. af083901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b08de00c308de00af08c100040000002d01020004000000f0010400040000002d010300
  127. 04000000f001050005000000020101000000040000002d01000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  128. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  129. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  130. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  131. 00000000000000000000000000000000000031005400610062006c006500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0002010200000006000000ffffffff00000000000000000000000000000000000000000000000000000000
  132. 0000000000000000120000004b1d000000000000010043006f006d0070004f0062006a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
  133. 0000000000000000000003000000680000000000000003004f0062006a0049006e0066006f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120002010500000008000000ffffffff000000000000000000000000000000000000000000000000
  134. 00000000000000000000000005000000040000000000000057006f007200640044006f00630075006d0065006e007400000000000000000000000000000000000000000000000000000000000000000000000000000000001a000200ffffffffffffffffffffffff00000000000000000000000000000000000000000000
  135. 000000000000000000000000000021000000001000000000000012000f000a0001005b000f00020000000000000024000040f1ff02002400000006004e006f0072006d0061006c0000000200000004006d4809040000000000000000000000000000000000003c004140f2ffa1003c000000160044006500660061007500
  136. 6c0074002000500061007200610067007200610070006800200046006f006e00740000000000000000000000000000000000210000002d00000039000000450000004e000000570000006200000077000000820000008c000000af00000001000000000000000000ffffffff0c0400000000000001000000000000000000
  137. ffffffff0e0400000000000001000000000000000000ffffffff0f0400000000000001000000000000000000ffffffff100400000000000001000000000000000000ffffffff110400000000000001000000000000000000ffffffff120400000000000001000000000000000000ffffffff130400000000000001000000
  138. 000000000000ffffffff0d0400000000000001000000000000000000ffffffff140400000000000001000000000000000000ffffffff150400000000000001000000000000000000ffffffff000000000000000000000000210000002d00000039000000450000004e000000570000006200000077000000820000008c00
  139. 00008f000000000000000000010000000000020000000000030000000000040000000000050000000000060000000000070000000000080000000000090000000000ffff0000000000000000af0000000600000c00000000ffffffff010000000420ffff01000000000000000000af00000000000000000000040000af04
  140. 00000300000000040000af0400000400000000040000ae040000050000000f0000f038000000000006f01800000022040000020000002100000001000000010000002200000040001ef110000000ffff00000000ff0080808000f7000010000f0002f0a2110000100008f00800000021000000210400000f0003f0401100
  141. 000f0004f028000000010009f0100000000000000000000000000000000000000002000af00800000000040000050000000f0004f0c800000002000af00800000002040000000a000023010bf0980000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ff
  142. ffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f0200000200bf032000200005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000017000000000011f0040000
  143. 00010000000f0004f0c800000002000af00800000003040000000a000023010bf0980000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d701020000
  144. 00ff01100010003f0200000200bf032000200005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000019000000000011f004000000010000000f0004f0c200000002000af00800000004040000000a000013010bf0920000004201204e000043
  145. 01204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d164ef24d164e0000000000000000f24d0600080002
  146. 00004000ac040000ac01600080000010f00400000011000000000011f004000000010000000f0004f0c200000002000af00800000005040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100
  147. 000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000012000000000011f004000000010000000f0004f0c200000002000af008
  148. 00000006040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0
  149. ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000014000000000011f004000000010000000f0004f0c200000002000af00800000007040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f010100010080
  150. 01000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d1d4ef24d1d4e0000000000000000f24d060008000200004000ac040000ac01600080000010f004000000100000
  151. 00000011f004000000010000000f0004f0c200000002000af00800000008040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100
  152. 000000d70102000000ff01100010003f020000020005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000013000000000011f004000000010000000f0004f0c200000002000af00800000009040000000a000013010bf0920000004201204e00
  153. 004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d1d4ef24d1d4e0000000000000000f24d060008
  154. 000200004000ac040000ac01600080000010f0040000001f000000000011f004000000010000000f0004f0c200000002000af0080000000a040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c0
  155. 0100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d1b4ef24d1b4e0000000000000000f24d060008000200004000ac040000ac01600080000010f0040000001d000000000011f004000000010000000f0004f0c200000002000a
  156. f0080000000b040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f0200000200050005
  157. 00f0ff0000f24d174ef24d174e0000000000000000f24d060008000200004000ac040000ac01600080000010f0040000001e000000000011f004000000010000000f0004f06c00000012000af0080000000c040000000a000083000bf03000000080000000010081009c31000082009c31000083009c31000084009c3100
  158. 00bf0100001000ff01000008003f0200000200000010f0040000000c000000000011f0040000000100000000000df004000000000001000f0004f06c00000012000af0080000000d040000000a000083000bf03000000080000000080081009c31000082009c31000083009c31000084009c310000bf0100001000ff0100
  159. 0008003f0200000200000010f0040000001a000000000011f0040000000100000000000df004000000000008000f0004f06c00000012000af0080000000e040000000a000083000bf03000000080000000020081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f020000020000
  160. 0010f0040000000d000000000011f0040000000100000000000df004000000000002000f0004f06c00000012000af0080000000f040000000a000083000bf03000000080000000030081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000000e0000
  161. 00000011f0040000000100000000000df004000000000003000f0004f06c00000012000af00800000010040000000a000083000bf03000000080000000040081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000000f000000000011f00400000001
  162. 00000000000df004000000000004000f0004f06c00000012000af00800000011040000000a000083000bf03000000080000000050081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f00400000015000000000011f0040000000100000000000df0040000
  163. 00000005000f0004f06c00000012000af00800000012040000000a000083000bf03000000080000000060081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f00400000016000000000011f0040000000100000000000df004000000000006000f0004f06c
  164. 00000012000af00800000013040000000a000083000bf03000000080000000070081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f00400000018000000000011f0040000000100000000000df004000000000007000f0004f06c00000012000af0080000
  165. 0014040000000a000083000bf03000000080000000090081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000001b000000000011f0040000000100000000000df004000000000009000f0004f06c00000012000af00800000015040000000a000083
  166. 000bf030000000800000000a0081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000001c000000000011f0040000000100000000000df00400000000000a000f0004f05a00000042010af00800000016040000000a000073000bf02a000000d00101
  167. 000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f0040000000b000000000011f004000000010000000f0004f05a00000042010af00800000017040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d5
  168. 01000000003f0200000200000010f0040000000a000000000011f004000000010000000f0004f05a00000042010af00800000018040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000009000000000011f004
  169. 000000010000000f0004f05a00000042010af00800000019040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000008000000000011f004000000010000000f0004f05a00000042010af0080000001a04000000
  170. 0a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000007000000000011f004000000010000000f0004f05a00000042010af0080000001b040000000a000073000bf02a000000d00101000000d10101000000d201000000
  171. 00d30100000000d40100000000d501000000003f0200000200000010f00400000006000000000011f004000000010000000f0004f05a00000042010af0080000001c040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010
  172. f00400000005000000000011f004000000010000000f0004f05a00000042010af0080000001d040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000004000000000011f004000000010000000f0004f05a0000
  173. 0042010af0080000001e040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000003000000000011f004000000010000000f0004f05a00000042010af0080000001f040000000a000073000bf02a000000d00101
  174. 000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000002000000000011f004000000010000000f0004f05a00000042010af00800000020040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d5
  175. 01000000003f0200000200000010f00400000001000000000011f004000000010000000f0004f05a00000042010af00800000021040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000000000000000011f004
  176. 000000010000000f0004f04200000012000af00800000001040000000e000053000bf01e000000bf0100001000cb0100000000ff01000008000403090000003f0301000100000011f00400000001000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b
  177. 0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000af00000021040000d02f000030210000d12f0000512200006a000000000020040000d02f000000240000d1
  178. 2f0000212500006a00000000001f040000d02f0000d0260000d12f0000f12700006a00000000001e040000d02f0000a0290000d12f0000c12a00006a00000000001d040000602700003021000061270000512200006a00000000001c040000602700000024000061270000212500006a00000000001b04000060270000d0
  179. 26000061270000f12700006a00000000001a04000060270000a029000061270000c12a00006a000000000019040000f01e0000a0290000f11e0000c12a00006a000000000018040000f01e0000d0260000f11e0000f12700006a000000000017040000f01e000000240000f11e0000212500006a000000000016040000f0
  180. 1e000030210000f11e0000512200006a00000000000c040000a0200000c02a0000912d0000712c00006a00000000000e040000702c0000f0270000a1320000112900006a00000000000f04000000240000f0270000312a0000112900006a000000000010040000901b0000f0270000c1210000112900006a000000000007
  181. 040000001b0000c02a0000c0330000702c00006a000000000004040000e02b0000f0270000c1330000a02900006a00000000000504000070230000f0270000512b0000a02900006a000000000008040000001b000020250000e1220000d02600006a000000000006040000001b0000f0270000e1220000a02900006a0000
  182. 00000011040000901b000020250000c1210000412600006a0000000000120400000024000020250000c12a0000412600006a0000000000020400007023000020250000502b0000d02600006a400000000013040000702c00002025000031330000412600006a000000000003040000e02b000020250000c0330000d02600
  183. 006a40000000000d04000050220000801f0000e12b0000312100006a000000000014040000702c00009822000031330000b92300006a000000000015040000b01c00009822000041260000b92300006a00000000000a040000001b000050220000a0290000002400006a00000000000b040000c02a000050220000c03300
  184. 00002400006a000000000009040000001b0000691f0000c0330000192100006a00000000000000000021000000ad000000b0000000070007000700ff404850204c617365724a657420355369005c5c6d737072696e74395c636f7270620050434c35454d53004850204c617365724a657420355369004850204c61736572
  185. 4a6574203553690000000000000000000000000000000000000401049400400003770004010001007107df03000001000f0158020100010058020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  186. 0000020000000000000000000000010040004d53554432034850204c617365724a6574203553690000000000000000000000000000000000e50300000f010000250100000000040064000a0000004850204c617365724a657420355369000000000000000000000000000000000000040104940040000377000401000100
  187. 7107df03000001000f01580201000100580204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000010040004d53554432034850204c617365724a65742035536900
  188. 00000000000000000000000000000000e50300000f010000250100000000040064000a000000008001000000000000000000546b74000000000000000000000000000000000000000000021000000000000000af000000600000080040000003000000471690010000020206030504050203040300000000000000000000
  189. 00000000000100000000000000540069006d006500730020004e0065007700200052006f006d0061006e00000035169001020005050102010706020507000000000000001000000000000000000000008000000000530079006d0062006f006c000000332690010000020b06040202020202040300000000000000000000
  190. 0000000000010000000000000041007200690061006c00000022000400f10888180000d0020000680100000000af8d1406b89014a600000000030001000000040000001b00000001000100000004008310010000000000000000000000010001000000010000000000000021030000008400000000000000000000000000
  191. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  192. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  193. 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a506c007b400b4008000123000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  194. 00000000000000000000000000000002000000cd01ffff120000000000000000000000000000000c00440065006e0079007300200048006f00770061007200640002006500700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  195. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  196. 0000000000000000000000000000000000000000eca5c1004700090400000012bf000000000000100000000000040000af0400000e00626a626a66da66da000000000000000000000000000000000000090416001e0c000004b0010004b001002100000000000000000000000000000000000000000000008d0000000000
  197. 0000ffff0f000000000000000000ffff0f000000000000000000ffff0f00000000000000000000000000000000005d00000000009200000000000000920000009200000000000000920000000000000026020000000000002602000000000000260200001400000000000000000000005602000000000000560200000000
  198. 000056020000000000005602000000000000560200000c000000620200000c00000056020000000000005b1a0000b60000007a020000000000007a020000000000007a020000000000007a020000000000007a020000000000002918000000000000291800000000000029180000000000003f1800000200000041180000
  199. 00000000411800000000000041180000390000007a180000d40000004e190000d4000000221a000024000000111b0000f4010000051d000046000000461a00001500000000000000000000000000000000000000260200000000000029180000000000000000000000000000000000000000000065140000c40300002918
  200. 00000000000029180000000000002918000000000000461a0000000000003f18000000000000920000000000000092000000000000007a0200000000000000000000000000007a020000eb1100007a020000000000003f180000000000003f180000000000003f1800000000000029180000160000009200000022010000
  201. 7a0200000000000026020000000000007a020000000000003f18000000000000000000000000000000000000000000003a0200000e000000480200000e000000920000000000000092000000000000009200000000000000920000000000000029180000000000003f180000000000003f180000000000003f1800000000
  202. 000000000000000000003f18000000000000b401000072000000260200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f180000000000007a020000000000006e0200000c00000040d2a1f4de4bbc0156020000
  203. 0000000056020000000000003f180000000000003f180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  204. 00000000000000000000000000000000000000000000000000000000000000000000000008080808080808080808080808080808080808080808080808080808080808080d48494420436c617373204472697665722028484944434c4153532e535953290d0d4a4f594849442e5658440d0d4b42444849442e5658440d0d
  205. 4d4f554849442e5658440d0d564d442e5658440d0d564b442e5658440d0d564a4f59442e5658440d0d4c6567616379204170706c69636174696f6e730d0d57494e4d4d2e444c4c0d0d555345522e4558450d0d0d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000
  206. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  207. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  208. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000020040000af040000f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  209. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  210. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  211. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  212. 0000000000000000000000000000000000000000000000000000000000000000000000000d036a000000005508016d4800040002000400002104000041040000420400004d0400004e040000590400005a04000065040000660400006e0400006f040000770400007804000082040000830400009704000098040000a204
  213. 0000a3040000ac040000ad040000ae040000af040000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000
  214. fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa0000000000000000
  215. 00000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  216. 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000324010001000000170004000021040000ae040000fefe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  217. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  218. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  219. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  220. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101021c001fb0c04e20b0c04e21b0f81a22b0f71a2390611f2490482225b0000000000000000000000000000000000000000000000000000000000000
  221. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  222. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  223. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  224. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  225. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  226. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  227. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  228. 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500530075006d006d0061007200790049006e0066006f0072006d006100740069006f006e0000000000
  229. 00000000000000000000000000000000000000000000280002010700000009000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000002a0000000010000000000000050044006f00630075006d0065006e007400530075006d006d0061007200790049006e0066006f00
  230. 72006d006100740069006f006e000000000000000000000038000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000003200000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  231. 000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  232. 0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feff0000040a02000000000000000000000000000000000001000000e0859ff2f94f
  233. 6810ab9108002b27b3d9300000007c01000012000000010000009800000002000000a000000003000000ac00000004000000b800000005000000d000000006000000dc00000007000000e800000008000000f8000000090000000401000012000000100100000a0000002c0100000b000000380100000c00000044010000
  234. 0d000000500100000e0000005c0100000f00000064010000100000006c010000130000007401000002000000e40400001e00000001000000000073001e00000001000000000073001e0000000d00000044656e797320486f7761726400006f001e0000000100000000656e791e0000000100000000656e791e0000000700
  235. 00004e6f726d616c006f1e000000030000006570006d1e000000020000003300006d1e000000130000004d6963726f736f667420576f726420382e300000400000000046c32300000000400000000000000000000000400000000022fceebb4bbc01400000000038ebb7de4bbc0103000000010000000300000004000000
  236. 030000001b00000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  237. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  238. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  239. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  240. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  241. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  242. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  243. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  244. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  245. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  246. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  247. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  248. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  249. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  250. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  251. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  252. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  253. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  254. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  255. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  256. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  257. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  258. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  259. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  260. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  261. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  262. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  263. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  264. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  265. 000000000000000000000000000000000000000000000000000000000000feff0000040a0200000000000000000000000000000000000200000002d5cdd59c2e1b10939708002b2cf9ae4400000005d5cdd59c2e1b10939708002b2cf9ae600100001c0100000d00000001000000700000000f0000007800000004000000
  266. 9800000005000000a000000006000000a800000011000000b000000017000000b80000000b000000c000000010000000c800000013000000d000000016000000d80000000d000000e00000000c000000ed00000002000000e40400001e000000160000004d6963726f736f667420436f72706f726174696f6e0031000300
  267. 0000002e000003000000010000000300000001000000030000002100000003000000b30d08000b000000000000000b000000000000000b000000000000000b000000000000001e1000000100000001000000000c100000040000001e000000060000005469746c650003000000010000001e000000010000000003000000
  268. 00000000980000000300000000000000200000000100000036000000020000003e00000001000000020000000a0000005f5049445f475549440002000000e4040000410000004e0000007b00350045003500370043003700320030002d0042003700390037002d0031003100440030002d0042003600420038002d003000
  269. 300041004100300030003600460046004500440036007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  270. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  271. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  272. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  273. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  274. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  275. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  276. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  277. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  278. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  279. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  280. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  281. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  282. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  283. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  284. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  285. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  286. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  287. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  288. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  289. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  290. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  291. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  292. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  293. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  294. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  295. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  296. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  297. 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}{\result {\fs20
  298. {\pict\wmetafile8\picw11210\pich5913\picwgoal6355\pichgoal3352
  299. 010009000003070c000006003a00000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b0200000000050000000c027505580a1c000000fb021000070000000000bc02000000000000000253797374656d0000080000000c008a0100000a00060000000c
  300. 008a0100000a00040000002d0100000500000002010100000007000000fc020000ffffff000000040000002d01010008000000fa0200000700000000000000040000002d0102000c0000002403040087031903cf061903cf0665028703650208000000fa0200000000000000000000040000002d01030004000000f0010200
  301. 07000000fc020000ffffff000000040000002d01020004000000f0010100050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01010008000000fa0200000700000000000000040000002d0104000c000000240304000b071903530a1903530a65020b076502040000002d0103
  302. 0004000000f0010400040000002d01020004000000f001010005000000020101000000050000000201010000001c000000fb02adff0000000000009001000000000400001254696d6573204e657720526f6d616e006b7eed77c057ef7701040a6d00000a00040000002d010100050000000902000000000500000002010100
  303. 00000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000b074504530a4504530a91030b079103040000002d01030004000000f0010500040000002d01020004000000f001040005000000020101000000050000
  304. 0002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040087034504cf064504cf06910387039103040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100
  305. 000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030045044b0345044b03910303009103040000002d01030004000000f0010500040000002d01020004000000f00104000500000002010100000005000000020101000000070000
  306. 00fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040003007105530a7105530abd040300bd04040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000
  307. ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030019034b0319034b03650203006502040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff0000
  308. 00040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300b700530ab700530a030003000300040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff00000004000000
  309. 2d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300ed011b06ed011b06390103003901040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008
  310. 000000fa0200000700000000000000040000002d0105000c000000240304009306ed01530aed01530a390193063901040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000005000000020101000000030000001e000700000016046a05b807c504
  311. 630205000000020101000000040000002d0101003a000000320ad6049e021f00040000000000580a750548494420436c617373204472697665722028484944434c4153532e53595329003c001c003c0015003800170025002000200015003c001c0017002a0025001c0015001c003c001c003c00380033003c002e002e0015
  312. 002e003c002e001c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604ba0004071500170305000000020101000000040000002d01010028000000320a2600b2031300040000000000580a75054c6567616379204170706c69636174696f6e7300
  313. 330025002a00250025002a0015003c002a002a001700170025002500170017002a002a00200005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e000700000016040204d40999034f0705000000020101000000040000002d0101001a000000320aaa0396070a0004
  314. 0000000000580a75054a4f594849442e56584420003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604020450069903cb0305000000020101000000040000002d0101001a000000320aaa0306040a00
  315. 040000000000580a75054b42444849442e5658443c0038003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e000700000016040204cc029903470005000000020101000000040000002d0101001a000000320aaa0379000a
  316. 00040000000000580a75054d4f554849442e5658444a003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604d602cc026d02470005000000020101000000040000002d01010016000000320a7e02c300
  317. 0700040000000000580a7505564d442e565844003c004a003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604d6028c066d02cb0305000000020101000000040000002d01010016000000320a7e026c0407000400000000
  318. 00580a7505564b442e565844003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604d602100a6d024f0705000000020101000000040000002d01010019000000320a7e02c2070900040000000000580a7505564a
  319. 4f59442e565844003c0020003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604c801100a5f014f0705000000020101000000040000002d01010019000000320a7001b6070900040000000000580a750557494e
  320. 4d4d2e444c4c004f001c003c004a004a0015003c003300330005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604c801ac045f01bf0005000000020101000000040000002d01010017000000320a7001ef010800040000000000580a750555534552
  321. 2e4558453c002e0033003800150033003c00330005000000020101000000040000002701ffff0500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d700a7010500000013022301a701040000002d01030004000000f001040007000000fc020000000000000000040000002d
  322. 01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb011c0193011c01a7013901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00
  323. 0000240303009301de00bb01de00a701c100040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014020302a7010500000013024f02a701040000002d01030004000000f0
  324. 01040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01480293014802a7016502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000
  325. fa0200000100000000000000040000002d0105000a0000002403030093010a02bb010a02a701ed01040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f03a70105
  326. 00000013027b03a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01740393017403a7019103040000002d01020004000000f0010400040000002d01030004000000f001050007000000
  327. fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030093013603bb013603a7011903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000
  328. 000000040000002d0104000500000014025b04a701050000001302a704a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01a0049301a004a701bd04040000002d01020004000000f001
  329. 0400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030093016204bb016204a7014504040000002d01020004000000f0010400040000002d01030004000000f00105000500000002010100000005
  330. 00000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b042b05050000001302a7042b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f05a004
  331. 1705a0042b05bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170562043f0562042b054504040000002d01020004000000f0010400040000002d
  332. 01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f032b050500000013027b032b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa020000010000000000
  333. 0000040000002d0105000a000000240303003f057403170574032b059103040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170536033f0536032b0519
  334. 03040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d01040005000000140203022b050500000013024f022b05040000002d01030004000000f001040007000000fc020000000000000000
  335. 040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f054802170548022b056502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d
  336. 0105000a0000002403030017050a023f050a022b05ed01040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d7002b0505000000130223012b05040000002d010300
  337. 04000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f051c0117051c012b053901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d0104
  338. 0008000000fa0200000100000000000000040000002d0105000a000000240303001705de003f05de002b05c100040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402
  339. 5b04af08050000001302a704af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c308a0049b08a004af08bd04040000002d01020004000000f0010400040000002d01030004000000f00105
  340. 0007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b086204c3086204af084504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa020000
  341. 0600000000000000040000002d0104000500000014022f03af080500000013027b03af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c30874039b087403af089103040000002d01020004
  342. 000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b083603c3083603af081903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201
  343. 010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014020302af080500000013024f02af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303
  344. 00c30848029b084802af086502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b080a02c3080a02af08ed01040000002d01020004000000f0010400
  345. 040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d700af080500000013022301af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa02000001
  346. 00000000000000040000002d0105000a00000024030300c3081c019b081c01af083901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b08de00c308
  347. de00af08c100040000002d01020004000000f0010400040000002d01030004000000f001050005000000020101000000040000002d010000030000000000000000000000000000000000000000}}}}}
  348. \par \pard \s26\sa160\nowidctlpar
  349. Note that this diagram is simplified to show only the flow that occurs when legacy applications require the services of HID-enabled devices. The presence of the legacy device drivers, for example, means that a legacy device minidriver can co-exist with th
  350. is HID architecture. And HID-aware applications can take a more direct path to the HID Class Driver.
  351. \par The VXDCLNT files comprise a nearly-complete code outline for a HID mapper VxD. The source code is fairly self-explanatory through comments. Use code from the sample to create your own VxD mapper. Search for the string \ldblquote <<COMPLETE>>\rdblquote
  352. to identify sections requiring device-specific code, which you will need to provide.
  353. \par \pard \s26\sa160\nowidctlpar This paper describes kernel routines that must be used by a HID mapper VxD. It also covers some programming considerations specific to this sort of driver.
  354. \par \pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\tx720 \f4\fs34 HID Mapper Implementation
  355. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The basic activity of VXDCLNT is fairly simple.
  356. \par \pard \s26\sa160\nowidctlpar Whenever a device is plugged in (i.e
  357. . VXDCLNT.VXD gets the SYS_DYNAMIC_DEVICE_INIT or PNP_NEW_DEVNODE message), it checks for new devices by calling ConnectNTDeviceDrivers(). This dispatches WorkItemCallback_Open() on a worker thread (see Programming Considerations for a discussion of work
  358. items) which invokes IoGetDeviceClassAssociations() to get a list of available devices. VXDCLNT opens these devices in turn via _NtKernCreateFile() and uses IOCTL calls to query each device in order to determine if the device is one that VXDCLNT wants to
  359. control.
  360. \par \pard \s26\sa160\nowidctlpar If VXDCLNT is not interested in the device, the device is promptly closed. Otherwise, VXDCLNT builds a {\i deviceContext}
  361. context for the device and does an initial read on the device via NtKernReadFile(). NtKernReadFile() has an asynchronous behavior \endash
  362. the read data is returned via a callback routine, which in VXDCLNT is ReadCompletion(). ReadCompletion() processes a devic
  363. e report as follows: it uses HIDPARSE functions to parse meaningful values out of the report and then calls some legacy driver to act
  364. on the new device state. ReadCompletion() then dispatches another worker thread to do the next read via another NtKernReadFile() call.
  365. \par \pard \s26\sa160\nowidctlpar
  366. If a read ever fails the mapper must close the device and then try to re-open it. If the mapper ever gets a SYS_DYNAMIC_DEVICE_EXIT message, it must wait for all reads to complete, then close all devices, free all resources, and exit.
  367. \par \pard \s26\sa160\nowidctlpar That\rquote s it. That\rquote s the entire behavior of a HID mapper.
  368. \par \pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\tx720 \f4\fs34 Kernel Functions
  369. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 This section describes kernel support routines for Ring-0 HID mapper V
  370. xDs. A mapper must explicitly import some of its kernel support routines; others get imported implicitly by libraries in the Memphis DDK. See the GetImportFunctionPtrs() function in VXDCLNT.C for an example of how to explicitly import functions. Prototype
  371. s for the support routines are given below.
  372. \par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 NTKERN.VXD functions
  373. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The following functions are imported from NTKERN.VXD.
  374. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 IoGetDeviceClassAssociations
  375. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Returns a list of symbolic names of devices, which are usable as file names for _NtKernCreateFile().
  376. \par \pard\plain \s31\sl-220\slmult0\keep\widctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS IoGetDeviceClassAssociations (
  377. \par \tab IN LPGUID\tab \tab \tab ClassGuid,
  378. \par \tab IN PDEVICE_OBJECT\tab PhysicalDeviceObject OPTIONAL,
  379. \par \tab IN ULONG\tab \tab \tab \tab Flags,
  380. \par \tab OUT PWSTR\tab \tab \tab *SymbolicLinkList
  381. \par \tab );
  382. \par
  383. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  384. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ClassGuid
  385. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass in address of GUID_CLASS_INPUT, defined in HIDCLASS.H.
  386. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PhysicalDeviceObject
  387. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optional. Pass NULL
  388. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Flags
  389. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 None currently defined. Pass 0.
  390. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i SymbolicLinkList
  391. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives a pointer to a wide-char unicode-NULL separated multi-string of symbolic links to HID devices. The string is terminated by a double unicode-NULL
  392. \par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernCloseFile
  393. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Closes an open device.
  394. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS _NtKernCloseFile(
  395. \par \tab IN HANDLE FileHandle
  396. \par \tab );
  397. \par
  398. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  399. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle}{\fs16
  400. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile.
  401. \par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernCreateFile
  402. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Opens a device using a symbolic link.
  403. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS NtKernCreateFile(
  404. \par \tab PHANDLE\tab \tab \tab \tab FileHandle,
  405. \par \tab ACCESS_MASK\tab \tab \tab DesiredAccess,
  406. \par \tab POBJECT_ATTRIBUTES\tab ObjectAttributes,
  407. \par \tab PIO_STATUS_BLOCK \tab IoStatusBlock,
  408. \par \tab PLARGE_INTEGER \tab \tab AllocationSize,
  409. \par \tab ULONG \tab \tab \tab \tab FileAttributes,
  410. \par \tab ULONG \tab \tab \tab \tab ShareAccess,
  411. \par \tab ULONG \tab \tab \tab \tab CreateDisposition,
  412. \par \tab ULONG \tab \tab \tab \tab CreateOptions,
  413. \par \tab PVOID \tab \tab \tab \tab EaBuffer,
  414. \par \tab ULONG \tab \tab \tab \tab EaLength
  415. \par \tab );
  416. \par
  417. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  418. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle}{\fs16
  419. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives a handle to the open file/device.
  420. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i DesiredAccess}{\fs16
  421. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Bitmask describing requested access rights. The bits are defined in WDM.H. Typical for mappers is (GENERIC_READ | SYNCHRONIZE | FILE_READ_ATTRIBUTES).
  422. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ObjectAttributes}
  423. \par \pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Address of structure initialized with a symbolic link name using InitializeObjectAttributes(). See the sample.
  424. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock}{\fs16
  425. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Address of structure to receive status information.
  426. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i AllocationSize}{\fs16
  427. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass NULL.
  428. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileAttributes}
  429. \par \pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A FILE_ATTRIBUTE_xxx value defined in WDM.H. Use FILE_ATTRIBUTE_NORMAL.
  430. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ShareAccess}
  431. \par \pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Bitmask describing sharing behavior. Use (FILE_SHARE_READ | FILE_SHARE_WRITE) to allow both read and write sharing.
  432. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i CreateDisposition}{\fs16
  433. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Type of creation. Use FILE_OPEN.
  434. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i CreateOptions}{\fs16
  435. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass 0.
  436. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i EaBuffer}{\fs16
  437. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optional. Pass NULL.
  438. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i EaLength}{\fs16
  439. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass 0.
  440. \par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernDeviceIoControl
  441. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Passes an IOCTL to query a device.
  442. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS _NtKernDeviceIoControl(
  443. \par \tab IN\tab HANDLE\tab \tab \tab \tab FileHandle,
  444. \par \tab IN\tab HANDLE\tab \tab \tab \tab Event OPTIONAL,
  445. \par \tab IN\tab PIO_APC_ROUTINE\tab \tab ApcRoutine OPTIONAL,
  446. \par \tab IN\tab PVOID\tab \tab \tab \tab ApcContext OPTIONAL,
  447. \par \tab OUT\tab PIO_STATUS_BLOCK\tab \tab IoStatusBlock,
  448. \par \tab IN\tab ULONG\tab \tab \tab \tab IoControlCode,
  449. \par \tab IN\tab PVOID\tab \tab \tab \tab InputBuffer OPTIONAL,
  450. \par \tab IN\tab ULONG\tab \tab \tab \tab InputBufferLength,
  451. \par \tab OUT\tab PVOID\tab \tab \tab \tab OutputBuffer OPTIONAL,
  452. \par \tab IN\tab ULONG\tab \tab \tab \tab OutputBufferLength
  453. \par \tab );
  454. \par
  455. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  456. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle
  457. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile
  458. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Event
  459. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Only used if blocking a thread on this read. Pass NULL in most cases.
  460. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcRoutine
  461. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optional completion routine. Pass NULL, since IOCTLs are synchronous and don\rquote t require a callback.
  462. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcContext
  463. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Context for completion routine. Pass 0.
  464. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock
  465. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to an IO_STATUS_BLOCK structure, which receives status information about the call.
  466. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoControlCode
  467. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 IOCTL code. Of interest to HID mappers are:
  468. \par \pard \s30\fi520\li200\sa80\nowidctlpar IOCTL_HID_GET_COLLECTION_INFORMATION
  469. \par \pard \s30\li200\sa80\nowidctlpar \tab \tab Initializes HID_COLLECTION_INFORMATION structure.
  470. \par \pard \s30\fi520\li200\sa80\nowidctlpar IOCTL_HID_GET_COLLECTION_DESCRIPTOR
  471. \par \pard \s30\li200\sa80\nowidctlpar \tab \tab Initializes HIDP_PREPARSED_DATA structure.
  472. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i InputBuffer
  473. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 No input data is required for the IOCTLs that HID mappers commonly use. Pass NULL.
  474. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i InputBufferLength
  475. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Length of InputBuffer in bytes. Pass 0 if not passing InputBuffer.
  476. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i OutputBuffer
  477. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to buffer which receives data.
  478. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i OutputBufferLength
  479. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Length of OutputBuffer in bytes.
  480. \par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernReadFile
  481. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Reads a raw report from a device.
  482. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS _NtKernReadFile(
  483. \par \tab IN\tab HANDLE\tab \tab \tab \tab FileHandle,
  484. \par \tab IN\tab HANDLE\tab \tab \tab \tab Event OPTIONAL,
  485. \par \tab IN\tab PIO_APC_ROUTINE\tab \tab ApcRoutine OPTIONAL,
  486. \par \tab IN\tab PVOID\tab \tab \tab \tab ApcContext OPTIONAL,
  487. \par \tab OUT\tab PIO_STATUS_BLOCK\tab \tab IoStatusBlock,
  488. \par \tab OUT\tab PVOID\tab \tab \tab \tab Buffer,
  489. \par \tab IN\tab ULONG\tab \tab \tab \tab Length,
  490. \par \tab IN\tab PLARGE_INTEGER\tab \tab ByteOffset OPTIONAL,
  491. \par \tab IN\tab PULONG\tab \tab \tab \tab Key OPTIONAL
  492. \par \tab );
  493. \par
  494. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  495. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle
  496. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile
  497. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Event
  498. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Only used if blocking a thread on this read. Pass NULL in most cases.
  499. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcRoutine
  500. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Read completion routine which is called with the result of the read. The completion routine has the following prototype:
  501. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 \tab VOID ReadCompletion(
  502. \par \tab \tab IN PVOID\tab \tab \tab \tab Context,
  503. \par \tab \tab IN PIO_STATUS_BLOCK\tab IoStatusBlock,
  504. \par \tab \tab IN ULONG\tab \tab \tab \tab Reserved
  505. \par \tab \tab );
  506. \par
  507. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcContext
  508. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Context to be passed to the completion routine. VXDCLNT passes a pointer to its device context here.
  509. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock
  510. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a static IO_STATUS_BLOCK structure to receive status information for the read call.
  511. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Buffer
  512. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a static buffer that receives a raw report from the device.
  513. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Length
  514. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Length of the device\rquote s read report. Pass the InputReportByteLength field of the HIDP_CAPS structure returned by HidP_GetCaps().
  515. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ByteOffset
  516. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a LARGE_INTEGER indicating the offset within the \ldblquote file\rdblquote at which to start reading. For a device, always pass a pointer to a LARGE_INTEGER initialized to zero.
  517. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Key
  518. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optionally specifies a key to be used if there are locks associated with the file. Pass NULL in most cases.
  519. \par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernWriteFile
  520. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Writes a raw report to a device.
  521. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS _NtKernWriteFile(
  522. \par \tab IN\tab HANDLE\tab \tab \tab \tab FileHandle,
  523. \par \tab IN\tab HANDLE\tab \tab \tab \tab Event OPTIONAL,
  524. \par \tab IN\tab PIO_APC_ROUTINE\tab \tab ApcRoutine OPTIONAL,
  525. \par \tab IN\tab PVOID\tab \tab \tab \tab ApcContext OPTIONAL,
  526. \par \tab OUT\tab PIO_STATUS_BLOCK\tab \tab IoStatusBlock,
  527. \par \tab IN\tab PVOID\tab \tab \tab \tab Buffer,
  528. \par \tab IN\tab ULONG\tab \tab \tab \tab Length,
  529. \par \tab IN\tab PLARGE_INTEGER\tab \tab ByteOffset OPTIONAL,
  530. \par \tab IN\tab PULONG\tab \tab \tab \tab Key OPTIONAL
  531. \par \tab );
  532. \par
  533. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  534. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle
  535. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile
  536. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Event
  537. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Only used if blocking a thread on this read. Pass NULL in most cases.
  538. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcRoutine
  539. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optional write completion routine. You probably don\rquote t need one and can just pass NULL, as does VXDCLNT. Otherwise, pass a function with the following prototype:
  540. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 \tab VOID WriteCompletion(
  541. \par \tab \tab IN PVOID\tab \tab \tab \tab Context,
  542. \par \tab \tab IN PIO_STATUS_BLOCK\tab IoStatusBlock,
  543. \par \tab \tab IN ULONG\tab \tab \tab \tab Reserved);
  544. \par
  545. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcContext
  546. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Context for write completion routine.
  547. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock
  548. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a static IO_STATUS_BLOCK structure to receive status information for the read call.
  549. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Buffer
  550. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a buffer containing the raw report to be written to the device.
  551. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Length
  552. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Length of the report in bytes.
  553. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ByteOffset
  554. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a LARGE_INTEGER indicating the offset within the \ldblquote file\rdblquote at which to start writing. For a device, always pass a pointer to a LARGE_INTEGER initialized to zero.
  555. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Key
  556. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optionally specifies a key to be used if there are locks associated with the file. Pass NULL in most cases.
  557. \par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 HIDPARSE.SYS functions
  558. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The following functions are imported from HIDPARSE.SYS.
  559. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetCaps
  560. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves capabilities information for a device.
  561. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS HidP_GetCaps (
  562. \par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
  563. \par \tab OUT\tab \tab PHIDP_CAPS\tab \tab \tab \tab Capabilities
  564. \par \tab );
  565. \par
  566. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  567. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData}{\fs16
  568. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
  569. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Capabilities
  570. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives device capabilities information.
  571. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetUsages\tab
  572. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves usage information for a device.
  573. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS HidP_GetUsages (
  574. \par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
  575. \par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
  576. \par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
  577. \par \tab OUT\tab \tab USAGE\tab \tab \tab \tab \tab *UsageList,
  578. \par \tab IN OUT\tab ULONG\tab \tab \tab \tab \tab *UsageLength,
  579. \par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
  580. \par \tab IN\tab \tab PCHAR\tab \tab \tab \tab \tab Report,
  581. \par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
  582. \par \tab );
  583. \par
  584. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  585. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
  586. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
  587. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage
  588. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
  589. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection
  590. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
  591. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageList
  592. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives list of values.
  593. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageLength
  594. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Before call: length of UsageList (number of usages). After call: number of usages written to UsageList.
  595. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
  596. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
  597. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report
  598. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
  599. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength
  600. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
  601. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetUsageValue
  602. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves current values associated with specific usages on a device.
  603. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS HidP_GetUsageValue (
  604. \par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
  605. \par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
  606. \par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
  607. \par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab Usage,
  608. \par \tab OUT\tab \tab PULONG\tab \tab \tab \tab \tab UsageValue,
  609. \par \tab IN\tab \tab PHIDP_PREPARSED_DATA \tab PreparsedData,
  610. \par \tab IN\tab \tab PCHAR\tab \tab \tab \tab \tab Report,
  611. \par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
  612. \par \tab );
  613. \par
  614. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  615. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType}{\fs16 -
  616. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
  617. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage}{\fs16 -
  618. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
  619. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection}{\fs16 -
  620. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
  621. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Usage}{\fs16 -
  622. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 HID_USAGE_xxx value from HIDUSAGE.H.
  623. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageValue}{\fs16 -
  624. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives usage value.
  625. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData}{\fs16 -
  626. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
  627. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report}{\fs16 -
  628. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
  629. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength}{\fs16 -
  630. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
  631. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_SetUsages
  632. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Sends a raw report to a device, along with a list of usages as context.
  633. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS HidP_SetUsages (
  634. \par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
  635. \par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
  636. \par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
  637. \par \tab IN\tab \tab PUSAGE\tab \tab \tab \tab \tab UsageList,
  638. \par \tab IN OUT\tab PULONG\tab \tab \tab \tab \tab UsageLength,
  639. \par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
  640. \par \tab IN OUT\tab PCHAR\tab \tab \tab \tab \tab Report,
  641. \par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
  642. \par \tab );
  643. \par
  644. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  645. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType}{\fs16
  646. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
  647. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage}{\fs16
  648. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
  649. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection}{\fs16
  650. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
  651. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageList}{\fs16
  652. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 List of values.
  653. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageLength}{\fs16
  654. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Before a call: length of UsageList (number of usages). After a call: number of usages consumed.
  655. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
  656. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
  657. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report
  658. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
  659. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength}{\fs16
  660. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
  661. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetScaledUsageValue
  662. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves current values associated with specific usages on a device, as does HidP_GetUsageValue, but does scaling if the device has both physical and logical min/max defined.
  663. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS HidP_GetScaledUsageValue (
  664. \par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
  665. \par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
  666. \par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
  667. \par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab Usage,
  668. \par \tab OUT\tab \tab PLONG\tab \tab \tab \tab \tab UsageValue,
  669. \par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
  670. \par \tab IN\tab \tab PCHAR\tab \tab \tab \tab \tab Report,
  671. \par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
  672. \par \tab );
  673. \par
  674. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  675. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
  676. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
  677. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage
  678. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
  679. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection
  680. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
  681. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Usage
  682. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 HID_USAGE_xxx value from HIDUSAGE.H.
  683. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageValue
  684. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives usage value.
  685. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
  686. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
  687. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report
  688. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
  689. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength
  690. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
  691. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_MaxUsageListLength
  692. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves the number of usages of a given type on a device.
  693. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 ULONG HidP_MaxUsageListLength (
  694. \par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
  695. \par \tab IN\tab \tab USAG\tab \tab \tab \tab \tab \tab UsagePage,
  696. \par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData
  697. \par \tab );
  698. \par
  699. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  700. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
  701. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
  702. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage
  703. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
  704. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
  705. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
  706. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetValueCaps
  707. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves capabilities information for a device.
  708. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 NTSTATUS HidP_GetValueCaps (
  709. \par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
  710. \par \tab OUT\tab \tab PHIDP_VALUE_CAPS\tab \tab \tab ValueCaps,
  711. \par \tab IN OUT\tab PULON\tab \tab \tab \tab \tab ValueCapsLength,
  712. \par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData
  713. \par \tab );{\*\bkmkend _Toc379612476}
  714. \par
  715. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  716. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
  717. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
  718. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ValueCaps
  719. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to array of HIDP_VALUE_CAPS structures To receive capabilities information for device.
  720. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ValueCapsLength
  721. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Before call: number of HIDP_VALUE_CAPS stuctures pointed to by ValueCaps. After call: number of structures used.
  722. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
  723. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
  724. \par \pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar \f4\fs34 Programming Considerations
  725. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 In order to avoid doing I/O on NTKERN\rquote s thread, a mapper should queue its I/O tasks and execute them on \ldblquote worker\rdblquote
  726. threads. See the sample code to clarify where this is appropriate. The system provides the following support routines for work items.
  727. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 ExInitializeWorkItem
  728. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Initializes a work item.
  729. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 VOID ExInitializeWorkItem(\tab
  730. \par \tab WORK_QUEUE_ITEM\tab *workItem,
  731. \par \tab PVOID\tab \tab \tab callback,
  732. \par \tab PVOID\tab \tab \tab context
  733. \par \tab );
  734. \par
  735. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  736. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i workItem
  737. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to work item structure to be initialized.
  738. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i callback
  739. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 callback function with the following prototype:
  740. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 \tab \tab PVOID callbackFunction(PVOID context);
  741. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i context
  742. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 User-definable context to be passed to callback routine.
  743. \par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 NtKernQueueWorkItem
  744. \par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Queues a work item. Use this function instead of ExQueueWorkItem().
  745. \par \pard\plain \s31\sl-220\slmult0\nowidctlpar\tx390\tx780\tx1170\tx1560\tx1950\tx2340\tx2730\tx3120\tx3510\tx3900\tx4290\tx4680\tx5070\tx5460\tx5850\tx6240\tx6630 \f11\fs16 VOID _NtKernQueueWorkItem(
  746. \par \tab WORK_QUEUE_ITEM\tab *workItem,
  747. \par \tab WORK_QUEUE_TYPE\tab workQueueType
  748. \par \tab );
  749. \par
  750. \par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
  751. \par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i workItem
  752. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to initialized work item.
  753. \par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i workQueueType
  754. \par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 The priority of the work queue on which this item is to be queued. Use DelayedWorkQueue for most devices. Using Critic
  755. alWorkQueue or any of the other queues may hurt system performance although it will give the work item higher priority. Microsoft very strongly recommends that you use DelayedWorkQueue.
  756. \par }