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

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

?? intrdev.cpp

?? 《windows驅動開發程序XP》(武安河)的驅動開發書籍源代碼
?? CPP
字號:
// intrdev.cpp - implementation of interrupt demo device class 
//=============================================================================
//
// Compuware Corporation
// NuMega Lab
// 9 Townsend West
// Nashua, NH 03060  USA
//
// Copyright (c) 1998 Compuware Corporation. All Rights Reserved.
// Unpublished - rights reserved under the Copyright laws of the
// United States.
//
//=============================================================================

#include <vdw.h>
#include "common.h"
#include "intrdev.h"

// Class InterruptDemoDevice hooks IRQ 6, which is the floppy
// interrupt on Intel platforms. The device does not hook the
// interrupt until the test application opens it, and member
// Create is called. The ISR takes a time stamp, writes a record to
// a FIFO, and queues a DPC. The DPC notifies the test app that an
// interrupt has occurred by setting an event whose handle had
// been previously sent to the device using DeviceIoControl. The
// DPC does not set the event if the app has not responded to a
// previous event. The app retrieves the records written to the
// FIFO by the ISR using another DeviceIoControl call.

KDebugOnlyTrace T("IntrDemo");

#define DRIVER_EVENT_NAME L"\\BaseNamedObjects\\SynchEvent"

//////////////////////////////////////////////////////////////////
// Device class constructor
//
InterruptDemoDevice::~InterruptDemoDevice()
{
	T << "Deleting device\n";

	if (m_pEvent)
		delete m_pEvent;

	if ((PKINTERRUPT)m_Interrupt)
		m_Interrupt.Disconnect();
}

//////////////////////////////////////////////////////////////////
// Begin INIT section code
#pragma code_seg("INIT")

//////////////////////////////////////////////////////////////////
// Device class constructor
//
InterruptDemoDevice::InterruptDemoDevice() :

// Base class
	KDevice(
		L"IntrDemo0", 
		FILE_DEVICE_UNKNOWN, 
		L"IntrDemo0", 
		DO_BUFFERED_IO
		),

// Interrupt object
	m_Interrupt(
		Isa,
		0,
		FLOPPY_IRQ,
		FLOPPY_IRQ,
		Latched,
		TRUE,
		FALSE
	),

// Output fifo
	m_TimeStampFifo(FIFOSIZE, NonPagedPool)

{
	m_File = 0;
	m_pEvent = NULL;
	m_bNotifyApp = TRUE;
	m_Dpc.Setup(LinkTo(Dpc), this);
	m_InterruptCount = 0;
}
#pragma code_seg()

//////////////////////////////////////////////////////////////////
// Create 
//
// This is called when the test app issues a CreateFile
//
NTSTATUS InterruptDemoDevice::Create(KIrp I)
{
	NTSTATUS status;

	if (m_File == 0)
	{
		m_File = I.FileObject();
		status = m_Interrupt.Connect(LinkTo(Isr), this);
	}
	else
		status = STATUS_UNSUCCESSFUL;

	m_pEvent = new (NonPagedPool) KEvent(KUstring(DRIVER_EVENT_NAME),SynchronizationEvent);
	if (m_pEvent != NULL) m_pEvent->Clear(); 
	else
	{
		m_Interrupt.Disconnect();
		m_File = 0;
		status = STATUS_UNSUCCESSFUL;
	}
	T << "Create status = " << ULONG(status) << "\n";
	
	I.Information() = 0;
	return I.Complete(status);
}

//////////////////////////////////////////////////////////////////
// Close
//
// This is called when the test app closes the handle to the device
//
NTSTATUS InterruptDemoDevice::Close(KIrp I)
{
	NTSTATUS status;

	I.Information() = 0;

	if (m_File == I.FileObject())
	{
		T << "Disconnecting interrupt\n";
		m_Interrupt.Disconnect();
		m_File = 0;
		if (m_pEvent) delete m_pEvent;
		m_pEvent = NULL;
		status = STATUS_SUCCESS;
	}
	else
		status = STATUS_UNSUCCESSFUL;

	return I.Complete(status);
}

NTSTATUS InterruptDemoDevice::DeviceControl(KIrp I)
{
	T << I;
	
	I.Information() = 0;

	switch (I.IoctlCode())
	{
	case IOCTL_GET_TIMESTAMP_DATA:
		if (SynchronizeInterrupt(&m_Interrupt, LinkTo(ReadTimeFifo), PIRP(I)) )
			return I.Complete(STATUS_SUCCESS);

		else
			return I.Complete(STATUS_UNSUCCESSFUL);

		break;

	default:
		T << "Bad Request: " << I.IoctlCode() << "\n";

		return I.Complete(STATUS_INVALID_PARAMETER);	
	}
}

