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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mouspy.bat

?? KmdKit 匯編下開發(fā)驅(qū)動的工具 由俄羅斯某強(qiáng)男開發(fā)
?? BAT
?? 第 1 頁 / 共 3 頁
字號:
					; underneath us to our filter device object.  We also need to copy DO_DIRECT_IO,
					; DO_BUFFERED_IO, and DO_POWER_PAGABLE flags.  This guarantees that the filter
					; device object looks the same as the target device object.

					assume edx:ptr DEVICE_OBJECT
					assume ecx:ptr DEVICE_OBJECT

					mov eax, [edx].DeviceType
					mov [ecx].DeviceType, eax

					mov eax, [edx].Flags
					and eax, DO_DIRECT_IO + DO_BUFFERED_IO + DO_POWER_PAGABLE
					or [ecx].Flags, eax

					; IoCreateDevice sets the DO_DEVICE_INITIALIZING flag in the device object.
					; While this flag is set, the I/O Manager will refuse to attach other device
					; objects to us or to open a handle to our device.  So we have to clear
					; this flag because now we are ready to filter.
					;
					; Note: It is not necessary to clear the DO_DEVICE_INITIALIZING flag on device
					; objects that are created in DriverEntry, because this is done automatically
					; by the I/O Manager.

					and [ecx].Flags, not DO_DEVICE_INITIALIZING

					assume edx:nothing
					assume ecx:nothing

					mov status, STATUS_SUCCESS

				.else		; IoAttachDeviceToDeviceStack failed

					; We have failed to attach

					invoke ObDereferenceObject, pTargetFileObject
				
					invoke IoDeleteDevice, g_pFilterDeviceObject
					and g_pFilterDeviceObject, NULL

					; Let the driver to be unloaded
		
					mov eax, g_pDriverObject
					mov (DRIVER_OBJECT PTR [eax]).DriverUnload, offset DriverUnload

					invoke DbgPrint, $CTA0("MouSpy: Couldn't attach to target device\n")

					mov status, STATUS_NO_SUCH_DEVICE

				.endif
						
			.else		; IoGetDeviceObjectPointer failed

				invoke IoDeleteDevice, g_pFilterDeviceObject
				and g_pFilterDeviceObject, NULL
					
				invoke DbgPrint, $CTA0("MouSpy: Couldn't get target device object pointer\n")
			.endif

		.else
			invoke DbgPrint, $CTA0("MouSpy: Couldn't create filter device\n")
		.endif

	.endif

	mov eax, status
	ret

MouseAttach endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       MouseDetach                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

MouseDetach proc

local status:NTSTATUS
local pTopmostDeviceObject:PDEVICE_OBJECT

	invoke DbgPrint, $CTA0("MouSpy: Entering MouseDetach\n")		

	mov status, STATUS_UNSUCCESSFUL

	.if g_pFilterDeviceObject != NULL

		; Lets see if there is someone above us.
		; Temporary set the DO_DEVICE_INITIALIZING flag in filter device object.
		; So no one can attach while we check the stack.

		mov eax, g_pFilterDeviceObject
		or (DEVICE_OBJECT ptr [eax]).Flags, DO_DEVICE_INITIALIZING

		invoke IoGetAttachedDeviceReference, g_pFilterDeviceObject
		mov pTopmostDeviceObject, eax

		.if eax != g_pFilterDeviceObject

			; Someone sits on the top of us. Do nothing except restoring
			; Flags field in the filter device object

			mov eax, g_pFilterDeviceObject
			and (DEVICE_OBJECT ptr [eax]).Flags, not DO_DEVICE_INITIALIZING
						
			invoke DbgPrint, $CTA0("MouSpy: Couldn't detach. Someone sits over\n")
			invoke DbgPrint, $CTA0("MouSpy: Filter device is still attached\n")

		.else			

			mov eax, g_pFilterDeviceObject
			mov eax, (DEVICE_OBJECT ptr [eax]).DeviceExtension
			mov ecx, (FiDO_DEVICE_EXTENSION ptr [eax]).pTargetFileObject

			fastcall ObfDereferenceObject, ecx

			mov eax, g_pFilterDeviceObject
			mov eax, (DEVICE_OBJECT ptr [eax]).DeviceExtension
			mov eax, (FiDO_DEVICE_EXTENSION ptr [eax]).pNextLowerDeviceObject

			invoke IoDetachDevice, eax
			
			mov status, STATUS_SUCCESS

			invoke DbgPrint, $CTA0("MouSpy: Filter device detached\n")

			; Destroy filter device.

			mov eax, g_pFilterDeviceObject
			and g_pFilterDeviceObject, NULL
			invoke IoDeleteDevice, eax

			; Our driver is still not unloadable because we might have outstanding IRPs

		.endif

		; Dereference the device object pointer returned by IoGetAttachedDeviceReference

		invoke ObDereferenceObject, pTopmostDeviceObject

	.endif

	mov eax, status
	ret

