<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SoftRCE.net &#187; Native Application</title>
	<atom:link href="http://www.softrce.net/archives/tag/native-application/feed" rel="self" type="application/rss+xml" />
	<link>http://www.softrce.net</link>
	<description>Software Reverse Code Engineering</description>
	<lastBuildDate>Tue, 13 Sep 2011 06:58:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Native Application之键盘处理</title>
		<link>http://www.softrce.net/archives/63</link>
		<comments>http://www.softrce.net/archives/63#comments</comments>
		<pubDate>Thu, 30 Apr 2009 03:20:02 +0000</pubDate>
		<dc:creator>robinh00d</dc:creator>
				<category><![CDATA[独孤九剑（Kernel）]]></category>
		<category><![CDATA[KeyboardClass]]></category>
		<category><![CDATA[Native Application]]></category>

		<guid isPermaLink="false">http://www.softrce.net/?p=63</guid>
		<description><![CDATA[作者：Robinh00d 高手可以飘过了，这段代码是用于NATIVE APPLICATION支持键盘输入用的，测试PS/2键盘好用，USB键盘未测 就是循环从KeyboardClassX里读键盘数据而已~ ?View Code C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 [...]]]></description>
			<content:encoded><![CDATA[<p>作者：Robinh00d<br />
高手可以飘过了，这段代码是用于NATIVE APPLICATION支持键盘输入用的，测试PS/2键盘好用，USB键盘未测<br />
就是循环从KeyboardClassX里读键盘数据而已~<br />
<span id="more-63"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p63code2'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p632"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
</pre></td><td class="code" id="p63code2"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define MAX_KEYBOARD_COUNT 10</span>
HANDLE hKbdTable<span style="color: #009900;">&#91;</span>MAX_KEYBOARD_COUNT<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
HANDLE hReadKbdEvt<span style="color: #009900;">&#91;</span>MAX_KEYBOARD_COUNT<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
USHORT KbdInputBuffer<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">16</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
UCHAR ScancodeTable<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">//ESC</span>
<span style="color: #ff0000;">'1'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'2'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'3'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'4'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'5'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'6'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'7'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'8'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'9'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'0'</span><span style="color: #339933;">,</span>
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>
<span style="color: #ff0000;">'Q'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'W'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'E'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'R'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'T'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'Y'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'U'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'I'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'O'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'P'</span><span style="color: #339933;">,</span>
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">//ENTER</span>
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>
<span style="color: #ff0000;">'A'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'S'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'D'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'F'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'G'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'H'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'J'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'K'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'L'</span><span style="color: #339933;">,</span>
<span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>
<span style="color: #ff0000;">'Z'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'X'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'C'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'V'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'B'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'N'</span><span style="color: #339933;">,</span><span style="color: #ff0000;">'M'</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
BOOLEAN KeyboardHandler<span style="color: #009900;">&#40;</span>PULONG pulResult<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	HANDLE hKbdDevice <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
	ULONG i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	ULONG ulKbdNum <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	PWCHAR szwKbdDeviceName <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
	OBJECT_ATTRIBUTES ObjectAttributes<span style="color: #339933;">;</span>
	NTSTATUS ntStatus <span style="color: #339933;">=</span> STATUS_UNSUCCESSFUL<span style="color: #339933;">;</span>
	UNICODE_STRING usDeviceName<span style="color: #339933;">;</span>
	PIO_STATUS_BLOCK pIoStatusBlocks <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
	LARGE_INTEGER TimeOut<span style="color: #339933;">;</span>
	LARGE_INTEGER ByteOffset<span style="color: #339933;">;</span>
	ULONG ulCharCount <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	BOOLEAN bIsEsc <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//是否输入了ESC</span>
	BOOLEAN bIsEnter <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//是否输入了回车</span>
	BOOLEAN bIsScanAllDrive <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//扫描全盘标志位</span>
	WCHAR szwPrintMsg<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">16</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	KEYBOARD_INPUT_DATA KeyboardInputData <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
	ASSERT<span style="color: #009900;">&#40;</span>pulResult <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	__asm <span style="color: #993333;">int</span> <span style="color: #0000dd;">3</span>
	szwKbdDeviceName <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PWCHAR<span style="color: #009900;">&#41;</span>RtlAllocateHeap<span style="color: #009900;">&#40;</span>Heap<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>NULL <span style="color: #339933;">==</span> szwKbdDeviceName<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> FALSE<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	pIoStatusBlocks <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PIO_STATUS_BLOCK<span style="color: #009900;">&#41;</span>RtlAllocateHeap<span style="color: #009900;">&#40;</span>Heap<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>IO_STATUS_BLOCK<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>MAX_KEYBOARD_COUNT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>NULL <span style="color: #339933;">==</span> pIoStatusBlocks<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> FALSE<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//</span>
	<span style="color: #666666; font-style: italic;">// 尝试打开系统中所有的键盘设备</span>
	<span style="color: #666666; font-style: italic;">//</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> MAX_KEYBOARD_COUNT<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		RtlZeroMemory<span style="color: #009900;">&#40;</span>szwKbdDeviceName<span style="color: #339933;">,</span> <span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		swprintf<span style="color: #009900;">&#40;</span>szwKbdDeviceName<span style="color: #339933;">,</span> L<span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>Device<span style="color: #000099; font-weight: bold;">\\</span>KeyboardClass%d&quot;</span><span style="color: #339933;">,</span> i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		RtlInitUnicodeString<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>usDeviceName<span style="color: #339933;">,</span>szwKbdDeviceName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		InitializeObjectAttributes<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>ObjectAttributes<span style="color: #339933;">,&amp;</span>usDeviceName<span style="color: #339933;">,</span>OBJ_CASE_INSENSITIVE <span style="color: #339933;">,</span>NULL<span style="color: #339933;">,</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		ntStatus <span style="color: #339933;">=</span> NtCreateFile<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>hKbdDevice<span style="color: #339933;">,</span> \
				<span style="color: #208080;">0x80100080</span><span style="color: #339933;">,</span>
				<span style="color: #339933;">&amp;</span>ObjectAttributes<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>pIoStatusBlocks<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> FILE_ATTRIBUTE_NORMAL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> NULL <span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>NT_SUCCESS<span style="color: #009900;">&#40;</span>ntStatus<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			hKbdTable<span style="color: #009900;">&#91;</span>ulKbdNum<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> hKbdDevice<span style="color: #339933;">;</span>
			InitializeObjectAttributes<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>ObjectAttributes<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			ntStatus <span style="color: #339933;">=</span> NtCreateEvent<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>hReadKbdEvt<span style="color: #009900;">&#91;</span>ulKbdNum<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x1F01FF</span><span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> SynchronizationEvent<span style="color: #339933;">,</span> FALSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			ulKbdNum<span style="color: #339933;">++;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	TimeOut.<span style="color: #202020;">QuadPart</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">10</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">1000</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">;</span>
	TimeOut.<span style="color: #202020;">QuadPart</span> <span style="color: #339933;">*=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span>
&nbsp;
	ByteOffset.<span style="color: #202020;">QuadPart</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>TRUE<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> ulKbdNum<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			ntStatus <span style="color: #339933;">=</span> NtReadFile<span style="color: #009900;">&#40;</span>hKbdTable<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> hReadKbdEvt<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>pIoStatusBlocks<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>KeyboardInputData<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>KEYBOARD_INPUT_DATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>ByteOffset<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ntStatus <span style="color: #339933;">==</span> STATUS_PENDING<span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				ntStatus <span style="color: #339933;">=</span> NtWaitForSingleObject<span style="color: #009900;">&#40;</span>hReadKbdEvt<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> FALSE<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>TimeOut<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ntStatus <span style="color: #339933;">==</span> STATUS_TIMEOUT<span style="color: #009900;">&#41;</span>
				<span style="color: #009900;">&#123;</span>
					NtCancelIoFile<span style="color: #009900;">&#40;</span>hKbdTable<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>pIoStatusBlocks<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #b1b100;">else</span>
				<span style="color: #009900;">&#123;</span>
					<span style="color: #666666; font-style: italic;">//保存数据</span>
					<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>KeyboardInputData.<span style="color: #202020;">MakeCode</span> <span style="color: #339933;">==</span> <span style="color: #208080;">0x1C</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">//如果是回车</span>
					<span style="color: #009900;">&#123;</span>
					    bIsEnter <span style="color: #339933;">=</span> TRUE<span style="color: #339933;">;</span>
					    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
					<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>KeyboardInputData.<span style="color: #202020;">MakeCode</span> <span style="color: #339933;">==</span> <span style="color: #208080;">0x01</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">//如果是ESC</span>
					<span style="color: #009900;">&#123;</span>
					    bIsEsc <span style="color: #339933;">=</span> TRUE<span style="color: #339933;">;</span>
					    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
					<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>KeyboardInputData.<span style="color: #202020;">MakeCode</span> <span style="color: #339933;">==</span> <span style="color: #208080;">0x3B</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">//如果是F1键 则扫描全盘</span>
					<span style="color: #009900;">&#123;</span>
					    bIsScanAllDrive <span style="color: #339933;">=</span> TRUE<span style="color: #339933;">;</span>
					    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
&nbsp;
					<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>KeyboardInputData.<span style="color: #202020;">Flags</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
					<span style="color: #009900;">&#123;</span>
					    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>KeyboardInputData.<span style="color: #202020;">MakeCode</span><span style="color: #339933;">&lt;</span>sizeof<span style="color: #009900;">&#40;</span>ScancodeTable<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #009900;">&#123;</span>
                            <span style="color: #666666; font-style: italic;">//则不做任何处理</span>
                            swprintf<span style="color: #009900;">&#40;</span>szwPrintMsg<span style="color: #339933;">,</span> L<span style="color: #ff0000;">&quot;%c&quot;</span><span style="color: #339933;">,</span> ScancodeTable<span style="color: #009900;">&#91;</span>KeyboardInputData.<span style="color: #202020;">MakeCode</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					        DisplayString<span style="color: #009900;">&#40;</span>szwPrintMsg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ulCharCount <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #0000dd;">16</span><span style="color: #009900;">&#41;</span>
					            KbdInputBuffer<span style="color: #009900;">&#91;</span>ulCharCount<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> ScancodeTable<span style="color: #009900;">&#91;</span>KeyboardInputData.<span style="color: #202020;">MakeCode</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//如果输入了回车或者ESC键则停止记录键盘</span>
&nbsp;
	    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bIsEnter<span style="color: #009900;">&#41;</span>
	    <span style="color: #009900;">&#123;</span>
	        <span style="color: #339933;">*</span>pulResult <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
	    <span style="color: #009900;">&#125;</span>
	    <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bIsEsc<span style="color: #009900;">&#41;</span>
	    <span style="color: #009900;">&#123;</span>
	        <span style="color: #339933;">*</span>pulResult <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
	        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
	    <span style="color: #009900;">&#125;</span>
	    <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bIsScanAllDrive<span style="color: #009900;">&#41;</span>
	    <span style="color: #009900;">&#123;</span>
	        <span style="color: #339933;">*</span>pulResult <span style="color: #339933;">=</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span>
	        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
	    <span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> TRUE<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="padding-left: 30px;">效果：</p>
<p style="padding-left: 30px;"><img class="aligncenter size-full wp-image-64" title="GetKbdDemo" src="http://www.softrce.net/wp-content/uploads/2009/04/demo.jpg" alt="GetKbdDemo" width="651" height="241" /></p>
</pre>
<hr /><h2>Comments</h2><ul><li><a href="http://www.softrce.net/archives/63">2009年04月30日</a>, gz1x writes: 挺好玩的。</li><li><a href="http://www.softrce.net/archives/63">2009年04月30日</a>, gz1x writes: 好像代码贴的有问题。</li><li><a href="http://www.softrce.net/archives/63">2009年04月30日</a>, robinh00d writes: 我少贴了几个全局变量~ 一会加上 还有 代码高亮功能还没弄好，等晚上ayarei下课后再弄~</li><li><a href="http://www.softrce.net/archives/63">2009年04月30日</a>, ayarei writes: 其实贴完整代码没什么意思呀~还是有点悬念自己改改的好~</li><li><a href="http://www.softrce.net/archives/63">2009年04月30日</a>, Rinrin writes: TinyKRNL里有个NCLI,不过只能处理一个键盘</li><li><a href="http://www.softrce.net/archives/63">2009年05月1日</a>, Azy writes: 不错。。。</li><li><a href="http://www.softrce.net/archives/63">2009年05月3日</a>, mengxp writes: 那行字没空格 -.-</li><li><a href="http://www.softrce.net/archives/63">2009年05月3日</a>, robinh00d writes: 没支持空格～</li><li><a href="http://www.softrce.net/archives/63">2009年06月1日</a>, 0x4 writes: 怎么tab跟空格混用的，真难看

全部替换成空格多好。</li><li><a href="http://www.softrce.net/archives/63">2009年07月31日</a>, 49513524 writes: 郁闷,对于大菜鸟来说代码贴不全很郁闷的.</li></ul><hr /><small>Copyright &copy; 2008<br /> This feed is for personal, non-commercial use only. <br /> The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:<br /> 8e761b2ea8edc3ca311452b020051837)</small><h3  class="related_post_title">随机日志</h3><ul class="related_post"><li>2010年02月21日 -- <a href="http://www.softrce.net/archives/256" title="Step deeply into NDIS6 LightWeight Filter, part 1">Step deeply into NDIS6 LightWeight Filter, part 1</a></li><li>2011年04月8日 -- <a href="http://www.softrce.net/archives/381" title="Microsoft Windows xp AFD.sys Local Kernel DoS Vulnerability">Microsoft Windows xp AFD.sys Local Kernel DoS Vulnerability</a></li><li>2008年10月22日 -- <a href="http://www.softrce.net/archives/15" title="构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器">构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器</a></li><li>2011年09月13日 -- <a href="http://www.softrce.net/archives/405" title="Microsoft Windows NDISTAPI本地权限提升漏洞（MS11-062)">Microsoft Windows NDISTAPI本地权限提升漏洞（MS11-062)</a></li><li>2009年12月27日 -- <a href="http://www.softrce.net/archives/210" title="Symbian_S60_3rd_Application_Cracking_With_IDA_Remote_Debugger_Tutorial">Symbian_S60_3rd_Application_Cracking_With_IDA_Remote_Debugger_Tutorial</a></li><li>2010年09月13日 -- <a href="http://www.softrce.net/archives/337" title="金山毒霸2011内核溢出漏洞">金山毒霸2011内核溢出漏洞</a></li><li>2009年05月1日 -- <a href="http://www.softrce.net/archives/96" title="暴风影音2009(mps.dll)ActiveX远程栈溢出漏洞">暴风影音2009(mps.dll)ActiveX远程栈溢出漏洞</a></li><li>2009年01月10日 -- <a href="http://www.softrce.net/archives/21" title="容易被忽略的IDA快捷键">容易被忽略的IDA快捷键</a></li><li>2008年10月9日 -- <a href="http://www.softrce.net/archives/11" title="About the SMM rootkit">About the SMM rootkit</a></li><li>2010年05月7日 -- <a href="http://www.softrce.net/archives/310" title="IoRegisterDriverReinitialization 和IoRegisterBootDriverReinitialization">IoRegisterDriverReinitialization 和IoRegisterBootDriverReinitialization</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.softrce.net/archives/63/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

