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

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

?? pnpmon.cpp

?? 一本在講述USB驅動程式的書 及其范例原碼
?? CPP
字號:
// PNPMON.CPP -- VxD version of PNPMON.SYS for Win98
// Copyright (C) 1999 by Walter Oney
// All rights reserved

#include "stdvxd.h"
#include "..\sys\ioctls.h"

///////////////////////////////////////////////////////////////////////////////

#pragma warning(disable:4035)

BOOL _VWIN32_SetWin32Event(PVOID hEvent)
	{
	_asm mov eax, hEvent
	VMMCall(_VWIN32_SetWin32Event)
	}

#pragma warning(default:4035)

///////////////////////////////////////////////////////////////////////////////

typedef struct _REG_RECORD {
	GUID Guid;
	PVOID NotificationEntry;
	PVOID Event;
	} REG_RECORD, *PREG_RECORD;

typedef struct _EVENT_RECORD {
	GETEVENT_PARAMS params;
	} EVENT_RECORD, *PEVENT_RECORD;

///////////////////////////////////////////////////////////////////////////////

DWORD Register(PREGISTER_PARAMS p);
DWORD Deregister(PUNREGISTER_PARAMS p);
VOID DeregisterAll();
NTSTATUS OnPnpNotify(PDEVICE_INTERFACE_CHANGE_NOTIFICATION p, PREG_RECORD reg);
DWORD GetEvent(PGETEVENT_PARAMS p);

VMMLIST RegRecordList = NULL;
VMMLIST EventList = NULL;

///////////////////////////////////////////////////////////////////////////////

SYSCTL BOOL OnSysDynamicDeviceInit()
	{							// OnSysDynamicDeviceInit
	RegRecordList = List_Create(0, sizeof(REG_RECORD));
	EventList = List_Create(LF_ASYNC, sizeof(EVENT_RECORD));
	return TRUE;
	}							// OnSysDynamicDeviceInit

///////////////////////////////////////////////////////////////////////////////

SYSCTL BOOL OnSysDynamicDeviceExit()
	{							// OnSysDynamicDeviceExit
	DeregisterAll();
	List_Destroy(EventList);
	List_Destroy(RegRecordList);
	return TRUE;
	}							// OnSysDynamicDeviceExit

///////////////////////////////////////////////////////////////////////////////

SYSCTL DWORD OnW32DeviceIoControl(PDIOCPARAMETERS p)
	{							// OnW32DeviceIoControl
	DWORD status = 0;
	DWORD info = 0;

	DWORD cbin = p->cbInBuffer;
	DWORD cbout = p->cbOutBuffer;
	DWORD code = p->dwIoControlCode;

	switch (code)
		{						// process control operation
	case DIOC_OPEN:
	case DIOC_CLOSEHANDLE:
		break;

	case IOCTL_REGISTER:
		if (cbin < sizeof(REGISTER_PARAMS))
			{
			status = ERROR_INVALID_PARAMETER;
			break;
			}
		status = Register((PREGISTER_PARAMS) p->lpvInBuffer);
		break;

	case IOCTL_DEREGISTER:
		if (cbin < sizeof(UNREGISTER_PARAMS))
			{
			status = ERROR_INVALID_PARAMETER;
			break;
			}
		status = Deregister((PUNREGISTER_PARAMS) p->lpvInBuffer);
		break;

	case IOCTL_GETEVENT:
		if (cbout < sizeof(GETEVENT_PARAMS))
			{
			status = ERROR_INVALID_PARAMETER;
			break;
			}
		status = GetEvent((PGETEVENT_PARAMS) p->lpvOutBuffer);
		break;

	default:
		ASSERT(FALSE);
		status = ERROR_INVALID_FUNCTION;
		}						// process control operation

	if (p->lpcbBytesReturned)
		*(PDWORD) p->lpcbBytesReturned = info;
	return status;
	}							// OnW32DeviceIoControl

///////////////////////////////////////////////////////////////////////////////

DWORD Register(PREGISTER_PARAMS p)
	{							// Register
	PREG_RECORD reg = (PREG_RECORD) List_Allocate(RegRecordList);
	if (!reg)
		return ERROR_NOT_ENOUGH_MEMORY;
	memset(reg, 0, sizeof(REG_RECORD));

	reg->Event = VWIN32OpenVxDHandle((ULONG) p->hevent, OPENVXD_TYPE_EVENT);
	reg->Guid = p->guid;

	NTSTATUS status = IoRegisterPlugPlayNotification(EventCategoryDeviceInterfaceChange,
		PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES,
		&p->guid, NULL, (PDRIVER_NOTIFICATION_CALLBACK_ROUTINE) OnPnpNotify, reg, &reg->NotificationEntry);

	if (!NT_SUCCESS(status))
		{
		Debug_Printf("PNPMON - IoRegisterPlugPlayNotification failed - %X\n", status);
		List_Deallocate(RegRecordList, reg);
		return ERROR_CRC;
		}

	List_Attach_Tail(RegRecordList, reg);
	return 0;
	}							// Register