MouseDetach endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  FiDO_DispatchPassThrough                                         
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

FiDO_DispatchPassThrough proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP

; The default dispatch routine. Our driver should send down all IRPs it deal not with

   	IoSkipCurrentIrpStackLocation pIrp

	mov eax, pDeviceObject
	mov eax, (DEVICE_OBJECT ptr [eax]).DeviceExtension
	mov eax, (FiDO_DEVICE_EXTENSION ptr [eax]).pNextLowerDeviceObject

	invoke IoCallDriver, eax, pIrp
	ret

FiDO_DispatchPassThrough endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                    CDO_DispatchCreate                                             
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

CDO_DispatchCreate proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP

local status:NTSTATUS
local MouseData:MOUSE_DATA

	invoke DbgPrint, $CTA0("MouSpy: Entering CDO_DispatchCreate\n")

	; Drain g_MouseDataListHead.  If someone have ran MouSpy previously
	; but have failed to unload the driver because of not moving
	; the mouse as recommended, we have at least one pending IRP.  When
	; someone move the mouse this pending IRP is completed and our
	; completion routine will add one entry into g_MouseDataListHead.
	; So if it's not a first time we are being created we may have
	; some entr(ies)y in g_MouseDataListHead from previous sessions.
	; So lets throw them away.

	.while TRUE

		invoke RemoveEntry, addr MouseData
		.break .if eax == 0

	.endw

	MUTEX_ACQUIRE g_mtxCDO_State

	.if g_fCDO_Opened

		; Only one client at a time is allowed

		mov status, STATUS_DEVICE_BUSY

	.else

		; No one else may open control device
	
		mov g_fCDO_Opened, TRUE
		
		mov status, STATUS_SUCCESS

	.endif

	MUTEX_RELEASE g_mtxCDO_State

	mov ecx, pIrp
	and (_IRP PTR [ecx]).IoStatus.Information, 0
	mov eax, status
	mov (_IRP PTR [ecx]).IoStatus.Status, eax

	fastcall IofCompleteRequest, ecx, IO_NO_INCREMENT

	mov eax, status
	ret

CDO_DispatchCreate endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                    CDO_DispatchClose                                              
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

CDO_DispatchClose proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP

	invoke DbgPrint, $CTA0("MouSpy: Entering CDO_DispatchClose\n")

	; Do not set completion routine any more
	
	and g_fSpy, FALSE

	and g_fInvertButtons, FALSE
	and g_fInvertMovement, FALSE
				
	MUTEX_ACQUIRE g_mtxCDO_State
				
	.if ( g_pFilterDeviceObject == NULL )

		.if g_dwPendingRequests == 0

			; If we have datached from the mouse stack, and there is
			; no outstanding IRPs it's safe to unload.

			mov eax, g_pDriverObject
			mov (DRIVER_OBJECT PTR [eax]).DriverUnload, offset DriverUnload

		.endif

	.endif

	; Someone else may open control device

	and g_fCDO_Opened, FALSE	

	MUTEX_RELEASE g_mtxCDO_State

	mov eax, STATUS_SUCCESS
		
	mov ecx, pIrp
	and (_IRP PTR [ecx]).IoStatus.Information, 0
	mov (_IRP PTR [ecx]).IoStatus.Status, eax

	push eax

	fastcall IofCompleteRequest, ecx, IO_NO_INCREMENT

	pop eax
	ret

