<?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; robinh00d</title>
	<atom:link href="http://www.softrce.net/archives/author/robinh00d/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月10日 -- <a href="http://www.softrce.net/archives/217" title="How to adjust the Ace of device object">How to adjust the Ace of device object</a></li><li>2008年10月22日 -- <a href="http://www.softrce.net/archives/15" title="构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器">构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器</a></li><li>2010年03月1日 -- <a href="http://www.softrce.net/archives/288" title="Steve Jobs在斯坦福大学毕业典礼上的演讲">Steve Jobs在斯坦福大学毕业典礼上的演讲</a></li><li>2009年06月1日 -- <a href="http://www.softrce.net/archives/192" title="BEIH/F：总线枚举接口劫持/伪造">BEIH/F：总线枚举接口劫持/伪造</a></li><li>2008年11月16日 -- <a href="http://www.softrce.net/archives/19" title="[转载]在英特尔软件网络博客上看到的">[转载]在英特尔软件网络博客上看到的</a></li><li>2008年10月19日 -- <a href="http://www.softrce.net/archives/14" title="Vista Bootmgr/Winload使用的大部分选项ID">Vista Bootmgr/Winload使用的大部分选项ID</a></li><li>2009年05月1日 -- <a href="http://www.softrce.net/archives/114" title="Symbian S60 3rd Reverse CrAcKiNg Tutorial">Symbian S60 3rd Reverse CrAcKiNg Tutorial</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年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>2008年10月19日 -- <a href="http://www.softrce.net/archives/13" title="[POC]基于IO Packet隐藏文件和注册表，过磁盘解析和总线解析">[POC]基于IO Packet隐藏文件和注册表，过磁盘解析和总线解析</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.softrce.net/archives/63/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>SoftRCE的Mail Server开通了！</title>
		<link>http://www.softrce.net/archives/23</link>
		<comments>http://www.softrce.net/archives/23#comments</comments>
		<pubDate>Sun, 01 Feb 2009 06:27:44 +0000</pubDate>
		<dc:creator>robinh00d</dc:creator>
				<category><![CDATA[华山论剑（Watering）]]></category>

		<guid isPermaLink="false">http://174.132.145.120/~crackidz/archives/23</guid>
		<description><![CDATA[<p>前两天在live.cn开通了SoftRCE的邮件服务器，目前支持申请500个@SoftRCE.net为后缀的邮箱，在SoftRCE内部注册过的用户可以向<strong>admin_at_softrce_dot_net</strong>发送邮件或者联系<strong>QQ：530222815</strong>申请开通邮箱，该账号可以作为邮箱和MSN使用。</p>
]]></description>
			<content:encoded><![CDATA[<p>前两天在live.cn开通了SoftRCE的邮件服务器，目前支持申请500个@SoftRCE.net为后缀的邮箱，在SoftRCE内部注册过的用户可以向<strong>admin_at_softrce_dot_net</strong>发送邮件或者联系<strong>QQ：530222815</strong>申请开通邮箱，该账号可以作为邮箱和MSN使用。</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://www.softrce.net/archives/1" rel="bookmark" title="Permanent Link: SoftRCE再次回归上线">SoftRCE再次回归上线</a></li><li><a href="http://www.softrce.net/archives/320" rel="bookmark" title="Permanent Link: SoftRCE官方T恤开始订购了~">SoftRCE官方T恤开始订购了~</a></li><li><a href="http://www.softrce.net/archives/126" rel="bookmark" title="Permanent Link: [玩笑]某人不是会坐在被告席上吧？">[玩笑]某人不是会坐在被告席上吧？</a></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年01月12日 -- <a href="http://www.softrce.net/archives/213" title="MS07-014调试手记">MS07-014调试手记</a></li><li>2009年01月10日 -- <a href="http://www.softrce.net/archives/21" title="容易被忽略的IDA快捷键">容易被忽略的IDA快捷键</a></li><li>2009年06月1日 -- <a href="http://www.softrce.net/archives/192" title="BEIH/F：总线枚举接口劫持/伪造">BEIH/F：总线枚举接口劫持/伪造</a></li><li>2010年09月13日 -- <a href="http://www.softrce.net/archives/337" title="金山毒霸2011内核溢出漏洞">金山毒霸2011内核溢出漏洞</a></li><li>2010年03月11日 -- <a href="http://www.softrce.net/archives/296" title="Think Different">Think Different</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年05月30日 -- <a href="http://www.softrce.net/archives/189" title="基于NDIS Filter 抓包">基于NDIS Filter 抓包</a></li><li>2008年10月22日 -- <a href="http://www.softrce.net/archives/15" title="构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器">构造无人之境: Exploiting Realtek RTL8139单芯片以太网控制器</a></li><li>2009年05月1日 -- <a href="http://www.softrce.net/archives/114" title="Symbian S60 3rd Reverse CrAcKiNg Tutorial">Symbian S60 3rd Reverse CrAcKiNg Tutorial</a></li><li>2008年09月29日 -- <a href="http://www.softrce.net/archives/9" title="文章预告：Exploiting Windows Device Drivers">文章预告：Exploiting Windows Device Drivers</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.softrce.net/archives/23/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