BOOLEAN InterruptDemoDevice::Isr(void)
{
	T << "In the ISR\n";

	TIMESTAMP ts;

	ts.ts_interrupt_count = ++m_InterruptCount;
	KeQueryTickCount(&ts.ts_time);

	m_TimeStampFifo.Write(&ts, 1);

	m_Dpc.Request();
	return FALSE;
}

VOID InterruptDemoDevice::Dpc(PVOID Arg1, PVOID Arg2)
{
	BOOLEAN Notify;
	BOOLEAN SynchStatus;

	if (m_pEvent) 
	{
		SynchStatus = SynchronizeInterrupt(
			&m_Interrupt, 
			LinkTo(TestAndClearNotifyApp), 
			&Notify
			);

		if (SynchStatus)
		{
			T << "DPC, App notify=" << ULONG(Notify) << "\n";
			if (Notify) 
				m_pEvent->Set();
		}
		else
			T << "Dpc error synchronizing\n";
	}
}

BOOLEAN InterruptDemoDevice::ReadTimeFifo(PVOID pIrp)
{
	KIrp I = (PIRP)pIrp;
	ULONG MaxReadItems = I.IoctlOutputBufferSize() / sizeof(TIMESTAMP);
	ULONG nItemsRead;

	nItemsRead = m_TimeStampFifo.Read((TIMESTAMP*)I.IoctlBuffer(), MaxReadItems);
	// guaranteed to empty the buffer, because app's read buffer is sizeof the fifo

	I.Information() = nItemsRead * sizeof(TIMESTAMP);

	m_bNotifyApp = TRUE;

	return TRUE;
}

