📄 asm.c
字号:
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number10, eax;
}
RET_BEGIN_END_INT;
}
r60Port = Read60Port();
if ( r60Port == 0 || r60Port == 0xfe)
{
ReLoadDR7();
if( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number11, eax;
}
RET_BEGIN_END_INT;
}
// 开始判断处理击键信息
if ( IsLetterCode( r60Port) && g_Buffer12H->bDoletter)
;
// 右下方的数字键按下shift时为编辑键
else if ( g_Buffer12H->ShiftDown && IsEditCtrlKey( r60Port))
;
// 以上直接跳出所有 if ,到主程序.
else
{
do
{
if ( g_IsNT4)
{
if ( IsEditCtrlKey( r60Port))
{
if ( g_r60LastRead != 0xe0 && g_r60Last2Read != 0xe0)
{
if ( g_Buffer12H->ConvertEditCtrl)
{
if ( g_r60LastRead != r60Port)
{
g_r60LastRead = r60Port;
r60Port = ConvertLetter( r60Port);
}
else if ( g_byteAsm3 != 0xe0 )
{
g_r60LastRead = r60Port;
r60Port = ConvertLetter( r60Port);
}
else
g_r60LastRead = r60Port;
g_byteAsm3 = 0;
}
else ;
// 跳出 while(FALSE)循环
}
else if ( r60Port == 0xe0)
{
g_r60Last2Read = 0xe0;
g_r60LastRead = r60Port;
}
else if ( g_r60LastRead == g_r60Last2Read)
{
g_r60Last2Read = 0xe0;
g_r60LastRead = r60Port;
}
else if ( g_r60LastRead == 0xe0 && r60Port == 0x37 || r60Port == 0xb7)
{
// 读到的是 print screen
g_r60LastRead = r60Port;
g_r60Last2Read = 0;
break;
// 跳出整个if
}
else
{
g_r60LastRead = r60Port;
g_r60Last2Read = 0;
}
}
else
g_r60LastRead = r60Port;
}
else
// xp 2k 2k3
{
if ( g_r60LastRead != 0xe0 && g_r60Last2Read != 0xe0)
{
if ( g_Buffer12H->ConvertEditCtrl)
{
g_r60LastRead = r60Port;
r60Port = ConvertLetter( r60Port);
}
else if( r60Port == 0xe0)
g_r60LastRead = 0xe0;
else ;
}
else if ( r60Port == 0xe0)
{
g_r60Last2Read = 0xe0;
g_r60LastRead = r60Port;
}
else if ( g_r60LastRead == g_r60Last2Read)
{
g_r60Last2Read = 0xe0;
g_r60LastRead = r60Port;
}
else if ( g_r60LastRead == 0xe0 || (r60Port != 0x37 && r60Port != 0xb7))
{
g_r60LastRead = r60Port;
g_r60Last2Read = 0;
}
else
{
g_r60LastRead = r60Port;
g_r60Last2Read = 0;
break;
}
}
if ( g_Buffer17H->Reserved7 == false)
{
if ( !IsInputCode( r60Port))
Input = true;
else
Input = false;
}
else if ( g_Buffer17H->Reserved7 == true)
{
if ( !IsInputPlusCode( r60Port))
Input = true;
else
Input = false;
}
if ( Input == true)
{
Var_Code.Ascii = 0;
if ( g_Buffer17H->Reserved7 == false)
{
Var_Code.Ascii = (char)LookUpAsciiByIndex2( (int)r60Port);
Var_Code.r60 = r60Port;
}
else if( g_Buffer17H->Reserved7 == true)
{
Var_Code.Ascii = (char)LookUpAsciiByIndex( (int)r60Port);
Var_Code.r60 = r60Port;
}
Var_Code.Reserved1 = NotAndSHR7( r60Port);
if ( Var_Code.Reserved1 != 0)
{
DoHash( (int*)&Var_Code);
KeInsertQueueDpc( &g_Kdpc, 0, 0);
}
if ( g_IsNT4 != 0)
{
TestKBCIdl();
Write60Port( 0);
TestKBCIdlWithNumber();
r60Port = Read60Port();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number12, eax;
if ( Number12 == 0)
{
RET_BEGIN_END_INT;
}
else
return g_KBIntEntry2;
}
else
return g_KBIntEntry1;
}
TestKBCIdlWithNumber();
// 模拟键盘,写输入寄存器将被送到输出寄存器....??
Write64Port( 0xd2);
TestKBCIdl();
Write60Port(0);
TestKBCOut();
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
if ( g_DAsm1)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number13, eax;
if ( Number13 == 0)
g_bAsm3 = true;
else
g_bAsm2 = true;
}
g_DAsm1++;
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number14, eax;
if ( Number14 == 0)
g_bAsm3 = false;
else
g_bAsm2 = false;
}
RET_BEGIN_END_INT;
}
}while(FALSE);
}
}
}
else
{
TestKBCIdlWithNumber();
r64Port = Read64Port();
if ( (r64Port&1) != 1 || (r64Port&0x20) == 0x20 )
{
Var_24 = 0;
r60Port = Read60Port();
r64Port = Read64Port();
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number15, eax;
if ( Number15 == 0)
return g_KBIntEntry1;
else
return g_KBIntEntry2;
}
else
return g_KBIntEntry1;
}
r60Port = Read60Port();
if ( r60Port == 0 || r60Port == 0xfe)
{
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number16, eax;
if ( Number16 == 0)
return g_KBIntEntry1;
else
return g_KBIntEntry2;
}
else
return g_KBIntEntry1;
}
}
if ( g_IsNT4 != false)
{
if ( g_Buffer17H->Reserved6)
{
TestKBCIdl();
Write64Port(0xd2);
TestKBCIdl();
Write60Port(0);
TestKBCOut();
TestKBCOut();
if ( r60Port == 0xe0)
g_bAsm3 = 0xe0;
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number16, eax;
if ( Number16 == 0)
return g_KBIntEntry1;
else
return g_KBIntEntry2;
}
else
return g_KBIntEntry1;
}
TestKBCIdl();
Write64Port(0xd2);
TestKBCIdl();
Write60Port( r60Port);
TestKBCOut();
TestKBCOut();
if ( r60Port == 0xe0)
g_bAsm3 = 0xe0;
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number16, eax;
if ( Number16 == 0)
return g_KBIntEntry1;
else
return g_KBIntEntry2;
}
else
return g_KBIntEntry1;
}
if ( g_Buffer17H->Reserved6)
{
TestKBCIdl();
Write64Port(0xd2);
TestKBCIdl();
Write60Port(0);
TestKBCOut();
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number16, eax;
if ( Number16 == 0)
return g_KBIntEntry1;
else
return g_KBIntEntry2;
}
else
return g_KBIntEntry1;
}
if ( g_Buffer17H->Reserved11 == true)
{
// 依次是: TAB /(???) DEL ALT CTRL ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 (F11 F12)??
// 的扫描码
if ( r60Port == 0xf || r60Port == 0x8f || r60Port == 0x35 || r60Port == 0xb5 ||
r60Port == 0x53 || r60Port == 0xd3 || r60Port == 0x38 || r60Port == 0xb8 ||
r60Port == 0x1d || r60Port == 0x9d || r60Port == 0x01 || r60Port == 0x81 ||
r60Port == 0x3b || r60Port == 0xbb || r60Port == 0x3c || r60Port == 0xbc ||
r60Port == 0x3d || r60Port == 0xbd || r60Port == 0x3e || r60Port == 0xbe ||
r60Port == 0x3f || r60Port == 0xbf || r60Port == 0x40 || r60Port == 0xc0 ||
r60Port == 0x41 || r60Port == 0xc1 || r60Port == 0x42 || r60Port == 0xc2 ||
r60Port == 0x43 || r60Port == 0xc3 || r60Port == 0x44 || r60Port == 0xc4 ||
r60Port == 0x5b || r60Port == 0x5c
)
{
TestKBCIdl();
Write64Port(0xd2);
TestKBCIdl();
Write60Port(0);
TestKBCOut();
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number16, eax;
if ( Number16 == 0)
return g_KBIntEntry1;
else
return g_KBIntEntry2;
}
else
return g_KBIntEntry1;
}
}
g_bAsm4 = r60Port;
TestKBCIdl();
Write64Port(0xd2);
TestKBCIdl();
Write60Port( r60Port);
TestKBCOut();
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number17, eax;
if ( Number17 == 0)
g_bAsm3 = true;
else
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number18, eax;
if ( Number17 == 1)
g_bAsm2 = true;
}
}
ReLoadDR7();
KfLowerIrql( NewIrql);
if ( g_IsMulProcesser)
{
__asm movzx eax, byte ptr fs:0x51;
__asm mov Number19, eax;
if ( Number19 == 0)
{
g_bAsm3 = false;
return g_KBIntEntry1;
}
else
{
g_bAsm2 = false;
return g_KBIntEntry2;
}
}
else
return g_KBIntEntry1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -