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

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

?? mouspy.bat

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

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;  MouSpy - This is an example of a simple legacy mouse filter driver
;
;  WARNING: You will fail to attach to USB-mouse 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 mouse data being passed from the mouse 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\ntddmou.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                                           
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

MOUSE_DATA_ENTRY STRUCT
	ListEntry	LIST_ENTRY	<>		; For memory blocks tracking.
	MouseData	MOUSE_DATA	<>
MOUSE_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\\MouSpy", g_usControlDeviceName, 4
CCOUNTED_UNICODE_STRING	"\\DosDevices\\MouSpy", g_usSymbolicLinkName, 4

CCOUNTED_UNICODE_STRING	"\\Device\\PointerClass0", 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 mouse data list

g_fCDO_Opened					BOOL			?
g_fFiDO_Attached				BOOL			?
g_fSpy							BOOL			?

g_dwPendingRequests				DWORD			?

align 4
g_pMouseDataLookaside			PNPAGED_LOOKASIDE_LIST	?

align 4
g_MouseDataListHead				LIST_ENTRY		<>	; accessed under lock

; Holds number of MOUSE_DATA_ENTRYs in list. Should not exceed MAX_MOUSE_DATA_ENTRIES.
g_cMouseDataEntries				SDWORD			?	; accessed under lock

; This spin-lock let us be sure that only one thread is working with mouse data at a time
g_MouseDataSpinLock				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		<>

g_fInvertButtons				BOOL		?
g_fInvertMovement				BOOL		?

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                         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 pMouseData:PMOUSE_DATA

; We have to access g_cMouseDataEntries and g_MouseDataListHead
; under lock protection. Since mouse movement occur relatively rare
; we simply protect whole code.  So, this proc may be optimized a little.

	LOCK_ACQUIRE g_MouseDataSpinLock
	mov bl, al			; old IRQL

	.if g_cMouseDataEntries < MAX_MOUSE_DATA_ENTRIES

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

			mov edx, eax
			assume edx:ptr MOUSE_DATA_ENTRY

			mov ecx, pMouseData
			assume ecx:ptr MOUSE_DATA

			mov eax, [ecx].LastX
			mov [edx].MouseData.LastX, eax

			mov eax, [ecx].LastY
			mov [edx].MouseData.LastY, eax

			mov eax, [ecx].Buttons
			mov [edx].MouseData.Buttons, eax

			assume ecx:nothing

			; Add to head

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

			assume edx:nothing

			inc g_cMouseDataEntries

		.endif
	.endif

	LOCK_RELEASE g_MouseDataSpinLock, bl

	ret

AddEntry endp

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

RemoveEntry proc uses ebx pBuffer:PVOID

local cbCopied:DWORD

	and cbCopied, 0
	
	; We have to access g_cMouseDataEntries and g_MouseDataListHead
	; under lock protection. Since mouse movements occur relatively rare
	; we simply protect whole code.  So, this proc may be optimized a little.
	
	LOCK_ACQUIRE g_MouseDataSpinLock
	mov bl, al							; old IRQL

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

		RemoveTailList addr g_MouseDataListHead

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

		assume edx:ptr MOUSE_DATA_ENTRY

		mov ecx, pBuffer
		assume ecx:ptr MOUSE_DATA

		mov eax, [edx].MouseData.LastX
		mov [ecx].LastX, eax

		mov eax, [edx].MouseData.LastY
		mov [ecx].LastY, eax

		mov eax, [edx].MouseData.Buttons
		mov [ecx].Buttons, eax

		mov cbCopied, sizeof MOUSE_DATA

		assume ecx:nothing
		assume edx:nothing

		; Put a block back onto lookaside list

		invoke _ExFreeToNPagedLookasideList, g_pMouseDataLookaside, edx

		dec g_cMouseDataEntries

	.endif

	LOCK_RELEASE g_MouseDataSpinLock, bl

	mov eax, cbCopied
	ret

RemoveEntry endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       MouseAttach                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

MouseAttach proc

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

	invoke DbgPrint, $CTA0("MouSpy: Entering MouseAttach\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 mouse device stack
		;
		; Create unnamed device because filter device objects should never be named.
		; We are going to attach it to existing mouse 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 mouse 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 mouse IRPs.
				; We could use RemoveLock, but the easiest solution is to remove pointer
				; to DriverUnload routine from driver object. OK, let's do it.

				mov eax, g_pDriverObject
				and (DRIVER_OBJECT PTR [eax]).DriverUnload, NULL
			
				; Now our driver is not unloadable

				invoke IoAttachDeviceToDeviceStack, g_pFilterDeviceObject, pTargetDeviceObject
				.if eax != NULL

					mov edx, eax

					; Fill filter device object extension

					mov ecx, g_pFilterDeviceObject
					mov eax, (DEVICE_OBJECT ptr [ecx]).DeviceExtension
					assume eax:ptr FiDO_DEVICE_EXTENSION
					mov [eax].pNextLowerDeviceObject, edx
					push pTargetFileObject
					pop [eax].pTargetFileObject
					assume eax:nothing

					; We need to copy DeviceType and Characteristics from the target device object

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
5566中文字幕一区二区电影| 一区二区三区不卡在线观看| 成人欧美一区二区三区黑人麻豆 | 成人爱爱电影网址| 日韩午夜av电影| 亚洲精品网站在线观看| 国产精品羞羞答答xxdd| 91精品国产综合久久国产大片| 国产精品久久久久久亚洲毛片| 久久国产人妖系列| 欧美日本国产视频| 综合久久给合久久狠狠狠97色| 青娱乐精品视频| 欧美人xxxx| 亚洲天堂a在线| 成人性色生活片| 久久久久99精品国产片| 老汉av免费一区二区三区| 欧美视频完全免费看| 亚洲精品菠萝久久久久久久| fc2成人免费人成在线观看播放| 精品久久国产老人久久综合| 秋霞成人午夜伦在线观看| 欧美挠脚心视频网站| 亚洲综合免费观看高清完整版| 91免费视频网| 亚洲免费视频中文字幕| 成人国产精品免费网站| 国产午夜精品美女毛片视频| 麻豆国产一区二区| 精品久久久久久久人人人人传媒 | 五月婷婷激情综合网| 色呦呦一区二区三区| 自拍偷拍亚洲激情| 91美女片黄在线观看| 中文天堂在线一区| 国产91精品一区二区麻豆网站| 精品久久国产97色综合| 国产成人在线免费| 国产精品久久久99| 在线看不卡av| 午夜视黄欧洲亚洲| 日韩免费看的电影| 国产一区二区三区黄视频 | 成人18视频日本| 欧美国产激情二区三区 | 国内精品视频一区二区三区八戒| 欧美一级视频精品观看| 日本大胆欧美人术艺术动态| 欧美一卡二卡三卡| 国产美女娇喘av呻吟久久| 国产精品视频免费| 在线观看中文字幕不卡| 天堂一区二区在线| 精品国产伦一区二区三区观看体验 | 午夜精品久久久久久久99樱桃| 欧美日韩五月天| 国内精品嫩模私拍在线| 亚洲婷婷在线视频| 欧美精品在线视频| 国产不卡免费视频| 亚洲图片欧美色图| 欧美大片免费久久精品三p| 粉嫩av一区二区三区粉嫩| 亚洲免费观看视频| 欧美一级午夜免费电影| 成人午夜电影久久影院| 性做久久久久久久久| 精品久久国产97色综合| 91蜜桃在线免费视频| 精品一二三四区| 一区二区三区色| 久久久久久亚洲综合影院红桃| 91同城在线观看| 激情五月婷婷综合| 亚洲黄色av一区| 日本一区二区视频在线| 欧美日韩国产高清一区二区| 国产suv一区二区三区88区| 午夜电影一区二区三区| 亚洲丝袜美腿综合| 国产丝袜在线精品| 日韩一区二区电影在线| 91成人国产精品| 丁香桃色午夜亚洲一区二区三区| 视频在线观看一区| 自拍偷拍国产亚洲| 久久婷婷综合激情| 日韩一级黄色片| 欧美日韩精品欧美日韩精品一 | 成人精品小蝌蚪| 美女免费视频一区| 午夜影院久久久| 亚洲精品视频一区二区| 国产精品色噜噜| 亚洲精品一线二线三线| 欧美日免费三级在线| 日本道精品一区二区三区| 成人在线综合网站| 大胆亚洲人体视频| 国产成人免费视频| 精品一区二区三区免费毛片爱| 亚洲6080在线| 午夜激情一区二区三区| 一区二区三区欧美激情| 亚洲人成网站色在线观看| 中文字幕在线不卡| 国产精品毛片久久久久久久| 中文字幕免费不卡| 国产欧美一区二区三区在线老狼| 精品久久国产97色综合| 久久综合色综合88| 久久嫩草精品久久久久| 久久久久青草大香线综合精品| 精品国产乱码久久久久久夜甘婷婷| 欧美美女直播网站| 欧美一二区视频| 日韩欧美国产wwwww| 精品伦理精品一区| 国产日本欧洲亚洲| 亚洲欧洲国产日韩| 一区二区三区欧美激情| 亚洲成人资源网| 日本美女一区二区三区| 久久不见久久见免费视频1 | 亚洲动漫第一页| 日韩高清在线一区| 久久99精品久久久久久国产越南| 久草热8精品视频在线观看| 九九精品视频在线看| 风间由美一区二区av101| 不卡在线视频中文字幕| 99久久伊人久久99| 欧美在线观看你懂的| 日韩一级二级三级| 中文字幕乱码久久午夜不卡| 亚洲欧美在线视频| 亚洲成av人片| 国产麻豆精品一区二区| www.欧美日韩| 欧美高清dvd| 久久久亚洲午夜电影| 亚洲精品美腿丝袜| 日韩国产欧美视频| 成人黄色a**站在线观看| 欧美写真视频网站| 久久综合久久综合久久| 一区二区三区电影在线播| 免费精品视频最新在线| www.色综合.com| 欧美一级夜夜爽| 亚洲欧洲日韩女同| 美女视频黄久久| 在线视频国内一区二区| 日韩免费福利电影在线观看| 国产精品久久99| 精品无人码麻豆乱码1区2区 | 亚洲综合成人在线| 久久精品国产亚洲a| 91污在线观看| 欧美精品一区二区三区在线播放| 亚洲精品久久嫩草网站秘色| 极品少妇xxxx精品少妇偷拍| 欧美在线影院一区二区| 久久久久久久精| 天天操天天色综合| 色综合久久天天| 亚洲国产激情av| 美女精品自拍一二三四| 欧美艳星brazzers| 国产精品丝袜黑色高跟| 日韩高清欧美激情| 在线精品观看国产| 国产精品女主播在线观看| 久久精品国产澳门| 欧美日韩aaa| 亚洲在线免费播放| 91色乱码一区二区三区| 国产偷v国产偷v亚洲高清| 久久精品国产网站| 欧美一级午夜免费电影| 亚洲va韩国va欧美va| 在线视频国内自拍亚洲视频| 国产精品久久久久四虎| 国产东北露脸精品视频| 日韩精品一区二区三区中文不卡| 亚洲国产三级在线| 色哟哟国产精品| 亚洲欧美日韩中文播放| 99国内精品久久| 国产精品卡一卡二卡三| 国产91对白在线观看九色| 欧美精品一区二区不卡| 久久国产婷婷国产香蕉| 日韩一区二区麻豆国产| 蜜桃91丨九色丨蝌蚪91桃色| 3d动漫精品啪啪一区二区竹菊| 天堂午夜影视日韩欧美一区二区| 欧美视频一区二区三区在线观看 | 国产精品情趣视频|