BOOLEAN InterruptDemoDevice::TestAndClearNotifyApp(PVOID p)
{
	*(BOOLEAN*)p = m_bNotifyApp;
	m_bNotifyApp = FALSE;

	T << "TestAndClearNotifyApp previous state was=" << ULONG(m_bNotifyApp) << "\n";

	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国模一区二区三区白浆| 91精品国产综合久久小美女| 色94色欧美sute亚洲线路一ni | 在线免费精品视频| 日韩午夜在线观看| 一区二区三区免费在线观看| 国产老女人精品毛片久久| 色综合激情五月| 久久久99免费| 日韩电影一二三区| 色欧美乱欧美15图片| 中文字幕精品三区| 精品一区二区三区免费观看 | 麻豆精品在线看| 成人午夜激情片| 亚洲精品一线二线三线| 亚洲成人一区二区| 日本韩国欧美三级| 国产精品不卡在线观看| 国产91精品精华液一区二区三区| 91精品国模一区二区三区| 亚洲国产wwwccc36天堂| 色综合天天综合狠狠| 国产精品初高中害羞小美女文| 黄色日韩网站视频| 精品国产乱码久久久久久图片| 亚洲国产欧美在线人成| 91国偷自产一区二区使用方法| 亚洲国产精品国自产拍av| 国产精品羞羞答答xxdd| www亚洲一区| 国产另类ts人妖一区二区| 精品久久一区二区| 久久99久久99精品免视看婷婷| 日韩欧美国产午夜精品| 精品综合免费视频观看| 亚洲精品在线观看网站| 国产一区二区在线看| 国产欧美日韩在线视频| jlzzjlzz国产精品久久| 亚洲青青青在线视频| 欧美主播一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 欧洲视频一区二区| 午夜精品123| 日韩视频国产视频| 国产精品一区二区三区99| 欧美激情一区二区三区全黄| 成人ar影院免费观看视频| 国产精品久久久久aaaa| 欧美在线观看视频一区二区| 视频精品一区二区| 欧美精品一区二区三区蜜臀| 国产精品一区二区在线播放| 中文字幕一区视频| 欧美电视剧在线观看完整版| 久久99精品国产.久久久久| 国产午夜精品理论片a级大结局| 波多野结衣中文字幕一区| 一区二区三区中文字幕电影 | 亚洲成a人v欧美综合天堂下载| 欧美少妇bbb| 极品销魂美女一区二区三区| 中文字幕av一区二区三区| 欧美午夜精品理论片a级按摩| 日韩电影在线看| 国产午夜三级一区二区三| 91老师国产黑色丝袜在线| 日韩高清在线电影| 国产精品久久午夜| 欧美精品在欧美一区二区少妇| 激情综合色丁香一区二区| ...av二区三区久久精品| 制服丝袜日韩国产| 成人免费观看男女羞羞视频| 亚欧色一区w666天堂| 国产亚洲视频系列| 欧美日韩精品欧美日韩精品| 国产高清不卡二三区| 午夜精品福利在线| 亚洲欧美日韩系列| 久久综合久久99| 欧美色综合网站| www.亚洲色图| 精品一区在线看| 亚洲123区在线观看| 欧美国产综合色视频| 欧美一区二区三区成人| 一本久道久久综合中文字幕| 国产精品资源网| 蜜臀va亚洲va欧美va天堂 | **网站欧美大片在线观看| 日韩一区二区三区在线视频| 91女神在线视频| 夫妻av一区二区| 精品一区精品二区高清| 亚洲成av人**亚洲成av**| 日韩美女视频一区二区| 中文字幕av一区二区三区| 26uuu国产在线精品一区二区| 欧美在线观看视频一区二区| 99re这里都是精品| av在线不卡观看免费观看| 国产v综合v亚洲欧| 国模少妇一区二区三区| 日本大胆欧美人术艺术动态| 亚洲成人精品一区二区| 一二三区精品视频| 亚洲老妇xxxxxx| 亚洲女爱视频在线| 亚洲精品欧美综合四区| 亚洲欧美一区二区三区极速播放 | 国产午夜精品一区二区三区四区| 这里只有精品视频在线观看| 欧美日本一道本在线视频| 欧美久久一二区| 欧美精品自拍偷拍动漫精品| 欧美猛男男办公室激情| 欧美高清精品3d| 日韩欧美综合在线| 欧美tk丨vk视频| 久久久久国产一区二区三区四区| 欧美精品一区二区三区在线播放 | 亚洲美女在线国产| 亚洲自拍偷拍图区| 亚洲6080在线| 蜜桃视频一区二区| 国产精品18久久久久久vr| 国产精品99久久久久久宅男| 国产成人综合在线观看| 不卡的看片网站| 日本精品视频一区二区| 欧美日韩激情在线| 欧美一级在线免费| 久久影院午夜论| 1000部国产精品成人观看| 亚洲一区精品在线| 麻豆视频一区二区| 成人黄色小视频| 欧美三级韩国三级日本三斤 | 欧美午夜电影一区| 欧美成人一区二区三区在线观看 | 亚洲综合在线视频| 青青草视频一区| 国产高清视频一区| 欧美在线观看视频一区二区三区| 欧美一区二区三区思思人| 久久精品欧美一区二区三区不卡| 亚洲欧美影音先锋| 日韩不卡免费视频| 成人免费三级在线| 在线成人小视频| 中文字幕欧美区| 亚洲444eee在线观看| 国产成人啪免费观看软件| 欧美专区日韩专区| 久久这里只精品最新地址| 亚洲美女偷拍久久| 国产中文字幕一区| 色婷婷亚洲综合| 精品卡一卡二卡三卡四在线| 亚洲欧美二区三区| 久久99精品视频| 欧美在线小视频| 中文无字幕一区二区三区| 日本视频中文字幕一区二区三区| 国产成人在线电影| 日韩精品中文字幕在线一区| 亚洲精品乱码久久久久久黑人| 久久电影网站中文字幕| 91国产精品成人| 中文乱码免费一区二区 | 亚洲va在线va天堂| 99久久久久免费精品国产| 2欧美一区二区三区在线观看视频| 亚洲激情在线播放| 成人免费视频一区| 久久久久高清精品| 麻豆精品视频在线| 制服丝袜中文字幕一区| 亚洲美女少妇撒尿| av激情成人网| 国产婷婷色一区二区三区在线| 秋霞成人午夜伦在线观看| 在线精品视频小说1| 亚洲日本电影在线| 97se亚洲国产综合自在线| 国产欧美一区视频| 国产乱码字幕精品高清av| 日韩精品综合一本久道在线视频| 丝瓜av网站精品一区二区| 在线免费观看日韩欧美| 一区二区三区久久| 一本色道亚洲精品aⅴ| 亚洲三级电影全部在线观看高清| 99久久国产免费看| 亚洲乱码国产乱码精品精98午夜 | 亚洲高清在线视频| 欧美亚洲国产怡红院影院| 亚洲天堂免费在线观看视频|