///////////////////////////////////////////////////////////////////////////////

DWORD Deregister(PUNREGISTER_PARAMS p)
	{							// Deregister
	DWORD status = 0;
	PREG_RECORD reg;

	for (reg = (PREG_RECORD) List_Get_First(RegRecordList); reg; )
		{						// for each list element
		PREG_RECORD next = (PREG_RECORD) List_Get_Next(RegRecordList, reg);
		if (memcmp(&reg->Guid, &p->guid, sizeof(GUID)) == 0)
			{					// found a registration record
			List_Remove(RegRecordList, reg);
			IoUnregisterPlugPlayNotification(reg->NotificationEntry);
			List_Deallocate(RegRecordList, reg);
			}					// found a registration record
		reg = next;
		}						// for each list element
	return status;
	}							// Deregister

///////////////////////////////////////////////////////////////////////////////

VOID DeregisterAll()
	{							// DeregisterAll
	PREG_RECORD reg;
	while ((reg = (PREG_RECORD) List_Remove_First(RegRecordList)))
		{						// deregister all notifications
		IoUnregisterPlugPlayNotification(reg->NotificationEntry);
		List_Deallocate(RegRecordList, reg);
		}						// deregister all notifications
	}							// DeregisterAll

///////////////////////////////////////////////////////////////////////////////

VOID __declspec(naked) __cdecl EventProc()
	{							// EventProc
	_asm mov eax, edx
	VMMCall(_VWIN32_SetWin32Event)
	_asm ret
	}							// EventProc

NTSTATUS OnPnpNotify(PDEVICE_INTERFACE_CHANGE_NOTIFICATION p, PREG_RECORD reg)
	{							// OnPnpNotify

	_asm pushfd
	_asm cli
	PEVENT_RECORD evrec = (PEVENT_RECORD) List_Allocate(EventList);
	_asm popfd

	memset(evrec, 0, sizeof(EVENT_RECORD));

	evrec->params.guid = p->InterfaceClassGuid;
	evrec->params.event = p->Event;
	memcpy(evrec->params.linkname, p->SymbolicLinkName->Buffer, p->SymbolicLinkName->Length);
	evrec->params.linkname[p->SymbolicLinkName->Length/2] = 0;

	_asm pushfd
	_asm cli
	List_Attach_Tail(EventList, evrec);
	_asm popfd

	HVM hvmSystem = Get_Sys_VM_Handle();	
	if (Get_Cur_VM_Handle() == hvmSystem)
		_VWIN32_SetWin32Event(reg->Event);
	else
		Call_Restricted_Event(0, hvmSystem, 0, (ULONG) reg->Event, (VMM_EVENT_HANDLER) EventProc, 0);

	return STATUS_SUCCESS;
	}							// OnPnpNotify

///////////////////////////////////////////////////////////////////////////////

#pragma VxD_LOCKED_CODE_SEG

