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

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

?? kbdspy.bat

?? KmdKit 匯編下開發(fā)驅動的工具 由俄羅斯某強男開發(fā)
?? BAT
?? 第 1 頁 / 共 3 頁
字號:
;@echo off
;goto make

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;  KbdSpy - This is an example of a simple legacy keyboard filter driver.
;
;  WARNING: You will fail to attach to USB-keyboard stack
;
;  We create two device objects. The first one is a control device. It provides
;  the interface to our user-mode client. The second device is a filter device.
;  It intercepts keyboard data being passed from the keyboard class driver.
;  So, it is an upper filter.  The intercepted data is collected in the list.
;  Upon timer triggering we signal shared event object to notify our user-mode
;  client about there is something interesting for it.  The user-mode client
;  issues control request and we copy all info into the buffer.
;
;  Written by Four-F (four-f@mail.ru)
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.486
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\ntoskrnl.inc
include \masm32\include\w2k\ntddkbd.inc
include \masm32\include\w2k\hal.inc

includelib \masm32\lib\w2k\ntoskrnl.lib
includelib \masm32\lib\w2k\hal.lib

include \masm32\Macros\Strings.mac

include ..\common.inc

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       M A C R O S                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

; spin lock macros

LOCK_ACQUIRE MACRO lck:REQ
	; Returns old IRQL in al
	IF (OPATTR (lck)) AND 00010000y
		;; Is a register value
		IFDIFI <lck>, <ecx>	;; don't move ecx onto itself
			mov ecx, lck
		ENDIF
	ELSEIF (OPATTR (lck)) AND 01000000y
		;; relative to SS
		lea ecx, lck
	ELSE
		mov ecx, offset lck
	ENDIF
	fastcall KfAcquireSpinLock, ecx
ENDM

LOCK_RELEASE MACRO lck:REQ, NewIrql:REQ
	IF (OPATTR (lck)) AND 00010000y
		;; Is a register value
		IFDIFI <lck>, <ecx>	;; don't move ecx onto itself
			mov ecx, lck
		ENDIF
	ELSEIF (OPATTR (lck)) AND 01000000y
		;; relative to SS
		lea ecx, lck
	ELSE
		mov ecx, offset lck
	ENDIF

	IFDIFI <NewIrql>, <dl>	;; don't move dl onto itself
		mov dl, NewIrql
	ENDIF

	.if dl == DISPATCH_LEVEL
		fastcall KefReleaseSpinLockFromDpcLevel, ecx
	.else
		and edx, 0FFh		;; for shure (KIRQL is BYTE)
		fastcall KfReleaseSpinLock, ecx, edx
	.endif
ENDM

; mutex macros

MUTEX_INIT MACRO mtx:REQ
	IF (OPATTR (mtx)) AND 00010000y
		;; Is a register value
		invoke KeInitializeMutex, mtx, 0
	ELSEIF (OPATTR (mtx)) AND 01000000y
		;; relative to SS
		invoke KeInitializeMutex, addr mtx, 0
	ELSE
		invoke KeInitializeMutex, offset mtx, 0
	ENDIF
ENDM

MUTEX_ACQUIRE MACRO mtx:REQ
	IF (OPATTR (mtx)) AND 00010000y
		;; Is a register value
		invoke KeWaitForMutexObject, mtx, Executive, KernelMode, FALSE, NULL
	ELSEIF (OPATTR (mtx)) AND 01000000y
		;; relative to SS
		invoke KeWaitForMutexObject, addr mtx, Executive, KernelMode, FALSE, NULL
	ELSE
		invoke KeWaitForMutexObject, offset mtx, Executive, KernelMode, FALSE, NULL
	ENDIF
ENDM

MUTEX_RELEASE MACRO mtx:REQ
	IF (OPATTR (mtx)) AND 00010000y
		;; Is a register value
		invoke KeReleaseMutex, mtx, FALSE
	ELSEIF (OPATTR (mtx)) AND 01000000y
		;; relative to SS
		invoke KeReleaseMutex, addr mtx, FALSE
	ELSE
		invoke KeReleaseMutex, offset mtx, FALSE
	ENDIF
