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

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

?? ezusbinttransfer.cpp

?? DriverStdio的一個USB驅動程序
?? CPP
字號:
// EzUsbIntTransfer.cpp
//=============================================================================
//
// Compuware Corporation
// NuMega Lab
// 9 Townsend West
// Nashua, NH 03060  USA
//
// Copyright (c) 1999 Compuware Corporation. All Rights Reserved.
// Unpublished - rights reserved under the Copyright laws of the
// United States.
//
//=============================================================================

#include <vdw.h>
extern "C" {
#pragma warning (disable:4200)
#include <wdm.h>
#pragma warning (default:4200)
}

#pragma warning (default:4710)

#include <kusb.h>
#include "EzUsbIntTransfer.h"


KUsbInterruptTransfer::KUsbInterruptTransfer(
	KUsbLowerDevice* Dev,
	KUsbPipe* InterruptPipe,
	BOOLEAN bShortOk
	) :
		m_lStopRequested(0),
		m_lPolling(0)
{
	m_CtorStatus = Initialize(
						Dev,
						InterruptPipe,
						bShortOk
						);
}
		

NTSTATUS KUsbInterruptTransfer::Initialize(
	KUsbLowerDevice* Dev,
	KUsbPipe* InterruptPipe,
	BOOLEAN bShortOk
	)
{
	m_InterruptPipe = InterruptPipe;
	m_bShortOk = bShortOk;

	m_Stacks = static_cast<UCHAR>(Dev->StackRequirement() + 1);
	ASSERT( m_Stacks );

	m_pIntUrb = new URB;
	if( NULL == m_pIntUrb )
	{
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	m_KIrp.m_Irp = m_KIrp.Allocate(m_Stacks);
	if( NULL == m_KIrp.m_Irp )
	{
		delete m_pIntUrb;
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	return STATUS_SUCCESS;
}


	//This initiates a USB interrupt transfer that is recycled (MDL form)
NTSTATUS KUsbInterruptTransfer::StartPolling(
	KMemory& Mdl,
	ULONG Length,
	USB_INTERRUPT_CALLBACK pfnOnInterrupt, 
	PVOID pClientContext
	)
{
	ASSERT( m_InterruptPipe->IsOpen() );

	if( ! m_InterruptPipe->IsOpen() )
	{
		return STATUS_INVALID_DEVICE_STATE;
	}

	if( INTERLOCKED_COMPARE_EXCHANGE(&m_lPolling, 1, 1) )
		return STATUS_DEVICE_BUSY;

	InterlockedExchange(&m_lPolling, 1);

	// allocate a new context structure
	PINT_COMPLETION_INFO pCompInfo = new (NonPagedPool) INT_COMPLETION_INFO;

	// make sure it succeeded
	if( NULL == pCompInfo )
	{
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	// initialize the context structure
	pCompInfo->m_pClass = this;
	pCompInfo->m_pfnOnInterrupt = pfnOnInterrupt;
	pCompInfo->m_pClientContext = pClientContext;

	m_InterruptPipe->BuildInterruptTransfer(
		Mdl,
		Length,
		m_bShortOk,
		NULL,
		m_pIntUrb
		);

	return m_InterruptPipe->SubmitUrb(
		m_KIrp,
		m_pIntUrb,
		LinkTo(InterruptTransferComplete),
		pCompInfo
		);
}


	//This initiates a USB interrupt transfer that is recycled (PVOID form)
NTSTATUS KUsbInterruptTransfer::StartPolling(
	PVOID Buffer,
	ULONG Length,
	USB_INTERRUPT_CALLBACK pfnOnInterrupt, 
	PVOID pClientContext
	)
{
	ASSERT( m_InterruptPipe->IsOpen() );

	if( ! m_InterruptPipe->IsOpen() )
	{
		return STATUS_INVALID_DEVICE_STATE;
	}

	// allocate a new context structure
	PINT_COMPLETION_INFO pCompInfo = new (NonPagedPool) INT_COMPLETION_INFO;

	// make sure it succeeded
	if( NULL == pCompInfo )
	{
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	// initialize the context structure
	pCompInfo->m_pClass = this;
	pCompInfo->m_pfnOnInterrupt = pfnOnInterrupt;
	pCompInfo->m_pClientContext = pClientContext;

	m_InterruptPipe->BuildInterruptTransfer(
		Buffer,
		Length,
		m_bShortOk,
		NULL,
		m_pIntUrb
		);

	return m_InterruptPipe->SubmitUrb(
		m_KIrp,
		m_pIntUrb,
		LinkTo(InterruptTransferComplete),
		pCompInfo
		);
}
		

	//This is a completion routine that checks if the device
	//interrupts and calls the client ISR callback function if the device 
	//did interrupt.  It also re-submits the interrupt URB to USBD unless
	//stop is requested.
NTSTATUS __stdcall KUsbInterruptTransfer::InterruptTransferComplete(KIrp I, PINT_COMPLETION_INFO pContext)	
{
	InterlockedExchange(&m_lPolling, 0);
	ON_INTERRUPT_STATUS status = ON_INTERRUPT_SUCCESS;

	KUsbInterruptTransfer* pIntXfer = pContext->m_pClass;

// check the irp status
	if( NT_SUCCESS(I.Status()) )
	{
		m_NumInterrupts++;

		if( pContext->m_pfnOnInterrupt )
		{
			//Call the user's OnInterrupt handler synchronously
			status = pContext->m_pfnOnInterrupt(
					pIntXfer->m_pIntUrb,
					pContext->m_pClientContext
					);
		}
		else
		{
			status = ON_INTERRUPT_FAILURE;
		}
	}

	if( NT_SUCCESS(I.Status()) && 
		(ON_INTERRUPT_FAILURE != status) && 
		(1 != INTERLOCKED_COMPARE_EXCHANGE(&m_lStopRequested, 1, 1))
	  )
	{

		if( ON_INTERRUPT_SUCCESS == status )
		{
			memset(&reinterpret_cast<_URB_BULK_OR_INTERRUPT_TRANSFER*>(m_pIntUrb)->hca, 0, sizeof(_URB_HCD_AREA));

			m_KIrp.Reuse();
		}

		pIntXfer->m_InterruptPipe->SubmitUrb(
			m_KIrp,
			m_pIntUrb,
			LinkTo(InterruptTransferComplete),
			pContext
			);

		InterlockedExchange(&m_lPolling, 1);

		return STATUS_MORE_PROCESSING_REQUIRED;
	}

	delete pContext;

	return STATUS_MORE_PROCESSING_REQUIRED;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品一级二级| 成人性生交大片免费看中文 | 国产精品午夜电影| 黄色成人免费在线| 久久婷婷国产综合国色天香| 久久国产精品第一页| 欧美精品一区二区三区蜜臀| 国产乱码精品一区二区三区忘忧草| 精品日韩一区二区三区| 国产伦精一区二区三区| 国产精品久久久久久久久免费桃花 | 国产亚洲人成网站| 99精品热视频| 亚洲大片免费看| 欧美一区二区三区在线看| 麻豆精品一区二区| 亚洲国产高清aⅴ视频| 99精品热视频| 日韩激情中文字幕| 2023国产精华国产精品| www.激情成人| 天堂久久久久va久久久久| 精品日韩在线一区| 91美女在线观看| 日本成人中文字幕在线视频| 国产欧美一区二区三区网站 | 韩国v欧美v亚洲v日本v| 国产精品福利一区| 777奇米四色成人影色区| 精品国免费一区二区三区| 成人免费毛片嘿嘿连载视频| 一区二区三区在线免费播放| 欧美成人女星排名| 色一情一乱一乱一91av| 青青青伊人色综合久久| 一区在线观看免费| 日韩欧美国产精品一区| 99精品欧美一区二区蜜桃免费| 天天综合网 天天综合色| 国产日韩欧美精品一区| 欧美一区二区网站| 91免费观看视频在线| 狠狠色狠狠色综合系列| 亚洲午夜久久久| 中文一区二区完整视频在线观看| 欧美美女一区二区在线观看| 成人aaaa免费全部观看| 久久成人18免费观看| 夜夜精品浪潮av一区二区三区| 国产欧美日韩另类视频免费观看| 欧美日韩国产三级| 99riav一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲欧美视频在线观看| 久久久久久久综合狠狠综合| 91精品国产综合久久久久久久| av毛片久久久久**hd| 国产 日韩 欧美大片| 麻豆国产欧美日韩综合精品二区 | 亚洲成人精品影院| √…a在线天堂一区| 国产喂奶挤奶一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 91黄色激情网站| 91亚洲精品久久久蜜桃| 从欧美一区二区三区| 国产精品一区一区| 激情综合色播激情啊| 免费看日韩a级影片| 日韩电影在线一区| 日本亚洲视频在线| 日韩在线一二三区| 午夜精品久久久久久久99水蜜桃| 亚洲欧美日韩久久精品| 伊人夜夜躁av伊人久久| 亚洲免费高清视频在线| 综合欧美一区二区三区| 亚洲欧美日本在线| 亚洲综合在线免费观看| 亚洲一区二区三区视频在线播放| 亚洲老司机在线| 亚洲制服欧美中文字幕中文字幕| 玉米视频成人免费看| 亚洲一区二区三区小说| 午夜日韩在线电影| 麻豆中文一区二区| 国产美女精品人人做人人爽| 国产成人av电影在线| 成人一区在线观看| 色天天综合色天天久久| 欧美色区777第一页| 6080国产精品一区二区| 日韩一区二区精品葵司在线| 久久久午夜电影| 国产精品的网站| 亚洲黄色在线视频| 热久久免费视频| 国产美女精品一区二区三区| 成人免费毛片a| 91成人免费在线视频| 亚洲444eee在线观看| 日本不卡视频在线观看| 国产乱子伦一区二区三区国色天香| 国产成人超碰人人澡人人澡| 91丝袜美女网| 91精品国产色综合久久久蜜香臀| 精品乱人伦小说| 中文字幕一区二区不卡| 三级在线观看一区二区| 黑人精品欧美一区二区蜜桃| av午夜精品一区二区三区| 3d成人动漫网站| 日本一区二区三区在线观看| 亚洲夂夂婷婷色拍ww47| 久久69国产一区二区蜜臀| 91在线精品一区二区| 日韩视频不卡中文| 成人免费视频在线观看| 日韩成人dvd| 99久久精品99国产精品| 日韩欧美一卡二卡| 一区二区三区中文在线| 激情欧美一区二区| 欧美色爱综合网| 国产精品午夜久久| 青青草国产成人99久久| 一本久久a久久免费精品不卡| 欧美一级欧美三级在线观看| 国产精品福利在线播放| 美女一区二区三区在线观看| 99re这里只有精品首页| 日韩精品在线网站| 亚洲成人自拍一区| 不卡电影一区二区三区| 欧美草草影院在线视频| 亚洲国产精品一区二区www| 成人动漫中文字幕| 欧美大片一区二区三区| 亚洲福利视频三区| 91丨九色丨尤物| 中文字幕av一区二区三区| 日本网站在线观看一区二区三区| 91啪亚洲精品| 国产精品视频你懂的| 激情综合一区二区三区| 制服丝袜中文字幕亚洲| 亚洲一区二三区| 91热门视频在线观看| 国产精品无遮挡| 国产成人在线免费观看| 欧美成人高清电影在线| 日本vs亚洲vs韩国一区三区 | 久久嫩草精品久久久久| 麻豆成人久久精品二区三区红| 欧美亚洲日本国产| 亚洲精选免费视频| 91农村精品一区二区在线| 欧美国产精品久久| 国产不卡在线播放| 国产精品欧美精品| 成人午夜激情在线| 国产三级一区二区三区| 国产麻豆成人传媒免费观看| 欧美电影免费观看高清完整版在线| 日韩中文字幕一区二区三区| 欧美精品日韩精品| 亚洲18色成人| 91精品国产综合久久精品app| 亚洲成人免费观看| 日韩一区二区不卡| 久久爱www久久做| 精品国产一二三| 国产精品一区二区免费不卡 | 国产精品免费久久久久| 国产成人午夜精品5599| 国产精品免费网站在线观看| 暴力调教一区二区三区| 《视频一区视频二区| 欧美亚洲国产一区在线观看网站| 日本精品一区二区三区四区的功能| 伊人性伊人情综合网| 欧美怡红院视频| 婷婷久久综合九色综合伊人色| 在线电影一区二区三区| 欧美96一区二区免费视频| 久久久久久久久久久久久夜| 高清成人在线观看| 亚洲美女精品一区| 欧美高清精品3d| 狠狠网亚洲精品| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 99久久精品国产麻豆演员表| 亚洲老司机在线| 日韩欧美国产综合一区| 成人免费视频视频在线观看免费| 亚洲久草在线视频| 欧美一二三区精品| 成人福利视频在线看| 五月综合激情婷婷六月色窝| 精品久久久久久久人人人人传媒|