CDO_DispatchClose endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                     FillMouseData                                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

FillMouseData proc uses edi ebx pBuffer:PVOID, cbBuffer:DWORD

local MouseData:MOUSE_DATA
local cbReturned:DWORD

	and cbReturned, 0

	; Lets see how many MOUSE_DATAs will fit into passed in buffer

	mov eax, cbBuffer
	mov ecx, sizeof MOUSE_DATA
	xor edx, edx
	div ecx
	mov ebx, eax

	mov edi, pBuffer

	.while ebx

		invoke RemoveEntry, edi
		
		.break .if eax == 0

		add cbReturned,  eax

		dec ebx
		add edi, sizeof MOUSE_DATA

	.endw

	mov eax, cbReturned
	ret

FillMouseData endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                CDO_DispatchDeviceControl                                          
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

CDO_DispatchDeviceControl proc uses esi edi ebx pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP

local status:NTSTATUS
local pEventObject:PKEVENT
local liDelayTime:LARGE_INTEGER
local MouseData:MOUSE_DATA

	mov status, STATUS_UNSUCCESSFUL

	mov esi, pIrp
	assume esi:ptr _IRP

	mov [esi].IoStatus.Status, STATUS_UNSUCCESSFUL
	and [esi].IoStatus.Information, 0

	IoGetCurrentIrpStackLocation esi
	mov edi, eax
	assume edi:ptr IO_STACK_LOCATION

	.if [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_MOUSE_ATTACH
		.if [edi].Parameters.DeviceIoControl.InputBufferLength == sizeof HANDLE

			MUTEX_ACQUIRE g_mtxCDO_State

			; The user-mode client wants us attach to the mouse device stack

			mov edx, [esi].AssociatedIrp.SystemBuffer
			mov edx, [edx]			; event handle from user-mode

			mov ecx, ExEventObjectType
			mov ecx, [ecx]
			mov ecx, [ecx]			; PTR OBJECT_TYPE
	
			invoke ObReferenceObjectByHandle, edx, EVENT_MODIFY_STATE, ecx, \
										UserMode, addr pEventObject, NULL
			.if eax == STATUS_SUCCESS

				; If passed event handle is valid, attach to mouse
					
				.if !g_fFiDO_Attached

					invoke MouseAttach
					mov [esi].IoStatus.Status, eax

					.if eax == STATUS_SUCCESS

						mov eax, pEventObject
						mov g_pEventObject, eax			; No need to lock, since mov is atomic

						mov g_fFiDO_Attached, TRUE
						mov g_fSpy, TRUE				; Set completion routine.
		
					.else
						; Failed to attach
						invoke ObDereferenceObject, pEventObject
					.endif

				.else
					; We was attached

					LOCK_ACQUIRE g_EventSpinLock
					mov bl, al			; old IRQL

					mov eax, g_pEventObject
					.if eax != NULL
						and g_pEventObject, NULL
						invoke ObDereferenceObject, eax
					.endif

					mov eax, pEventObject
					mov g_pEventObject, eax
					
					LOCK_RELEASE g_EventSpinLock, bl

					mov g_fSpy, TRUE				; Set completion routine.

					mov [esi].IoStatus.Status, STATUS_SUCCESS
				.endif

			.else
				mov [esi].IoStatus.Status, STATUS_INVALID_PARAMETER
			.endif

			MUTEX_RELEASE g_mtxCDO_State
	
		.else
			mov [esi].IoStatus.Status, STATUS_INFO_LENGTH_MISMATCH
		.endif

	.elseif [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_MOUSE_DETACH

		MUTEX_ACQUIRE g_mtxCDO_State
	
		; The user-mode client wants us to detach from the mouse device stack

		.if g_fFiDO_Attached

			; Do not set completion routine any more no matter will we detach or not
	
			and g_fSpy, FALSE

			and g_fInvertButtons, FALSE
			and g_fInvertMovement, FALSE

			invoke MouseDetach
			mov [esi].IoStatus.Status, eax

			.if eax == STATUS_SUCCESS
				mov g_fFiDO_Attached, FALSE
			.endif

			LOCK_ACQUIRE g_EventSpinLock
			mov bl, al			; old IRQL

			mov eax, g_pEventObject
			.if eax != NULL
				and g_pEventObject, NULL
				invoke ObDereferenceObject, eax
			.endif

			LOCK_RELEASE g_EventSpinLock, bl

		.endif

		MUTEX_RELEASE g_mtxCDO_State
	
	.elseif [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_GET_MOUSE_DATA
		.if [edi].Parameters.DeviceIoControl.OutputBufferLength >= sizeof MOUSE_DATA

			invoke FillMouseData, [esi].AssociatedIrp.SystemBuffer, \
						[edi].Parameters.DeviceIoControl.OutputBufferLength

			mov [esi].IoStatus.Information, eax
			mov [esi].IoStatus.Status, STATUS_SUCCESS

		.else
			mov [esi].IoStatus.Status, STATUS_BUFFER_TOO_SMALL
		.endif


	.elseif [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_INVERT_BUTTONS
		.if [edi].Parameters.DeviceIoControl.InputBufferLength == sizeof BOOL

			mov eax, [esi].AssociatedIrp.SystemBuffer
			mov eax, [eax]
			mov g_fInvertButtons, eax

			and [esi].IoStatus.Information, 0
			mov [esi].IoStatus.Status, STATUS_SUCCESS

		.else
			mov [esi].IoStatus.Status, STATUS_INFO_LENGTH_MISMATCH
		.endif


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av在线不卡电影| 国产精品萝li| 色综合久久中文综合久久97| 亚洲免费观看在线观看| 69精品人人人人| 色综合久久久久综合体| 精品影院一区二区久久久| 亚洲天堂久久久久久久| 日韩欧美123| 91福利精品视频| 韩国av一区二区三区在线观看| 亚洲同性gay激情无套| 久久先锋影音av| 91精品国产综合久久久久| 成人黄色av网站在线| 国产一区不卡精品| 免费看黄色91| 婷婷综合在线观看| 午夜亚洲国产au精品一区二区| 国产欧美中文在线| 久久久久国产精品人| 精品人伦一区二区色婷婷| 欧美人xxxx| 国内成+人亚洲+欧美+综合在线| 一区二区三区免费| 亚洲激情av在线| 一区二区三区欧美在线观看| 国产欧美日韩视频在线观看| 久久一区二区三区四区| 日韩欧美国产小视频| 精品欧美乱码久久久久久| 久久综合久久99| 欧美激情资源网| 亚洲免费毛片网站| 亚洲午夜在线观看视频在线| 亚洲电影你懂得| 久久99久国产精品黄毛片色诱| 男人的j进女人的j一区| 国产激情一区二区三区桃花岛亚洲| 国产精品一级黄| 色婷婷亚洲精品| 9191精品国产综合久久久久久| 日韩免费一区二区| 国产欧美日韩三区| 丝袜美腿亚洲一区二区图片| 国产九色精品成人porny| 成人网在线播放| 欧美私人免费视频| 国产日韩欧美精品电影三级在线 | 视频一区二区国产| 久久精品99国产精品| 成人动漫视频在线| 欧美精选午夜久久久乱码6080| 久久免费美女视频| 男人的天堂久久精品| 91在线视频免费观看| 日韩一区二区三区在线视频| 国产精品麻豆欧美日韩ww| 日本网站在线观看一区二区三区 | 欧美日韩中文另类| 中文字幕一区二区三区在线播放 | 久久网站热最新地址| 亚洲一区二区三区国产| 从欧美一区二区三区| 91精品国产手机| 午夜婷婷国产麻豆精品| 日本乱人伦aⅴ精品| 国产精品不卡一区二区三区| 久久er99精品| 欧美亚洲国产一区二区三区va | 亚洲午夜日本在线观看| 国产精品 日产精品 欧美精品| 欧美日韩欧美一区二区| 亚洲欧美色图小说| 91在线国内视频| 亚洲三级免费观看| 在线精品视频小说1| 中文字幕亚洲综合久久菠萝蜜| 国产91露脸合集magnet| 国产亚洲欧美中文| 成人免费视频一区| 国产精品日产欧美久久久久| 成人精品免费看| 亚洲欧洲美洲综合色网| 在线视频一区二区三| 午夜精品一区二区三区免费视频| 9191精品国产综合久久久久久| 久久精品国产秦先生| 精品国产露脸精彩对白| 国产真实乱偷精品视频免| 中文字幕高清不卡| 欧美性色aⅴ视频一区日韩精品| 三级久久三级久久| 久久精子c满五个校花| 成人h精品动漫一区二区三区| 国产精品无码永久免费888| 91亚洲永久精品| 亚洲3atv精品一区二区三区| 久久久777精品电影网影网| 午夜精品久久久| 在线精品视频小说1| 亚洲人成在线观看一区二区| 精品视频1区2区| 国产不卡视频一区| 亚洲va在线va天堂| 欧美精品一区二区三区四区| 成人黄色一级视频| 免费在线观看不卡| 亚洲欧洲另类国产综合| 欧美电影一区二区三区| 国产成人av一区| 日韩精品午夜视频| 一区二区久久久| 精品久久久三级丝袜| 在线看国产一区| 国产精品综合视频| 亚洲综合久久久| 中文字幕一区免费在线观看| 欧美美女黄视频| 成人黄色片在线观看| 国内成+人亚洲+欧美+综合在线| 亚洲影视在线观看| 亚洲丝袜制服诱惑| 久久精品欧美一区二区三区麻豆| 99免费精品在线观看| 成人午夜视频免费看| 狠狠狠色丁香婷婷综合久久五月| 亚洲欧洲日韩一区二区三区| 久久久噜噜噜久噜久久综合| 欧美一区二区黄色| 另类小说色综合网站| 亚洲国产精品久久一线不卡| 亚洲欧美日韩精品久久久久| 久久综合狠狠综合久久综合88| 日韩午夜激情电影| 67194成人在线观看| 91精品在线观看入口| 欧美老年两性高潮| 日韩片之四级片| 日韩视频123| 精品成人在线观看| 久久精品人人爽人人爽| 国产欧美一区二区三区在线老狼| 日韩一区二区三区视频在线| 日韩一区二区三区视频在线观看| 91精品国产日韩91久久久久久| 久久综合九色综合97婷婷| 精品国产伦理网| 欧美高清在线精品一区| 亚洲人妖av一区二区| 五月天激情综合网| 成人永久看片免费视频天堂| 99久久精品费精品国产一区二区| 色先锋aa成人| 欧美一级理论片| 亚洲免费观看高清完整版在线观看 | 日韩欧美成人激情| 久久久99久久| 亚洲成人777| 成人一级视频在线观看| 成人av在线网| 国产夜色精品一区二区av| 亚洲欧美日韩国产另类专区 | 中文字幕在线不卡一区| 精品在线一区二区三区| 色欲综合视频天天天| xnxx国产精品| 亚洲大片免费看| 国内不卡的二区三区中文字幕| 9191国产精品| 一卡二卡欧美日韩| 成a人片亚洲日本久久| 久久这里只有精品6| 国产精品资源在线| 91精品国产综合久久久久久久 | 欧美成人一区二区| 琪琪久久久久日韩精品| 欧美中文字幕一区二区三区 | 26uuu亚洲| 久久精品国产免费| 久久综合久久综合久久综合| 亚洲一区二区精品视频| 色系网站成人免费| 自拍偷拍国产精品| 老司机免费视频一区二区| 欧美自拍偷拍午夜视频| 一区二区理论电影在线观看| 丁香一区二区三区| 亚洲婷婷国产精品电影人久久| 91丨九色丨尤物| 一区二区三区高清不卡| 色综合久久久久综合体桃花网| 日韩一区中文字幕| 成人国产亚洲欧美成人综合网| 久久久五月婷婷| www..com久久爱| 亚洲女爱视频在线| 91福利在线播放| 日本不卡在线视频| 久久综合五月天婷婷伊人|