ENDM

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                     S T R U C T U R E S                                           
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

KEY_DATA_ENTRY STRUCT
	ListEntry	LIST_ENTRY	<>	; For memory blocks tracking.
	KeyData		KEY_DATA	<>
KEY_DATA_ENTRY ENDS

FiDO_DEVICE_EXTENSION STRUCT

	; The top of the stack before this filter was added

	pNextLowerDeviceObject	PDEVICE_OBJECT	?

	; The referenced pointer to file object that represents
	; the corresponding device object.  This pointer we get
	; from IoGetDeviceObjectPointer and must dereference
	; while detaching.

	pTargetFileObject	PFILE_OBJECT	?

FiDO_DEVICE_EXTENSION ENDS
PFiDO_DEVICE_EXTENSION typedef ptr FiDO_DEVICE_EXTENSION

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                 R E A D O N L Y    D A T A                                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.const

CCOUNTED_UNICODE_STRING	"\\Device\\KbdSpy", g_usControlDeviceName, 4
CCOUNTED_UNICODE_STRING	"\\DosDevices\\KbdSpy", g_usSymbolicLinkName, 4

CCOUNTED_UNICODE_STRING	"\\Device\\KeyboardClass0", g_usTargetDeviceName, 4

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                              U N I N I T I A L I Z E D  D A T A                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.data?

g_pDriverObject					PDRIVER_OBJECT	?

g_pControlDeviceObject			PDEVICE_OBJECT	?	; Control Device Object pointer
g_pFilterDeviceObject			PDEVICE_OBJECT	?	; Filter Device Object pointer

g_pEventObject					PKEVENT			?
; This spin-lock let us be sure that no one will dereference event object pointer
; while we compare it agaist NULL and then call KeSetEvent in our completion routine
g_EventSpinLock					KSPIN_LOCK		?	; locks key data list

g_fCDO_Opened					BOOL			?
g_fFiDO_Attached				BOOL			?
g_fSpy							BOOL			?

g_dwPendingRequests				DWORD			?

align 4
g_pKeyDataLookaside				PNPAGED_LOOKASIDE_LIST	?

align 4
g_KeyDataListHead				LIST_ENTRY		<>	; accessed under lock

; Holds number of KEY_DATA_ENTRYs in list. Should not exceed MAX_KEY_DATA_ENTRIES.
g_cKeyDataEntries				SDWORD			?	; accessed under lock

; This spin-lock let us be sure that only one thread is working with key data at a time
g_KeyDataSpinLock				KSPIN_LOCK		?

; This mutex let us be sure no one will try to do some unpredictable things.
; For example: no one can try to attach while we in the middle of the detaching.
align 4
g_mtxCDO_State					KMUTEX		<>

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                         C O D E                                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.code

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                              _ExAllocateFromNPagedLookasideList                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

_ExAllocateFromNPagedLookasideList proc uses esi Lookaside:PNPAGED_LOOKASIDE_LIST

;; Function Description:
;;    This function removes (pops) the first entry from the specified
;;    nonpaged lookaside list.
;;
;; Arguments:
;;    Lookaside - Supplies a pointer to a nonpaged lookaside list structure.
;;
;; Return Value:
;;    If an entry is removed from the specified lookaside list, then the
;;    address of the entry is returned as the function value. Otherwise,
;;    NULL is returned.

	mov esi, Lookaside
	assume esi:ptr NPAGED_LOOKASIDE_LIST
	mov ecx, esi
	inc [esi].L.TotalAllocates
	lea edx, [esi]._Lock
	fastcall ExInterlockedPopEntrySList, ecx, edx
	.if eax == NULL
		push [esi].L.Tag
		inc [esi].L.AllocateMisses
		push [esi].L._Size
		push [esi].L._Type
		call [esi].L.Allocate
	.endif
	assume esi:nothing

	ret

_ExAllocateFromNPagedLookasideList endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  _ExFreeToNPagedLookasideList                                     
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

_ExFreeToNPagedLookasideList proc Lookaside:PNPAGED_LOOKASIDE_LIST, Entry:PVOID

