756 lines
118 KiB
Plaintext
756 lines
118 KiB
Plaintext
{\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;}}
|
|
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
|
|
\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar \f4\fs20 \snext0 Normal;}{\s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar \f4\fs34 \sbasedon0\snext0
|
|
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;}{
|
|
\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
|
|
\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
|
|
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;}{
|
|
\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
|
|
\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;}{
|
|
\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
|
|
\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
|
|
\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;}{
|
|
\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;}{
|
|
\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
|
|
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;}{
|
|
\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
|
|
\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
|
|
\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;}{
|
|
\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}
|
|
{\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}}
|
|
\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
|
|
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 {
|
|
\b\f5\fs18 page }}{\fldrslt {\b\f5\fs18\lang1024 12}}}{\b\f5\fs18
|
|
\par }\pard \s22\widctlpar\tqc\tx4320\tqr\tx8640
|
|
\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 }
|
|
{\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
|
|
\par }\pard \s22\widctlpar\tqc\tx4320\tqr\tx8640
|
|
\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
|
|
\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.}
|
|
\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.}
|
|
\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
|
|
\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang
|
|
{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \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
|
|
\line }{\b\i\f5\fs36 Memphis Developer's Release Device Driver Kit}{\fs36
|
|
\par }\pard\plain \s28\sb540\sa540\sl-540\slmult0\keepn\widctlpar \f4\fs44 {\fs40 VXDCLNT\emdash Sample Ring-0 HID Device Mapper
|
|
\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.
|
|
\par \pard \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 Microsoft Corporation may have patents o
|
|
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
|
|
ual property rights except as expressly provided in any written license agreement from Microsoft Corporation.
|
|
\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
|
|
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,
|
|
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
|
|
in
|
|
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
|
|
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.
|
|
\par \pard \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 ActiveMovie, ActiveVRML, ActiveX, BackOf
|
|
fice, Developer Studio, Direct3D, DirectDraw, DirectInput, DirectMIDI, DirectMPEG, DirectMusic, DirectPlay, DirectSound, DirectX, Microsoft, NetMeeting, OpenType, Visual Basic, Visual C++, Win32, Windows, and Windows\~
|
|
NT are trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries. Other product and company names mentioned herein may be the trademarks of their respective owners.
|
|
\par \pard \s29\sb20\sa60\sl-220\slmult0\widctlpar\tx280\tx560 \'a9\~1997\~Microsoft\~Corporation. All rights reserved.
|
|
\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}
|
|
\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:
|
|
\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.
|
|
\par {\pntext\pard\plain\f1\fs21 \'b7\tab}Mouhid.vxd maps mouse HID reports to Vmd.vxd.
|
|
\par {\pntext\pard\plain\f1\fs21 \'b7\tab}Joyhid.vxd maps HID reports from joysticks and other game devices to Vjoyd.vxd.
|
|
\par \pard\plain \s52\qr\sl-160\slmult0\widctlpar \f4\fs12
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The following diagram shows the relationships of these files:
|
|
\par \pard \s26\qc\sa160\nowidctlpar {\pard\plain \s26\qc\sa160\nowidctlpar \f4\fs21 {\object\objemb\objw6356\objh3353{\*\objclass }{\*\objdata 01050000020000000f000000576f72642e506963747572652e3800000000000000000000760000
|
|
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
fffffffffffffffffdffffff11000000fefffffffeffffff05000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000feffffff29000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e00
|
|
00001f00000020000000feffffff22000000230000002400000025000000260000002700000028000000fefffffffeffffff2b0000002c0000002d0000002e0000002f0000003000000031000000feffffff33000000340000003500000036000000370000003800000039000000feffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff040000000709020000000000c000000000000046000000000000000000000000a0fc
|
|
14a0174cbc0103000000800100000000000001004f006c00650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
|
|
0000000000000000000000001400000000000000030050004900430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0002010100000003000000ffffffff0000000000000000000000000000000000000000000000000000
|
|
00000000000000000000010000004c0000000000000003004d004500540041000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000201ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
|
|
000000000000000000000000040000001618000000000000feffffff02000000feffffff04000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0100000200000000000000000000000000000000ffffffff00c0000000600100ffffffff000000000000000000000000000000000000000000000000d002c0214c0000000000000000000800c92b000019170000d3180000180d00000000
|
|
0000000000000000000000000000e8030000e80300000000000000000000000000000000000000000000000000000000000000000000d002c0210000000000000000ee0200002d070000100e00005c0000008e4000008f40000007000000000000000100feff030a0000ffffffff0709020000000000c000000000000046
|
|
170000004d6963726f736f667420576f72642050696374757265000a0000004d53576f7264446f63000f000000576f72642e506963747572652e3800f439b271000000000000000000000000ffffffff000000000000000000000000000000000000000000000300d002c0210000000000000000ee02000036080000100e
|
|
0000640000009b400000a64000000700000000000000ffff0000ffffffff00c0000000600100ffffffff000000000000000000000000000000000000000000000000d002c0210000000000000000ee0200009a080000100e00008b000000a6400000d64000000700000000000000ffff0000ffffffff00c0000000600100
|
|
ffffffff000000000000000000000000000000000000000000000000d002c02100000000000000000800c92b19170000010009000003070c000006003a00000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b0200000000050000000c027505580a
|
|
1c000000fb021000070000000000bc02000000000000000253797374656d0000080000000c008a0100000a00060000000c008a0100000a00040000002d0100000500000002010100000007000000fc020000ffffff000000040000002d01010008000000fa0200000700000000000000040000002d0102000c0000002403
|
|
040087031903cf061903cf0665028703650208000000fa0200000000000000000000040000002d01030004000000f001020007000000fc020000ffffff000000040000002d01020004000000f0010100050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01010008000000
|
|
fa0200000700000000000000040000002d0104000c000000240304000b071903530a1903530a65020b076502040000002d01030004000000f0010400040000002d01020004000000f001010005000000020101000000050000000201010000001c000000fb02adff0000000000009001000000000400001254696d657320
|
|
4e657720526f6d616e006b7eed77c057ef7701040a6d00000a00040000002d01010005000000090200000000050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000b074504530a4504
|
|
530a91030b079103040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040087034504cf064504cf069103
|
|
87039103040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030045044b0345044b03910303009103
|
|
040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040003007105530a7105530abd040300bd0404000000
|
|
2d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030019034b0319034b03650203006502040000002d010300
|
|
04000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300b700530ab700530a030003000300040000002d01030004000000
|
|
f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300ed011b06ed011b06390103003901040000002d01030004000000f0010500
|
|
040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304009306ed01530aed01530a390193063901040000002d01030004000000f001050004000000
|
|
2d01020004000000f0010400050000000201010000000500000002010100000005000000020101000000030000001e000700000016046a05b807c504630205000000020101000000040000002d0101003a000000320ad6049e021f00040000000000580a750548494420436c617373204472697665722028484944434c41
|
|
53532e53595329003c001c003c0015003800170025002000200015003c001c0017002a0025001c0015001c003c001c003c00380033003c002e002e0015002e003c002e001c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604ba0004071500
|
|
170305000000020101000000040000002d01010028000000320a2600b2031300040000000000580a75054c6567616379204170706c69636174696f6e7300330025002a00250025002a0015003c002a002a001700170025002500170017002a002a00200005000000020101000000040000002701ffff0500000002010100
|
|
000005000000020101000000030000001e000700000016040204d40999034f0705000000020101000000040000002d0101001a000000320aaa0396070a00040000000000580a75054a4f594849442e56584420003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff050000000201
|
|
0100000005000000020101000000030000001e00070000001604020450069903cb0305000000020101000000040000002d0101001a000000320aaa0306040a00040000000000580a75054b42444849442e5658443c0038003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff05000000
|
|
02010100000005000000020101000000030000001e000700000016040204cc029903470005000000020101000000040000002d0101001a000000320aaa0379000a00040000000000580a75054d4f554849442e5658444a003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500
|
|
000002010100000005000000020101000000030000001e00070000001604d602cc026d02470005000000020101000000040000002d01010016000000320a7e02c3000700040000000000580a7505564d442e565844003c004a003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100
|
|
000005000000020101000000030000001e00070000001604d6028c066d02cb0305000000020101000000040000002d01010016000000320a7e026c040700040000000000580a7505564b442e565844003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000
|
|
020101000000030000001e00070000001604d602100a6d024f0705000000020101000000040000002d01010019000000320a7e02c2070900040000000000580a7505564a4f59442e565844003c0020003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000
|
|
020101000000030000001e00070000001604c801100a5f014f0705000000020101000000040000002d01010019000000320a7001b6070900040000000000580a750557494e4d4d2e444c4c004f001c003c004a004a0015003c003300330005000000020101000000040000002701ffff0500000002010100000005000000
|
|
020101000000030000001e00070000001604c801ac045f01bf0005000000020101000000040000002d01010017000000320a7001ef010800040000000000580a7505555345522e4558453c002e0033003800150033003c00330005000000020101000000040000002701ffff0500000002010100000008000000fa020000
|
|
0600000000000000040000002d010400050000001402d700a7010500000013022301a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb011c0193011c01a7013901040000002d010200
|
|
04000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009301de00bb01de00a701c100040000002d01020004000000f0010400040000002d01030004000000f001050005000000
|
|
0201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014020302a7010500000013024f02a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000
|
|
24030300bb01480293014802a7016502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030093010a02bb010a02a701ed01040000002d01020004000000
|
|
f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f03a7010500000013027b03a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000
|
|
fa0200000100000000000000040000002d0105000a00000024030300bb01740393017403a7019103040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300
|
|
93013603bb013603a7011903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b04a701050000001302a704a701040000002d01030004000000f00104000700
|
|
0000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01a0049301a004a701bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa020000
|
|
0100000000000000040000002d0105000a0000002403030093016204bb016204a7014504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b042b0505000000
|
|
1302a7042b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f05a0041705a0042b05bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc02
|
|
0000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170562043f0562042b054504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa020000060000000000
|
|
0000040000002d0104000500000014022f032b050500000013027b032b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f057403170574032b059103040000002d01020004000000f001
|
|
0400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170536033f0536032b051903040000002d01020004000000f0010400040000002d01030004000000f001050005000000020101000000
|
|
0500000002010100000008000000fa0200000600000000000000040000002d01040005000000140203022b050500000013024f022b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f05
|
|
4802170548022b056502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030017050a023f050a022b05ed01040000002d01020004000000f00104000400
|
|
00002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d7002b0505000000130223012b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100
|
|
000000000000040000002d0105000a000000240303003f051c0117051c012b053901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303001705de003f05
|
|
de002b05c100040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b04af08050000001302a704af08040000002d01030004000000f001040007000000fc020000
|
|
000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c308a0049b08a004af08bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa020000010000000000
|
|
0000040000002d0105000a000000240303009b086204c3086204af084504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f03af080500000013027b03af08
|
|
040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c30874039b087403af089103040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc02000000000000
|
|
0000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b083603c3083603af081903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa020000060000000000000004000000
|
|
2d0104000500000014020302af080500000013024f02af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c30848029b084802af086502040000002d01020004000000f001040004000000
|
|
2d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b080a02c3080a02af08ed01040000002d01020004000000f0010400040000002d01030004000000f001050005000000020101000000050000000201
|
|
0100000008000000fa0200000600000000000000040000002d010400050000001402d700af080500000013022301af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c3081c019b081c01
|
|
af083901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b08de00c308de00af08c100040000002d01020004000000f0010400040000002d010300
|
|
04000000f001050005000000020101000000040000002d01000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
00000000000000000000000000000000000031005400610062006c006500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0002010200000006000000ffffffff00000000000000000000000000000000000000000000000000000000
|
|
0000000000000000120000004b1d000000000000010043006f006d0070004f0062006a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000201ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
|
|
0000000000000000000003000000680000000000000003004f0062006a0049006e0066006f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120002010500000008000000ffffffff000000000000000000000000000000000000000000000000
|
|
00000000000000000000000005000000040000000000000057006f007200640044006f00630075006d0065006e007400000000000000000000000000000000000000000000000000000000000000000000000000000000001a000200ffffffffffffffffffffffff00000000000000000000000000000000000000000000
|
|
000000000000000000000000000021000000001000000000000012000f000a0001005b000f00020000000000000024000040f1ff02002400000006004e006f0072006d0061006c0000000200000004006d4809040000000000000000000000000000000000003c004140f2ffa1003c000000160044006500660061007500
|
|
6c0074002000500061007200610067007200610070006800200046006f006e00740000000000000000000000000000000000210000002d00000039000000450000004e000000570000006200000077000000820000008c000000af00000001000000000000000000ffffffff0c0400000000000001000000000000000000
|
|
ffffffff0e0400000000000001000000000000000000ffffffff0f0400000000000001000000000000000000ffffffff100400000000000001000000000000000000ffffffff110400000000000001000000000000000000ffffffff120400000000000001000000000000000000ffffffff130400000000000001000000
|
|
000000000000ffffffff0d0400000000000001000000000000000000ffffffff140400000000000001000000000000000000ffffffff150400000000000001000000000000000000ffffffff000000000000000000000000210000002d00000039000000450000004e000000570000006200000077000000820000008c00
|
|
00008f000000000000000000010000000000020000000000030000000000040000000000050000000000060000000000070000000000080000000000090000000000ffff0000000000000000af0000000600000c00000000ffffffff010000000420ffff01000000000000000000af00000000000000000000040000af04
|
|
00000300000000040000af0400000400000000040000ae040000050000000f0000f038000000000006f01800000022040000020000002100000001000000010000002200000040001ef110000000ffff00000000ff0080808000f7000010000f0002f0a2110000100008f00800000021000000210400000f0003f0401100
|
|
000f0004f028000000010009f0100000000000000000000000000000000000000002000af00800000000040000050000000f0004f0c800000002000af00800000002040000000a000023010bf0980000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ff
|
|
ffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f0200000200bf032000200005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000017000000000011f0040000
|
|
00010000000f0004f0c800000002000af00800000003040000000a000023010bf0980000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d701020000
|
|
00ff01100010003f0200000200bf032000200005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000019000000000011f004000000010000000f0004f0c200000002000af00800000004040000000a000013010bf0920000004201204e000043
|
|
01204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d164ef24d164e0000000000000000f24d0600080002
|
|
00004000ac040000ac01600080000010f00400000011000000000011f004000000010000000f0004f0c200000002000af00800000005040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100
|
|
000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000012000000000011f004000000010000000f0004f0c200000002000af008
|
|
00000006040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0
|
|
ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000014000000000011f004000000010000000f0004f0c200000002000af00800000007040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f010100010080
|
|
01000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d1d4ef24d1d4e0000000000000000f24d060008000200004000ac040000ac01600080000010f004000000100000
|
|
00000011f004000000010000000f0004f0c200000002000af00800000008040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100
|
|
000000d70102000000ff01100010003f020000020005000500f0ff0000f24d164ef24d164e0000000000000000f24d060008000200004000ac040000ac01600080000010f00400000013000000000011f004000000010000000f0004f0c200000002000af00800000009040000000a000013010bf0920000004201204e00
|
|
004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d1d4ef24d1d4e0000000000000000f24d060008
|
|
000200004000ac040000ac01600080000010f0040000001f000000000011f004000000010000000f0004f0c200000002000af0080000000a040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c0
|
|
0100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f020000020005000500f0ff0000f24d1b4ef24d1b4e0000000000000000f24d060008000200004000ac040000ac01600080000010f0040000001d000000000011f004000000010000000f0004f0c200000002000a
|
|
f0080000000b040000000a000013010bf0920000004201204e00004301204e000045c11400000046c1120000007f01010001008001000000008101ffffff008301ffffff00bf0110001000c00100000000cb012b2a0000ce0100000000d00100000000d10100000000d70102000000ff01100010003f0200000200050005
|
|
00f0ff0000f24d174ef24d174e0000000000000000f24d060008000200004000ac040000ac01600080000010f0040000001e000000000011f004000000010000000f0004f06c00000012000af0080000000c040000000a000083000bf03000000080000000010081009c31000082009c31000083009c31000084009c3100
|
|
00bf0100001000ff01000008003f0200000200000010f0040000000c000000000011f0040000000100000000000df004000000000001000f0004f06c00000012000af0080000000d040000000a000083000bf03000000080000000080081009c31000082009c31000083009c31000084009c310000bf0100001000ff0100
|
|
0008003f0200000200000010f0040000001a000000000011f0040000000100000000000df004000000000008000f0004f06c00000012000af0080000000e040000000a000083000bf03000000080000000020081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f020000020000
|
|
0010f0040000000d000000000011f0040000000100000000000df004000000000002000f0004f06c00000012000af0080000000f040000000a000083000bf03000000080000000030081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000000e0000
|
|
00000011f0040000000100000000000df004000000000003000f0004f06c00000012000af00800000010040000000a000083000bf03000000080000000040081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000000f000000000011f00400000001
|
|
00000000000df004000000000004000f0004f06c00000012000af00800000011040000000a000083000bf03000000080000000050081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f00400000015000000000011f0040000000100000000000df0040000
|
|
00000005000f0004f06c00000012000af00800000012040000000a000083000bf03000000080000000060081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f00400000016000000000011f0040000000100000000000df004000000000006000f0004f06c
|
|
00000012000af00800000013040000000a000083000bf03000000080000000070081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f00400000018000000000011f0040000000100000000000df004000000000007000f0004f06c00000012000af0080000
|
|
0014040000000a000083000bf03000000080000000090081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000001b000000000011f0040000000100000000000df004000000000009000f0004f06c00000012000af00800000015040000000a000083
|
|
000bf030000000800000000a0081009c31000082009c31000083009c31000084009c310000bf0100001000ff01000008003f0200000200000010f0040000001c000000000011f0040000000100000000000df00400000000000a000f0004f05a00000042010af00800000016040000000a000073000bf02a000000d00101
|
|
000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f0040000000b000000000011f004000000010000000f0004f05a00000042010af00800000017040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d5
|
|
01000000003f0200000200000010f0040000000a000000000011f004000000010000000f0004f05a00000042010af00800000018040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000009000000000011f004
|
|
000000010000000f0004f05a00000042010af00800000019040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000008000000000011f004000000010000000f0004f05a00000042010af0080000001a04000000
|
|
0a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000007000000000011f004000000010000000f0004f05a00000042010af0080000001b040000000a000073000bf02a000000d00101000000d10101000000d201000000
|
|
00d30100000000d40100000000d501000000003f0200000200000010f00400000006000000000011f004000000010000000f0004f05a00000042010af0080000001c040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010
|
|
f00400000005000000000011f004000000010000000f0004f05a00000042010af0080000001d040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000004000000000011f004000000010000000f0004f05a0000
|
|
0042010af0080000001e040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000003000000000011f004000000010000000f0004f05a00000042010af0080000001f040000000a000073000bf02a000000d00101
|
|
000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000002000000000011f004000000010000000f0004f05a00000042010af00800000020040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d5
|
|
01000000003f0200000200000010f00400000001000000000011f004000000010000000f0004f05a00000042010af00800000021040000000a000073000bf02a000000d00101000000d10101000000d20100000000d30100000000d40100000000d501000000003f0200000200000010f00400000000000000000011f004
|
|
000000010000000f0004f04200000012000af00800000001040000000e000053000bf01e000000bf0100001000cb0100000000ff01000008000403090000003f0301000100000011f00400000001000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b
|
|
0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000af00000021040000d02f000030210000d12f0000512200006a000000000020040000d02f000000240000d1
|
|
2f0000212500006a00000000001f040000d02f0000d0260000d12f0000f12700006a00000000001e040000d02f0000a0290000d12f0000c12a00006a00000000001d040000602700003021000061270000512200006a00000000001c040000602700000024000061270000212500006a00000000001b04000060270000d0
|
|
26000061270000f12700006a00000000001a04000060270000a029000061270000c12a00006a000000000019040000f01e0000a0290000f11e0000c12a00006a000000000018040000f01e0000d0260000f11e0000f12700006a000000000017040000f01e000000240000f11e0000212500006a000000000016040000f0
|
|
1e000030210000f11e0000512200006a00000000000c040000a0200000c02a0000912d0000712c00006a00000000000e040000702c0000f0270000a1320000112900006a00000000000f04000000240000f0270000312a0000112900006a000000000010040000901b0000f0270000c1210000112900006a000000000007
|
|
040000001b0000c02a0000c0330000702c00006a000000000004040000e02b0000f0270000c1330000a02900006a00000000000504000070230000f0270000512b0000a02900006a000000000008040000001b000020250000e1220000d02600006a000000000006040000001b0000f0270000e1220000a02900006a0000
|
|
00000011040000901b000020250000c1210000412600006a0000000000120400000024000020250000c12a0000412600006a0000000000020400007023000020250000502b0000d02600006a400000000013040000702c00002025000031330000412600006a000000000003040000e02b000020250000c0330000d02600
|
|
006a40000000000d04000050220000801f0000e12b0000312100006a000000000014040000702c00009822000031330000b92300006a000000000015040000b01c00009822000041260000b92300006a00000000000a040000001b000050220000a0290000002400006a00000000000b040000c02a000050220000c03300
|
|
00002400006a000000000009040000001b0000691f0000c0330000192100006a00000000000000000021000000ad000000b0000000070007000700ff404850204c617365724a657420355369005c5c6d737072696e74395c636f7270620050434c35454d53004850204c617365724a657420355369004850204c61736572
|
|
4a6574203553690000000000000000000000000000000000000401049400400003770004010001007107df03000001000f0158020100010058020400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
0000020000000000000000000000010040004d53554432034850204c617365724a6574203553690000000000000000000000000000000000e50300000f010000250100000000040064000a0000004850204c617365724a657420355369000000000000000000000000000000000000040104940040000377000401000100
|
|
7107df03000001000f01580201000100580204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000010040004d53554432034850204c617365724a65742035536900
|
|
00000000000000000000000000000000e50300000f010000250100000000040064000a000000008001000000000000000000546b74000000000000000000000000000000000000000000021000000000000000af000000600000080040000003000000471690010000020206030504050203040300000000000000000000
|
|
00000000000100000000000000540069006d006500730020004e0065007700200052006f006d0061006e00000035169001020005050102010706020507000000000000001000000000000000000000008000000000530079006d0062006f006c000000332690010000020b06040202020202040300000000000000000000
|
|
0000000000010000000000000041007200690061006c00000022000400f10888180000d0020000680100000000af8d1406b89014a600000000030001000000040000001b00000001000100000004008310010000000000000000000000010001000000010000000000000021030000008400000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a506c007b400b4008000123000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
00000000000000000000000000000002000000cd01ffff120000000000000000000000000000000c00440065006e0079007300200048006f00770061007200640002006500700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
0000000000000000000000000000000000000000eca5c1004700090400000012bf000000000000100000000000040000af0400000e00626a626a66da66da000000000000000000000000000000000000090416001e0c000004b0010004b001002100000000000000000000000000000000000000000000008d0000000000
|
|
0000ffff0f000000000000000000ffff0f000000000000000000ffff0f00000000000000000000000000000000005d00000000009200000000000000920000009200000000000000920000000000000026020000000000002602000000000000260200001400000000000000000000005602000000000000560200000000
|
|
000056020000000000005602000000000000560200000c000000620200000c00000056020000000000005b1a0000b60000007a020000000000007a020000000000007a020000000000007a020000000000007a020000000000002918000000000000291800000000000029180000000000003f1800000200000041180000
|
|
00000000411800000000000041180000390000007a180000d40000004e190000d4000000221a000024000000111b0000f4010000051d000046000000461a00001500000000000000000000000000000000000000260200000000000029180000000000000000000000000000000000000000000065140000c40300002918
|
|
00000000000029180000000000002918000000000000461a0000000000003f18000000000000920000000000000092000000000000007a0200000000000000000000000000007a020000eb1100007a020000000000003f180000000000003f180000000000003f1800000000000029180000160000009200000022010000
|
|
7a0200000000000026020000000000007a020000000000003f18000000000000000000000000000000000000000000003a0200000e000000480200000e000000920000000000000092000000000000009200000000000000920000000000000029180000000000003f180000000000003f180000000000003f1800000000
|
|
000000000000000000003f18000000000000b401000072000000260200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f180000000000007a020000000000006e0200000c00000040d2a1f4de4bbc0156020000
|
|
0000000056020000000000003f180000000000003f180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
00000000000000000000000000000000000000000000000000000000000000000000000008080808080808080808080808080808080808080808080808080808080808080d48494420436c617373204472697665722028484944434c4153532e535953290d0d4a4f594849442e5658440d0d4b42444849442e5658440d0d
|
|
4d4f554849442e5658440d0d564d442e5658440d0d564b442e5658440d0d564a4f59442e5658440d0d4c6567616379204170706c69636174696f6e730d0d57494e4d4d2e444c4c0d0d555345522e4558450d0d0d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000020040000af040000f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
0000000000000000000000000000000000000000000000000000000000000000000000000d036a000000005508016d4800040002000400002104000041040000420400004d0400004e040000590400005a04000065040000660400006e0400006f040000770400007804000082040000830400009704000098040000a204
|
|
0000a3040000ac040000ad040000ae040000af040000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000
|
|
fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fa0000000000000000
|
|
00000000fd000000000000000000000000fa000000000000000000000000fd000000000000000000000000fd000000000000000000000000fd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000324010001000000170004000021040000ae040000fefe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101021c001fb0c04e20b0c04e21b0f81a22b0f71a2390611f2490482225b0000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500530075006d006d0061007200790049006e0066006f0072006d006100740069006f006e0000000000
|
|
00000000000000000000000000000000000000000000280002010700000009000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000002a0000000010000000000000050044006f00630075006d0065006e007400530075006d006d0061007200790049006e0066006f00
|
|
72006d006100740069006f006e000000000000000000000038000200ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000003200000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feff0000040a02000000000000000000000000000000000001000000e0859ff2f94f
|
|
6810ab9108002b27b3d9300000007c01000012000000010000009800000002000000a000000003000000ac00000004000000b800000005000000d000000006000000dc00000007000000e800000008000000f8000000090000000401000012000000100100000a0000002c0100000b000000380100000c00000044010000
|
|
0d000000500100000e0000005c0100000f00000064010000100000006c010000130000007401000002000000e40400001e00000001000000000073001e00000001000000000073001e0000000d00000044656e797320486f7761726400006f001e0000000100000000656e791e0000000100000000656e791e0000000700
|
|
00004e6f726d616c006f1e000000030000006570006d1e000000020000003300006d1e000000130000004d6963726f736f667420576f726420382e300000400000000046c32300000000400000000000000000000000400000000022fceebb4bbc01400000000038ebb7de4bbc0103000000010000000300000004000000
|
|
030000001b00000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000feff0000040a0200000000000000000000000000000000000200000002d5cdd59c2e1b10939708002b2cf9ae4400000005d5cdd59c2e1b10939708002b2cf9ae600100001c0100000d00000001000000700000000f0000007800000004000000
|
|
9800000005000000a000000006000000a800000011000000b000000017000000b80000000b000000c000000010000000c800000013000000d000000016000000d80000000d000000e00000000c000000ed00000002000000e40400001e000000160000004d6963726f736f667420436f72706f726174696f6e0031000300
|
|
0000002e000003000000010000000300000001000000030000002100000003000000b30d08000b000000000000000b000000000000000b000000000000000b000000000000001e1000000100000001000000000c100000040000001e000000060000005469746c650003000000010000001e000000010000000003000000
|
|
00000000980000000300000000000000200000000100000036000000020000003e00000001000000020000000a0000005f5049445f475549440002000000e4040000410000004e0000007b00350045003500370043003700320030002d0042003700390037002d0031003100440030002d0042003600420038002d003000
|
|
300041004100300030003600460046004500440036007d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
|
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}{\result {\fs20
|
|
{\pict\wmetafile8\picw11210\pich5913\picwgoal6355\pichgoal3352
|
|
010009000003070c000006003a00000000001400000026060f001e00ffffffff040014000000576f72640e004d6963726f736f667420576f7264050000000b0200000000050000000c027505580a1c000000fb021000070000000000bc02000000000000000253797374656d0000080000000c008a0100000a00060000000c
|
|
008a0100000a00040000002d0100000500000002010100000007000000fc020000ffffff000000040000002d01010008000000fa0200000700000000000000040000002d0102000c0000002403040087031903cf061903cf0665028703650208000000fa0200000000000000000000040000002d01030004000000f0010200
|
|
07000000fc020000ffffff000000040000002d01020004000000f0010100050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01010008000000fa0200000700000000000000040000002d0104000c000000240304000b071903530a1903530a65020b076502040000002d0103
|
|
0004000000f0010400040000002d01020004000000f001010005000000020101000000050000000201010000001c000000fb02adff0000000000009001000000000400001254696d6573204e657720526f6d616e006b7eed77c057ef7701040a6d00000a00040000002d010100050000000902000000000500000002010100
|
|
00000500000002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000b074504530a4504530a91030b079103040000002d01030004000000f0010500040000002d01020004000000f001040005000000020101000000050000
|
|
0002010100000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040087034504cf064504cf06910387039103040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100
|
|
000007000000fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030045044b0345044b03910303009103040000002d01030004000000f0010500040000002d01020004000000f00104000500000002010100000005000000020101000000070000
|
|
00fc020000ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c0000002403040003007105530a7105530abd040300bd04040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000
|
|
ffffff000000040000002d01040008000000fa0200000700000000000000040000002d0105000c00000024030400030019034b0319034b03650203006502040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff0000
|
|
00040000002d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300b700530ab700530a030003000300040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff00000004000000
|
|
2d01040008000000fa0200000700000000000000040000002d0105000c000000240304000300ed011b06ed011b06390103003901040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000007000000fc020000ffffff000000040000002d01040008
|
|
000000fa0200000700000000000000040000002d0105000c000000240304009306ed01530aed01530a390193063901040000002d01030004000000f0010500040000002d01020004000000f0010400050000000201010000000500000002010100000005000000020101000000030000001e000700000016046a05b807c504
|
|
630205000000020101000000040000002d0101003a000000320ad6049e021f00040000000000580a750548494420436c617373204472697665722028484944434c4153532e53595329003c001c003c0015003800170025002000200015003c001c0017002a0025001c0015001c003c001c003c00380033003c002e002e0015
|
|
002e003c002e001c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604ba0004071500170305000000020101000000040000002d01010028000000320a2600b2031300040000000000580a75054c6567616379204170706c69636174696f6e7300
|
|
330025002a00250025002a0015003c002a002a001700170025002500170017002a002a00200005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e000700000016040204d40999034f0705000000020101000000040000002d0101001a000000320aaa0396070a0004
|
|
0000000000580a75054a4f594849442e56584420003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604020450069903cb0305000000020101000000040000002d0101001a000000320aaa0306040a00
|
|
040000000000580a75054b42444849442e5658443c0038003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e000700000016040204cc029903470005000000020101000000040000002d0101001a000000320aaa0379000a
|
|
00040000000000580a75054d4f554849442e5658444a003c003c003c001c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604d602cc026d02470005000000020101000000040000002d01010016000000320a7e02c300
|
|
0700040000000000580a7505564d442e565844003c004a003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604d6028c066d02cb0305000000020101000000040000002d01010016000000320a7e026c0407000400000000
|
|
00580a7505564b442e565844003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604d602100a6d024f0705000000020101000000040000002d01010019000000320a7e02c2070900040000000000580a7505564a
|
|
4f59442e565844003c0020003c003c003c0015003c003c003c0005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604c801100a5f014f0705000000020101000000040000002d01010019000000320a7001b6070900040000000000580a750557494e
|
|
4d4d2e444c4c004f001c003c004a004a0015003c003300330005000000020101000000040000002701ffff0500000002010100000005000000020101000000030000001e00070000001604c801ac045f01bf0005000000020101000000040000002d01010017000000320a7001ef010800040000000000580a750555534552
|
|
2e4558453c002e0033003800150033003c00330005000000020101000000040000002701ffff0500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d700a7010500000013022301a701040000002d01030004000000f001040007000000fc020000000000000000040000002d
|
|
01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb011c0193011c01a7013901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00
|
|
0000240303009301de00bb01de00a701c100040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014020302a7010500000013024f02a701040000002d01030004000000f0
|
|
01040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01480293014802a7016502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000
|
|
fa0200000100000000000000040000002d0105000a0000002403030093010a02bb010a02a701ed01040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f03a70105
|
|
00000013027b03a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01740393017403a7019103040000002d01020004000000f0010400040000002d01030004000000f001050007000000
|
|
fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030093013603bb013603a7011903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000
|
|
000000040000002d0104000500000014025b04a701050000001302a704a701040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300bb01a0049301a004a701bd04040000002d01020004000000f001
|
|
0400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a0000002403030093016204bb016204a7014504040000002d01020004000000f0010400040000002d01030004000000f00105000500000002010100000005
|
|
00000002010100000008000000fa0200000600000000000000040000002d0104000500000014025b042b05050000001302a7042b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f05a004
|
|
1705a0042b05bd04040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170562043f0562042b054504040000002d01020004000000f0010400040000002d
|
|
01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014022f032b050500000013027b032b05040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa020000010000000000
|
|
0000040000002d0105000a000000240303003f057403170574032b059103040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300170536033f0536032b0519
|
|
03040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d01040005000000140203022b050500000013024f022b05040000002d01030004000000f001040007000000fc020000000000000000
|
|
040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f054802170548022b056502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d
|
|
0105000a0000002403030017050a023f050a022b05ed01040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d7002b0505000000130223012b05040000002d010300
|
|
04000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303003f051c0117051c012b053901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d0104
|
|
0008000000fa0200000100000000000000040000002d0105000a000000240303001705de003f05de002b05c100040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402
|
|
5b04af08050000001302a704af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c308a0049b08a004af08bd04040000002d01020004000000f0010400040000002d01030004000000f00105
|
|
0007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b086204c3086204af084504040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa020000
|
|
0600000000000000040000002d0104000500000014022f03af080500000013027b03af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a00000024030300c30874039b087403af089103040000002d01020004
|
|
000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b083603c3083603af081903040000002d01020004000000f0010400040000002d01030004000000f0010500050000000201
|
|
010000000500000002010100000008000000fa0200000600000000000000040000002d0104000500000014020302af080500000013024f02af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303
|
|
00c30848029b084802af086502040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b080a02c3080a02af08ed01040000002d01020004000000f0010400
|
|
040000002d01030004000000f0010500050000000201010000000500000002010100000008000000fa0200000600000000000000040000002d010400050000001402d700af080500000013022301af08040000002d01030004000000f001040007000000fc020000000000000000040000002d01040008000000fa02000001
|
|
00000000000000040000002d0105000a00000024030300c3081c019b081c01af083901040000002d01020004000000f0010400040000002d01030004000000f001050007000000fc020000000000000000040000002d01040008000000fa0200000100000000000000040000002d0105000a000000240303009b08de00c308
|
|
de00af08c100040000002d01020004000000f0010400040000002d01030004000000f001050005000000020101000000040000002d010000030000000000000000000000000000000000000000}}}}}
|
|
\par \pard \s26\sa160\nowidctlpar
|
|
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
|
|
is HID architecture. And HID-aware applications can take a more direct path to the HID Class Driver.
|
|
\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
|
|
to identify sections requiring device-specific code, which you will need to provide.
|
|
\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.
|
|
\par \pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\tx720 \f4\fs34 HID Mapper Implementation
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The basic activity of VXDCLNT is fairly simple.
|
|
\par \pard \s26\sa160\nowidctlpar Whenever a device is plugged in (i.e
|
|
. 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
|
|
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
|
|
control.
|
|
\par \pard \s26\sa160\nowidctlpar If VXDCLNT is not interested in the device, the device is promptly closed. Otherwise, VXDCLNT builds a {\i deviceContext}
|
|
context for the device and does an initial read on the device via NtKernReadFile(). NtKernReadFile() has an asynchronous behavior \endash
|
|
the read data is returned via a callback routine, which in VXDCLNT is ReadCompletion(). ReadCompletion() processes a devic
|
|
e report as follows: it uses HIDPARSE functions to parse meaningful values out of the report and then calls some legacy driver to act
|
|
on the new device state. ReadCompletion() then dispatches another worker thread to do the next read via another NtKernReadFile() call.
|
|
\par \pard \s26\sa160\nowidctlpar
|
|
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.
|
|
\par \pard \s26\sa160\nowidctlpar That\rquote s it. That\rquote s the entire behavior of a HID mapper.
|
|
\par \pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar\tx720 \f4\fs34 Kernel Functions
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 This section describes kernel support routines for Ring-0 HID mapper V
|
|
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
|
|
s for the support routines are given below.
|
|
\par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 NTKERN.VXD functions
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The following functions are imported from NTKERN.VXD.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 IoGetDeviceClassAssociations
|
|
\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().
|
|
\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 (
|
|
\par \tab IN LPGUID\tab \tab \tab ClassGuid,
|
|
\par \tab IN PDEVICE_OBJECT\tab PhysicalDeviceObject OPTIONAL,
|
|
\par \tab IN ULONG\tab \tab \tab \tab Flags,
|
|
\par \tab OUT PWSTR\tab \tab \tab *SymbolicLinkList
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ClassGuid
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass in address of GUID_CLASS_INPUT, defined in HIDCLASS.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PhysicalDeviceObject
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optional. Pass NULL
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Flags
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 None currently defined. Pass 0.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i SymbolicLinkList
|
|
\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
|
|
\par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernCloseFile
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Closes an open device.
|
|
\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(
|
|
\par \tab IN HANDLE FileHandle
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile.
|
|
\par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernCreateFile
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Opens a device using a symbolic link.
|
|
\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(
|
|
\par \tab PHANDLE\tab \tab \tab \tab FileHandle,
|
|
\par \tab ACCESS_MASK\tab \tab \tab DesiredAccess,
|
|
\par \tab POBJECT_ATTRIBUTES\tab ObjectAttributes,
|
|
\par \tab PIO_STATUS_BLOCK \tab IoStatusBlock,
|
|
\par \tab PLARGE_INTEGER \tab \tab AllocationSize,
|
|
\par \tab ULONG \tab \tab \tab \tab FileAttributes,
|
|
\par \tab ULONG \tab \tab \tab \tab ShareAccess,
|
|
\par \tab ULONG \tab \tab \tab \tab CreateDisposition,
|
|
\par \tab ULONG \tab \tab \tab \tab CreateOptions,
|
|
\par \tab PVOID \tab \tab \tab \tab EaBuffer,
|
|
\par \tab ULONG \tab \tab \tab \tab EaLength
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives a handle to the open file/device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i DesiredAccess}{\fs16
|
|
\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).
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ObjectAttributes}
|
|
\par \pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Address of structure initialized with a symbolic link name using InitializeObjectAttributes(). See the sample.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Address of structure to receive status information.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i AllocationSize}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass NULL.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileAttributes}
|
|
\par \pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A FILE_ATTRIBUTE_xxx value defined in WDM.H. Use FILE_ATTRIBUTE_NORMAL.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ShareAccess}
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i CreateDisposition}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Type of creation. Use FILE_OPEN.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i CreateOptions}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass 0.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i EaBuffer}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Optional. Pass NULL.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i EaLength}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pass 0.
|
|
\par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernDeviceIoControl
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Passes an IOCTL to query a device.
|
|
\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(
|
|
\par \tab IN\tab HANDLE\tab \tab \tab \tab FileHandle,
|
|
\par \tab IN\tab HANDLE\tab \tab \tab \tab Event OPTIONAL,
|
|
\par \tab IN\tab PIO_APC_ROUTINE\tab \tab ApcRoutine OPTIONAL,
|
|
\par \tab IN\tab PVOID\tab \tab \tab \tab ApcContext OPTIONAL,
|
|
\par \tab OUT\tab PIO_STATUS_BLOCK\tab \tab IoStatusBlock,
|
|
\par \tab IN\tab ULONG\tab \tab \tab \tab IoControlCode,
|
|
\par \tab IN\tab PVOID\tab \tab \tab \tab InputBuffer OPTIONAL,
|
|
\par \tab IN\tab ULONG\tab \tab \tab \tab InputBufferLength,
|
|
\par \tab OUT\tab PVOID\tab \tab \tab \tab OutputBuffer OPTIONAL,
|
|
\par \tab IN\tab ULONG\tab \tab \tab \tab OutputBufferLength
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Event
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Only used if blocking a thread on this read. Pass NULL in most cases.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcRoutine
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcContext
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Context for completion routine. Pass 0.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to an IO_STATUS_BLOCK structure, which receives status information about the call.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoControlCode
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 IOCTL code. Of interest to HID mappers are:
|
|
\par \pard \s30\fi520\li200\sa80\nowidctlpar IOCTL_HID_GET_COLLECTION_INFORMATION
|
|
\par \pard \s30\li200\sa80\nowidctlpar \tab \tab Initializes HID_COLLECTION_INFORMATION structure.
|
|
\par \pard \s30\fi520\li200\sa80\nowidctlpar IOCTL_HID_GET_COLLECTION_DESCRIPTOR
|
|
\par \pard \s30\li200\sa80\nowidctlpar \tab \tab Initializes HIDP_PREPARSED_DATA structure.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i InputBuffer
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 No input data is required for the IOCTLs that HID mappers commonly use. Pass NULL.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i InputBufferLength
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Length of InputBuffer in bytes. Pass 0 if not passing InputBuffer.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i OutputBuffer
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to buffer which receives data.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i OutputBufferLength
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Length of OutputBuffer in bytes.
|
|
\par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernReadFile
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Reads a raw report from a device.
|
|
\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(
|
|
\par \tab IN\tab HANDLE\tab \tab \tab \tab FileHandle,
|
|
\par \tab IN\tab HANDLE\tab \tab \tab \tab Event OPTIONAL,
|
|
\par \tab IN\tab PIO_APC_ROUTINE\tab \tab ApcRoutine OPTIONAL,
|
|
\par \tab IN\tab PVOID\tab \tab \tab \tab ApcContext OPTIONAL,
|
|
\par \tab OUT\tab PIO_STATUS_BLOCK\tab \tab IoStatusBlock,
|
|
\par \tab OUT\tab PVOID\tab \tab \tab \tab Buffer,
|
|
\par \tab IN\tab ULONG\tab \tab \tab \tab Length,
|
|
\par \tab IN\tab PLARGE_INTEGER\tab \tab ByteOffset OPTIONAL,
|
|
\par \tab IN\tab PULONG\tab \tab \tab \tab Key OPTIONAL
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Event
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Only used if blocking a thread on this read. Pass NULL in most cases.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcRoutine
|
|
\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:
|
|
\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(
|
|
\par \tab \tab IN PVOID\tab \tab \tab \tab Context,
|
|
\par \tab \tab IN PIO_STATUS_BLOCK\tab IoStatusBlock,
|
|
\par \tab \tab IN ULONG\tab \tab \tab \tab Reserved
|
|
\par \tab \tab );
|
|
\par
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcContext
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Buffer
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a static buffer that receives a raw report from the device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Length
|
|
\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().
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ByteOffset
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Key
|
|
\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.
|
|
\par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 _NtKernWriteFile
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Writes a raw report to a device.
|
|
\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(
|
|
\par \tab IN\tab HANDLE\tab \tab \tab \tab FileHandle,
|
|
\par \tab IN\tab HANDLE\tab \tab \tab \tab Event OPTIONAL,
|
|
\par \tab IN\tab PIO_APC_ROUTINE\tab \tab ApcRoutine OPTIONAL,
|
|
\par \tab IN\tab PVOID\tab \tab \tab \tab ApcContext OPTIONAL,
|
|
\par \tab OUT\tab PIO_STATUS_BLOCK\tab \tab IoStatusBlock,
|
|
\par \tab IN\tab PVOID\tab \tab \tab \tab Buffer,
|
|
\par \tab IN\tab ULONG\tab \tab \tab \tab Length,
|
|
\par \tab IN\tab PLARGE_INTEGER\tab \tab ByteOffset OPTIONAL,
|
|
\par \tab IN\tab PULONG\tab \tab \tab \tab Key OPTIONAL
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i FileHandle
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Device handle returned by _NtKernCreateFile
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Event
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Only used if blocking a thread on this read. Pass NULL in most cases.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcRoutine
|
|
\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:
|
|
\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(
|
|
\par \tab \tab IN PVOID\tab \tab \tab \tab Context,
|
|
\par \tab \tab IN PIO_STATUS_BLOCK\tab IoStatusBlock,
|
|
\par \tab \tab IN ULONG\tab \tab \tab \tab Reserved);
|
|
\par
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ApcContext
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Context for write completion routine.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i IoStatusBlock
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Buffer
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to a buffer containing the raw report to be written to the device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Length
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Length of the report in bytes.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ByteOffset
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Key
|
|
\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.
|
|
\par \pard\plain \s2\sb140\sa60\sl-380\slmult0\keepn\nowidctlpar \f4\fs30 HIDPARSE.SYS functions
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 The following functions are imported from HIDPARSE.SYS.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetCaps
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves capabilities information for a device.
|
|
\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 (
|
|
\par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
|
|
\par \tab OUT\tab \tab PHIDP_CAPS\tab \tab \tab \tab Capabilities
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Capabilities
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives device capabilities information.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetUsages\tab
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves usage information for a device.
|
|
\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 (
|
|
\par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
|
|
\par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
|
|
\par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
|
|
\par \tab OUT\tab \tab USAGE\tab \tab \tab \tab \tab *UsageList,
|
|
\par \tab IN OUT\tab ULONG\tab \tab \tab \tab \tab *UsageLength,
|
|
\par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
|
|
\par \tab IN\tab \tab PCHAR\tab \tab \tab \tab \tab Report,
|
|
\par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageList
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives list of values.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageLength
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetUsageValue
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves current values associated with specific usages on a device.
|
|
\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 (
|
|
\par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
|
|
\par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
|
|
\par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
|
|
\par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab Usage,
|
|
\par \tab OUT\tab \tab PULONG\tab \tab \tab \tab \tab UsageValue,
|
|
\par \tab IN\tab \tab PHIDP_PREPARSED_DATA \tab PreparsedData,
|
|
\par \tab IN\tab \tab PCHAR\tab \tab \tab \tab \tab Report,
|
|
\par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Usage}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 HID_USAGE_xxx value from HIDUSAGE.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageValue}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives usage value.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength}{\fs16 -
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_SetUsages
|
|
\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.
|
|
\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 (
|
|
\par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
|
|
\par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
|
|
\par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
|
|
\par \tab IN\tab \tab PUSAGE\tab \tab \tab \tab \tab UsageList,
|
|
\par \tab IN OUT\tab PULONG\tab \tab \tab \tab \tab UsageLength,
|
|
\par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
|
|
\par \tab IN OUT\tab PCHAR\tab \tab \tab \tab \tab Report,
|
|
\par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageList}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 List of values.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageLength}{\fs16
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength}{\fs16
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetScaledUsageValue
|
|
\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.
|
|
\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 (
|
|
\par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
|
|
\par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab UsagePage,
|
|
\par \tab IN\tab \tab USHORT\tab \tab \tab \tab \tab LinkCollection, // Optional
|
|
\par \tab IN\tab \tab USAGE\tab \tab \tab \tab \tab Usage,
|
|
\par \tab OUT\tab \tab PLONG\tab \tab \tab \tab \tab UsageValue,
|
|
\par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData,
|
|
\par \tab IN\tab \tab PCHAR\tab \tab \tab \tab \tab Report,
|
|
\par \tab IN\tab \tab ULONG\tab \tab \tab \tab \tab ReportLength
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i LinkCollection
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection number of collection interface on device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Usage
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 HID_USAGE_xxx value from HIDUSAGE.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsageValue
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Receives usage value.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i Report
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Raw device report.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportLength
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Report length in bytes.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_MaxUsageListLength
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves the number of usages of a given type on a device.
|
|
\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 (
|
|
\par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
|
|
\par \tab IN\tab \tab USAG\tab \tab \tab \tab \tab \tab UsagePage,
|
|
\par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i UsagePage
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HID_USAGE_PAGE_xxx value defined in HIDUSAGE.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 HidP_GetValueCaps
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Import explicitly. Retrieves capabilities information for a device.
|
|
\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 (
|
|
\par \tab IN\tab \tab HIDP_REPORT_TYPE\tab \tab \tab ReportType,
|
|
\par \tab OUT\tab \tab PHIDP_VALUE_CAPS\tab \tab \tab ValueCaps,
|
|
\par \tab IN OUT\tab PULON\tab \tab \tab \tab \tab ValueCapsLength,
|
|
\par \tab IN\tab \tab PHIDP_PREPARSED_DATA\tab \tab PreparsedData
|
|
\par \tab );{\*\bkmkend _Toc379612476}
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ReportType
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 A HIDP_REPORT_TYPE constant defined in HIDPI.H.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ValueCaps
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to array of HIDP_VALUE_CAPS structures To receive capabilities information for device.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i ValueCapsLength
|
|
\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.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i PreparsedData
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Collection descriptor returned by IOCTL_HID_GET_COLLECTION_DESCRIPTOR IOCTL. See the sample.
|
|
\par \pard\plain \s1\sb200\sa80\sl-440\slmult0\keepn\nowidctlpar \f4\fs34 Programming Considerations
|
|
\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
|
|
threads. See the sample code to clarify where this is appropriate. The system provides the following support routines for work items.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 ExInitializeWorkItem
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Initializes a work item.
|
|
\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
|
|
\par \tab WORK_QUEUE_ITEM\tab *workItem,
|
|
\par \tab PVOID\tab \tab \tab callback,
|
|
\par \tab PVOID\tab \tab \tab context
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i workItem
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to work item structure to be initialized.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i callback
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 callback function with the following prototype:
|
|
\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);
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i context
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 User-definable context to be passed to callback routine.
|
|
\par \pard\plain \s3\sb80\sa40\sl-280\slmult0\keepn\nowidctlpar \f4\fs28 NtKernQueueWorkItem
|
|
\par \pard\plain \s26\sa160\nowidctlpar \f4\fs21 Queues a work item. Use this function instead of ExQueueWorkItem().
|
|
\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(
|
|
\par \tab WORK_QUEUE_ITEM\tab *workItem,
|
|
\par \tab WORK_QUEUE_TYPE\tab workQueueType
|
|
\par \tab );
|
|
\par
|
|
\par \pard\plain \s26\sa160\widctlpar \f4\fs21 {\b Parameters:
|
|
\par }\pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i workItem
|
|
\par }\pard\plain \s30\li200\sa80\nowidctlpar \f4\fs21 Pointer to initialized work item.
|
|
\par \pard\plain \s34\sl-240\slmult0\keepn\widctlpar \f4\fs21 {\i workQueueType
|
|
\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
|
|
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.
|
|
\par } |