DWORD GetEvent(PGETEVENT_PARAMS p)
	{							// GetEvent
	PEVENT_RECORD evrec;
	_asm pushfd
	_asm cli
	evrec = (PEVENT_RECORD) List_Remove_First(EventList);
	_asm popfd

	if (!evrec)
		return ERROR_NO_MORE_ITEMS;

	*p = evrec->params;
	
	_asm pushfd
	_asm cli
	List_Deallocate(EventList, evrec);
	_asm popfd

	return 0;
	}							// GetEvent

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜视频| 亚洲国产日韩a在线播放性色| 日韩欧美亚洲国产另类| 欧美精品一区二区精品网| 一本大道久久a久久综合| 欧美日韩国产片| 久久色在线观看| 自拍偷在线精品自拍偷无码专区| 亚洲午夜久久久久久久久久久| 精品午夜一区二区三区在线观看| 国产一区二区视频在线| 一本到不卡免费一区二区| 精品久久久久一区二区国产| ...av二区三区久久精品| 亚洲一级不卡视频| 国产剧情一区在线| 欧美色综合天天久久综合精品| 精品久久久久99| 婷婷成人综合网| 成人久久视频在线观看| 欧美精品99久久久**| 国产精品成人在线观看| 精品在线亚洲视频| 精品视频免费看| 国产精品久久精品日日| 毛片av中文字幕一区二区| 成人av网站免费观看| 日韩三级视频在线看| 亚洲欧美一区二区三区极速播放 | 色94色欧美sute亚洲线路一久| 日韩欧美国产三级| 亚洲成人av电影| 99国产麻豆精品| 欧美经典三级视频一区二区三区| 天天综合色天天综合| 色综合 综合色| 最新高清无码专区| 国产一区 二区| 精品国产污网站| 日产欧产美韩系列久久99| 欧美在线免费观看亚洲| 国产精品入口麻豆原神| 国产不卡在线视频| 国产午夜精品久久久久久免费视| 成人在线视频首页| 欧美成人猛片aaaaaaa| 亚洲成a人v欧美综合天堂下载 | 亚洲视频中文字幕| 国产毛片精品视频| 精品国产乱码久久久久久牛牛 | 亚洲欧洲日产国产综合网| 国产精品一级片| 国产午夜精品一区二区三区视频| 国产永久精品大片wwwapp| 日韩一级高清毛片| 精品制服美女丁香| 久久久久久久久久久久久女国产乱 | 中文字幕一区二区三区乱码在线| 国产乱色国产精品免费视频| 精品黑人一区二区三区久久 | 欧美精品自拍偷拍动漫精品| 亚洲国产成人av| 欧洲av在线精品| 亚洲va欧美va人人爽午夜| 欧美日韩成人综合| 看电影不卡的网站| 久久久久久影视| 成人黄色综合网站| 国产精品麻豆久久久| 9l国产精品久久久久麻豆| 国产女同互慰高潮91漫画| 成人综合激情网| 亚洲女人的天堂| 欧美一区二区三区男人的天堂| 精品午夜一区二区三区在线观看| 国产亚洲一区二区三区| 91精品国产91综合久久蜜臀| 亚洲电影你懂得| 精品欧美一区二区三区精品久久| 国产成人精品aa毛片| 日韩毛片一二三区| 欧美一区二区日韩| 国产精品夜夜嗨| 一区二区三区美女| 欧美mv和日韩mv的网站| av在线这里只有精品| 三级影片在线观看欧美日韩一区二区| 精品国产麻豆免费人成网站| 99免费精品视频| 开心九九激情九九欧美日韩精美视频电影 | 欧美喷潮久久久xxxxx| 久久97超碰色| 亚洲精品videosex极品| 欧美日韩综合在线免费观看| 黑人精品欧美一区二区蜜桃| 国产精品欧美一区喷水| 欧美精品丝袜中出| 成人综合婷婷国产精品久久免费| 一区二区三区中文字幕精品精品| 欧美va在线播放| 91久久精品一区二区三区| 久色婷婷小香蕉久久| 亚洲精品国久久99热| 欧美大度的电影原声| 欧美性一二三区| 不卡一区二区三区四区| 久久99热狠狠色一区二区| 亚洲视频免费观看| 亚洲精品在线三区| 欧美色电影在线| 91小视频免费观看| 国产剧情一区在线| 日av在线不卡| 一区二区三区不卡视频在线观看 | 亚洲精品一区二区三区四区高清 | 在线成人免费视频| 99久久婷婷国产| 极品少妇xxxx偷拍精品少妇| 亚洲成人中文在线| 成人欧美一区二区三区在线播放| 久久久亚洲精品石原莉奈| 日韩欧美一级二级三级久久久| 欧美影视一区在线| 欧美日本国产一区| 色婷婷国产精品久久包臀| 国产91精品在线观看| 国产在线精品不卡| 国产呦精品一区二区三区网站| 乱一区二区av| 美女视频黄 久久| 全部av―极品视觉盛宴亚洲| 亚洲午夜羞羞片| 午夜av电影一区| 性做久久久久久| 无吗不卡中文字幕| 亚洲成人7777| 日本aⅴ精品一区二区三区| 婷婷开心激情综合| 日本一区中文字幕| 美女网站一区二区| 久久97超碰国产精品超碰| 久久电影国产免费久久电影| 久久成人免费网| 国产精品888| 99久久久久免费精品国产| a美女胸又www黄视频久久| 色噜噜偷拍精品综合在线| 在线这里只有精品| 日韩一区二区三区视频在线| 精品国产乱码久久久久久免费 | 日日夜夜精品免费视频| 午夜精品久久久久久久久久| 丝袜美腿亚洲一区二区图片| 美日韩黄色大片| 粉嫩高潮美女一区二区三区| jiyouzz国产精品久久| 91福利区一区二区三区| 91精品国产91久久久久久最新毛片| 日韩免费一区二区| 欧美韩日一区二区三区四区| ...xxx性欧美| 午夜不卡av在线| 韩国视频一区二区| 麻豆精品久久精品色综合| 国产高清久久久| 色综合中文字幕| 精品污污网站免费看| 精品日韩一区二区三区免费视频| 国产人成亚洲第一网站在线播放| 亚洲人成在线播放网站岛国| 看电影不卡的网站| 97精品久久久久中文字幕| 3atv在线一区二区三区| 国产精品午夜电影| 亚洲成av人片一区二区| 精品一区二区三区在线视频| 91一区一区三区| 日韩美女主播在线视频一区二区三区| 久久久久久久久久久久久女国产乱 | 欧美日韩国产一级| 久久久久久久久99精品| 亚洲香蕉伊在人在线观| 韩国av一区二区三区| 色噜噜狠狠色综合中国| 久久久影视传媒| 五月天一区二区三区| 成人午夜激情在线| 91精品国产综合久久福利| 亚洲视频精选在线| 国产在线视视频有精品| 欧美日韩在线三级| 国产精品久久久久久久裸模 | 九色|91porny| 一本久久a久久免费精品不卡| 欧美大白屁股肥臀xxxxxx| 亚洲男人电影天堂| 成人一区在线看| 精品美女在线播放| 日韩精品色哟哟| 欧美日韩视频在线观看一区二区三区|