;; Function Description:
;;    This function inserts (pushes) the specified entry into the specified
;;    nonpaged lookaside list.
;;
;; Arguments:
;;    Lookaside - Supplies a pointer to a nonpaged lookaside list structure.
;;    Entry - Supples a pointer to the entry that is inserted in the lookaside list.
;;
;; Return Value:
;;    None.

	mov ecx, Lookaside
	assume ecx:ptr NPAGED_LOOKASIDE_LIST
	inc [ecx].L.TotalFrees
	mov ax, [ecx].L.ListHead.Depth
	.if ax >= [ecx].L.Depth
		push Entry
		inc [ecx].L.FreeMisses
		call [ecx].L.Free
	.else
		mov edx, Entry
		lea eax, [ecx]._Lock
		fastcall ExInterlockedPushEntrySList, ecx, edx, eax
	.endif
	assume ecx:nothing

	ret

_ExFreeToNPagedLookasideList endp
		
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                         AddEntry                                                  
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

AddEntry proc uses ebx pKeyData:PKEY_DATA

; We have to access g_cKeyDataEntries and g_KeyDataListHead
; under lock protection. Since keyboard hits occur relatively rare
; we simply protect whole code.  So, this proc may be optimized a little.

	LOCK_ACQUIRE g_KeyDataSpinLock
	mov bl, al			; old IRQL

	.if g_cKeyDataEntries < MAX_KEY_DATA_ENTRIES

		; Allocate new entry from lookaside list
	
		invoke _ExAllocateFromNPagedLookasideList, g_pKeyDataLookaside
		.if eax != NULL

			mov edx, eax
			assume edx:ptr KEY_DATA_ENTRY

			mov ecx, pKeyData
			assume ecx:ptr KEY_DATA

			mov eax, [ecx].dwScanCode
			mov [edx].KeyData.dwScanCode, eax

			mov eax, [ecx].Flags
			mov [edx].KeyData.Flags, eax

			assume ecx:nothing

			; Add to head

			lea ecx, [edx].ListEntry
			InsertHeadList addr g_KeyDataListHead, ecx

			assume edx:nothing

			inc g_cKeyDataEntries
    
		.endif
	.endif

	LOCK_RELEASE g_KeyDataSpinLock, bl

	ret

AddEntry endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       RemoveEntry                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

RemoveEntry proc uses ebx pBuffer:PVOID

local cbCopied:DWORD

	and cbCopied, 0
	
	; We have to access g_cKeyDataEntries and g_KeyDataListHead
	; under lock protection. Since keyboard hits occur relatively rare
	; we simply protect whole code.  So, this proc may be optimized a little.
	
	LOCK_ACQUIRE g_KeyDataSpinLock
	mov bl, al							; old IRQL

	IsListEmpty addr g_KeyDataListHead
	.if eax != TRUE							; Is there something to remove?
			
		; Remove from tail

		RemoveTailList addr g_KeyDataListHead

		mov edx, eax						; edx -> KEY_DATA_ENTRY.ListEntry
		sub edx, KEY_DATA_ENTRY.ListEntry	; edx -> KEY_DATA_ENTRY

		assume edx:ptr KEY_DATA_ENTRY

		mov ecx, pBuffer
		assume ecx:ptr KEY_DATA

		mov eax, [edx].KeyData.dwScanCode
		mov [ecx].dwScanCode, eax

		mov eax, [edx].KeyData.Flags
		mov [ecx].Flags, eax

		mov cbCopied, sizeof KEY_DATA

		assume ecx:nothing
		assume edx:nothing

		; Put a block back onto lookaside list

		invoke _ExFreeToNPagedLookasideList, g_pKeyDataLookaside, edx

		dec g_cKeyDataEntries

	.endif

	LOCK_RELEASE g_KeyDataSpinLock, bl

	mov eax, cbCopied
	ret

RemoveEntry endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                      KeyboardAttach                                               
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

KeyboardAttach proc

local status:NTSTATUS
local pTargetDeviceObject:PDEVICE_OBJECT
local pTargetFileObject:PFILE_OBJECT

	invoke DbgPrint, $CTA0("KbdSpy: Entering KeyboardAttach\n")

	mov status, STATUS_UNSUCCESSFUL

	.if ( g_pFilterDeviceObject != NULL )

		; Filter device object exist and should be attached

		mov status, STATUS_SUCCESS

	.else

		; Let's attach to keyboard device stack
		;
		; Create unnamed device because filter device objects should never be named.
		; We are going to attach it to existing keyboard device stack. So no one may
		; directly open filter device by name.
		
		mov eax, g_pControlDeviceObject
		mov ecx, (DEVICE_OBJECT PTR [eax]).DriverObject

		invoke IoCreateDevice, ecx, sizeof FiDO_DEVICE_EXTENSION, NULL, \
					FILE_DEVICE_UNKNOWN, 0, FALSE, addr g_pFilterDeviceObject
		.if eax == STATUS_SUCCESS
	
			; Supply a name for any device object in the stack we are about to attach to.
			; IoGetDeviceObjectPointer returns the pointer to upper most device object in the stack.

			invoke IoGetDeviceObjectPointer, addr g_usTargetDeviceName, FILE_READ_DATA, \
										addr pTargetFileObject, addr pTargetDeviceObject
			.if eax == STATUS_SUCCESS
    
				; Here we have two pointers: pointer to the topmost device in the keyboard stack
				; and pointer to the corresponding file object.  IoGetDeviceObjectPointer
				; references file object but not the device object.
				;
				; We are just one line from attaching to our target.  We must prevent
				; our driver from unloading while it intercepts keyboard IRPs.
				; We could use RemoveLock, but the easiest solution is to remove pointer

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合欧美在线视频区| 国产在线视视频有精品| 欧美性感一类影片在线播放| 亚洲卡通欧美制服中文| 色婷婷精品大视频在线蜜桃视频| 一个色在线综合| 欧美一区二区在线播放| 久久精品国产久精国产爱| 精品国产sm最大网站| 东方欧美亚洲色图在线| 一区二区三区日韩欧美精品| 欧美日韩一区精品| 裸体一区二区三区| 国产午夜精品福利| 日本韩国欧美一区| 亚洲成人免费av| 精品国产电影一区二区| av亚洲精华国产精华精华| 亚洲最新视频在线播放| 欧美放荡的少妇| 国产成人精品一区二区三区网站观看| 国产精品第13页| 91麻豆精品国产91久久久使用方法| 秋霞电影一区二区| 国产精品伦理一区二区| 欧美日韩不卡在线| 成人亚洲精品久久久久软件| 亚洲自拍偷拍图区| 久久亚洲一级片| 色诱亚洲精品久久久久久| 蜜臀91精品一区二区三区 | proumb性欧美在线观看| 日韩国产一二三区| 久久九九久久九九| 欧美日韩精品一区二区天天拍小说 | 狠狠色丁香婷婷综合久久片| 亚洲女同女同女同女同女同69| 欧美一级片免费看| 97国产精品videossex| 麻豆精品在线播放| 一区二区欧美精品| 久久色视频免费观看| 欧美亚洲综合色| 国产不卡在线一区| 日韩成人免费电影| 亚洲人成网站影音先锋播放| 精品美女一区二区三区| 欧美三级欧美一级| 成人的网站免费观看| 久久精品国产久精国产| 一区二区三区在线高清| 欧美—级在线免费片| 欧美不卡一区二区三区四区| 欧美色涩在线第一页| 99久久婷婷国产| 成人激情视频网站| 国内久久婷婷综合| 裸体健美xxxx欧美裸体表演| 亚洲自拍与偷拍| 一区二区三区四区乱视频| 中文字幕不卡的av| 久久久精品国产免大香伊| 欧美一区二区三区四区高清| 欧美亚洲一区三区| 欧美亚洲一区二区在线观看| 91黄色激情网站| 91麻豆免费看| 色综合天天综合网国产成人综合天 | 不卡的看片网站| 高清免费成人av| 国产成人av影院| 国产乱码精品一品二品| 久久69国产一区二区蜜臀| 日韩二区三区在线观看| 日韩精品亚洲一区| 人人狠狠综合久久亚洲| 麻豆国产欧美日韩综合精品二区| 欧美a级一区二区| 免费成人结看片| 九九九精品视频| 久久97超碰色| 国产成人99久久亚洲综合精品| 国产69精品久久久久毛片| 成人激情开心网| 日本久久一区二区三区| 在线观看日韩高清av| 欧美午夜影院一区| 欧美一区二区三区色| 日韩一级二级三级精品视频| 日韩精品在线一区| 久久精品免视看| 亚洲天堂久久久久久久| 亚洲一区二区三区在线播放 | 麻豆精品在线看| 国产成人自拍网| 91小视频在线| 欧美日本视频在线| 精品国产乱码久久久久久蜜臀 | 国产中文一区二区三区| 成人精品国产一区二区4080| 欧美在线播放高清精品| 欧美电影免费观看高清完整版在| 日韩欧美一区电影| 中文字幕欧美日韩一区| 一区二区三区在线高清| 精品在线观看视频| voyeur盗摄精品| 欧美一区二区三区性视频| 久久色中文字幕| 亚洲一二三区不卡| 国产一区二区精品在线观看| 日本福利一区二区| 欧美va亚洲va国产综合| 日韩理论片在线| 日本va欧美va精品| 不卡一区在线观看| 欧美大片国产精品| 亚洲另类春色国产| 韩国成人精品a∨在线观看| 日本精品免费观看高清观看| 精品国产伦一区二区三区免费 | 久久99热这里只有精品| 91丝袜美腿高跟国产极品老师 | 久久99久久精品| 欧美午夜宅男影院| 国产日韩欧美a| 三级久久三级久久久| 不卡在线观看av| 欧美精品一区二区久久久| 亚洲美女在线一区| 国产精品亚洲第一| 欧美一区二区视频观看视频| 亚洲少妇30p| 国产99久久久精品| 欧美一区二区三区不卡| 一区二区高清在线| a4yy欧美一区二区三区| 2017欧美狠狠色| 五月婷婷久久综合| 91毛片在线观看| 国产精品婷婷午夜在线观看| 精品一区二区三区在线播放视频 | 亚洲裸体在线观看| 高清av一区二区| 精品久久久久99| 日韩国产精品久久| 欧美伊人精品成人久久综合97 | 欧美日韩国产综合久久| 一个色在线综合| 色噜噜狠狠色综合欧洲selulu| 久久精品人人爽人人爽| 韩国成人福利片在线播放| 91精品国产91久久久久久最新毛片| 亚洲精选视频在线| 91一区二区在线| 亚洲视频免费看| 99久久精品国产毛片| 国产精品嫩草99a| 成人激情小说乱人伦| 中文av一区二区| 国产成人午夜精品影院观看视频| 日韩免费电影一区| 久久国产成人午夜av影院| 日韩视频免费观看高清完整版在线观看 | 欧美日韩综合一区| 亚洲成人tv网| 欧美酷刑日本凌虐凌虐| 日韩精品一二三四| 精品久久久影院| 国产精品一级黄| 国产免费成人在线视频| 丰满亚洲少妇av| 中文字幕一区二区不卡| av欧美精品.com| 亚洲午夜国产一区99re久久| 欧美三级乱人伦电影| 美腿丝袜亚洲一区| 久久久www免费人成精品| 成人免费毛片片v| 中文字幕一区二区三区不卡| 色综合久久天天| 三级亚洲高清视频| 精品福利一二区| 99视频一区二区三区| 一区二区三区在线免费视频| 欧美日韩美女一区二区| 蜜桃av噜噜一区二区三区小说| 欧美精品一区二区三区高清aⅴ | 婷婷六月综合亚洲| 日韩女优电影在线观看| 国产精一品亚洲二区在线视频| 欧美高清一级片在线观看| www.综合网.com| 午夜精品123| 国产亚洲欧洲一区高清在线观看| 91在线视频18| 蜜臀av性久久久久av蜜臀妖精| 国产日韩欧美a| 欧美日韩精品一区视频| 国产大片一区二区|