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

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

?? test1394.cpp

?? 1394測試程序
?? CPP
字號:
// Test1394.cpp: implementation of the CTest1394 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "testapp.h"
#include "Test1394.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTest1394::CTest1394()
{
	// initialize members
	mFileHandle = NULL;
	ZeroMemory(&mOverlapped,sizeof(mOverlapped));
	InitializeCriticalSection(&mCritSect);
	mDevDetail=NULL;

	mCheckedBuildDetected = FALSE;
	mDemoVersionDetected = FALSE;
}

CTest1394::~CTest1394()
{
	// close file handle, free mDevDetail
	Close();
	// free resources
	DeleteCriticalSection(&mCritSect);
}

void CTest1394::Close()
{
	if ( mFileHandle != NULL ) {
		::CloseHandle(mFileHandle);
		mFileHandle = NULL;
	}

	if ( mOverlapped.hEvent != NULL ) {
		::CloseHandle(mOverlapped.hEvent);
		mOverlapped.hEvent = NULL;
	}

	// delete detail info if any
	if ( mDevDetail!=NULL ) {
		delete[] (char*)mDevDetail;
		mDevDetail = NULL;
	}
}

//DEL HDEVINFO CTest1394::CreateDeviceList( GUID *InterfaceGuid)
//DEL {
//DEL 	HDEVINFO h;
//DEL 
//DEL 	h = SetupDiGetClassDevs(
//DEL 				(GUID*)InterfaceGuid,									// LPGUID ClassGuid, 
//DEL 				NULL,																  // PCTSTR Enumerator, 
//DEL 				NULL,																	// HWND hwndParent, 
//DEL 				DIGCF_DEVICEINTERFACE | DIGCF_PRESENT	// DWORD Flags
//DEL 				);
//DEL 	return ( (h==INVALID_HANDLE_VALUE) ? NULL : h );
//DEL }

//DEL void CTest1394::DestroyDeviceList(HDEVINFO DeviceList)
//DEL {
//DEL 	if ( DeviceList!=NULL ) {
//DEL 		SetupDiDestroyDeviceInfoList(DeviceList);
//DEL 	}
//DEL }

DWORD CTest1394::ForceBusReset( ULONG fulFlags)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_BUS_RESET,
							&fulFlags,
							sizeof(ULONG),
							NULL,
							0,
							NULL
							);

	return Status;
}

DWORD CTest1394::GetLocalHostInfo( PGET_LOCAL_HOST_INFORMATION pGetLocalHostInfo)
{
	DWORD Status;
	Status = IoctlSync(
							IOCTL_TEST1394_GET_LOCAL_HOST_INFO,
							pGetLocalHostInfo,
							pGetLocalHostInfo->ulBufferSize,
							pGetLocalHostInfo,
							pGetLocalHostInfo->ulBufferSize,
							NULL
							);
	return Status;
}

DWORD CTest1394::SetLocalHostProperties(PSET_LOCAL_HOST_PROPERTIES pHCProps)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_SET_LOCAL_HOST_PROPERTIES,
							pHCProps,
							sizeof(SET_LOCAL_HOST_PROPERTIES),
							NULL,
							0,
							NULL
							);

	return Status;
}

DWORD CTest1394::GetNodeAddress(GET_1394_ADDRESS *GetNodeAdr)
{
	DWORD Status;
	Status = IoctlSync(
							IOCTL_TEST1394_GET_ADDR_FROM_DEVICE_OBJECT,
							GetNodeAdr,
							sizeof(GET_1394_ADDRESS),
							GetNodeAdr,
							sizeof(GET_1394_ADDRESS),
							NULL
							);

	return Status;
}

DWORD CTest1394::GetResetGenerationCount( PULONG GenerationCount)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_GET_GENERATION_COUNT,
							GenerationCount,
							sizeof(PULONG),
							GenerationCount,
							sizeof(PULONG),
							NULL
							);

	return Status;
}

DWORD CTest1394::GetSpeedBetweenDevices( PGET_MAX_SPEED_BETWEEN_DEVICES pGetMaxSpeed)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_GET_MAX_SPEED_BETWEEN_DEVICES,
							pGetMaxSpeed,
							sizeof(GET_MAX_SPEED_BETWEEN_DEVICES),
							pGetMaxSpeed,
							sizeof(GET_MAX_SPEED_BETWEEN_DEVICES),
							NULL
							);

	return Status;
}

DWORD CTest1394::IoctlSync(
					DWORD IoctlCode,
					void* InBuffer,
					DWORD InBufferSize,
					void* OutBuffer,
					DWORD OutBufferSize,
					DWORD *BytesReturned
					)
{
	DWORD Status;
	DWORD BytesRet = 0;
	BOOL succ;

	// check if the driver was opened
	if ( mFileHandle == NULL ) {
		return STATUS_DEVICE_NOT_OPEN;
	}

	// IOCTL requests must be serialized
	// because there is only one event object per instance
	EnterCriticalSection(&mCritSect);

	// call the device driver
	succ = DeviceIoControl(
						mFileHandle,        // driver handle
						IoctlCode,			// IOCTL code,驅動中的必須與應用程序中的相對應
						InBuffer,			// input buffer
						InBufferSize,       // input buffer size
						OutBuffer,     	    // output buffer
						OutBufferSize,      // output buffer size
						&BytesRet,          // number of bytes returned
						&mOverlapped		// overlapped structure (async.)
						);
/*	// call the device driver
	succ = DeviceIoControl(
						mFileHandle,        // driver handle
						IoctlCode,			// IOCTL code,驅動中的必須與應用程序中的相對應
						InBuffer,			// input buffer
						InBufferSize,       // input buffer size
						OutBuffer,     	    // output buffer
						OutBufferSize,      // output buffer size
						&BytesRet,          // number of bytes returned
						NULL		
						);*/
	//DeviceIoControl調用成功,返回值nonzero,不成功,返回值為zero,調用GetLastError得到錯誤描述
	if ( succ ) 
	{
		// ioctl completed successfully
		Status = STATUS_SUCCESS;//STATUS_SUCCESS 為 0 
	} 
	else 
	{
		Status = GetLastError();
		
		if ( Status == ERROR_IO_PENDING ) 
		{
			// the operation is pending, wait for completion
			succ = GetOverlappedResult(
								mFileHandle,
								&mOverlapped,
								&BytesRet,  // byte count
								TRUE        // wait flag
								);
			if ( succ ) 
			{
				// completed successfully
				Status = STATUS_SUCCESS;
			}
			else 
			{
				Status = GetLastError();
			}
		}
	}

	LeaveCriticalSection(&mCritSect);

	if ( BytesReturned != NULL ) {
		*BytesReturned = BytesRet;
	}

	return Status;
}

DWORD CTest1394::Open(int DeviceNumber, HDEVINFO DeviceList,const GUID *InterfaceGuid)
{
	DWORD Status;
	HANDLE h;
	char *Name;
	SP_DEVICE_INTERFACE_DATA	DevData;//a device interface
	DWORD len;
	BOOL succ;

	if ( mFileHandle!=NULL ) 
	{	// already open
		return STATUS_SUCCESS;
	}

	// check parameters
	if ( (DeviceList==NULL) || (InterfaceGuid==NULL) ) 
	{
		return STATUS_INVALID_FUNCTION_PARAM;
	}

	// delete old detail data if any
	if ( mDevDetail!=NULL ) 
	{
		delete[] (char*)mDevDetail;
		mDevDetail = NULL;
	}

	// enumerate the interface
	// get the device information for the given device number
	ZeroMemory(&DevData,sizeof(DevData));
	DevData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
	succ = SetupDiEnumDeviceInterfaces(DeviceList, NULL, (GUID*)InterfaceGuid, DeviceNumber, &DevData );
	if (!succ) 
	{
		Status = GetLastError();
		if ( Status==ERROR_NO_MORE_ITEMS ) 
		{
			Status = STATUS_NO_SUCH_DEV_INSTANCE;
		}
		return Status;
	}
	// get the length of the detailed information, allocate buffer
	SetupDiGetDeviceInterfaceDetail(DeviceList, &DevData, NULL, 0, &len, NULL);
	mDevDetail = (SP_INTERFACE_DEVICE_DETAIL_DATA*) new char[len];	//lint !e433 !e826
	if ( mDevDetail==NULL ) 
	{
		return STATUS_MEM_ALLOC_FAILED;
	}
	// now get the  detailed device information
	ZeroMemory(mDevDetail,len);
	mDevDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
	succ = SetupDiGetDeviceInterfaceDetail(DeviceList, &DevData, mDevDetail, len, &len, NULL);
	if (!succ) 
	{
		return GetLastError();
	}
	// set device name
	Name = mDevDetail->DevicePath;

	//正式開始對驅動的操作
	// try to open the device driver
	h = ::CreateFile(
					Name,//設備名
					GENERIC_READ | GENERIC_WRITE,				// access mode
					FILE_SHARE_WRITE | FILE_SHARE_READ, // share mode
					NULL,																// security desc.
					OPEN_EXISTING,											// how to create
					FILE_FLAG_OVERLAPPED,								// file attributes
					NULL																// template file
					);
	if ( h == INVALID_HANDLE_VALUE ) 
		Status = STATUS_DEVICE_NOT_FOUND;
	else 
	{
		// save handle
		mFileHandle = h;//打開的1394設備句柄
		Status = STATUS_SUCCESS;
		//不使用OVERLAP

		// init the event (auto-reset type)
		mOverlapped.hEvent = ::CreateEvent(NULL ,FALSE ,FALSE ,NULL); 
		if ( mOverlapped.hEvent == NULL ) 
		{
			Status = STATUS_NO_MEMORY;
			Close();
		} 
		else 
		{
			Status = STATUS_SUCCESS;
		} // initialize event
	} // open device handle
	
	return Status;
}

DWORD CTest1394::SendPhyConfigPacket( PPHY_CONFIGURATION_PACKET SendPCP)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_SEND_PHY_CONFIG_PACKET,
							SendPCP,
							sizeof(PHY_CONFIGURATION_PACKET),
							NULL,
							0,
							NULL
							);

	return Status;
}

DWORD CTest1394::SetDeviceXmitProperties( PDEVICE_XMIT_PROPERTIES XmitProps)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_SET_DEVICE_XMIT_PROPERTIES,
							XmitProps,
							sizeof(DEVICE_XMIT_PROPERTIES),
							NULL,
							0,
							NULL
							);

	return Status;
}

char* CTest1394::GetDevicePathName()
{
	if ( mDevDetail!=NULL ) 
	{
		return ( mDevDetail->DevicePath );
	} 
	else 
	{
		return NULL;
	}
}

DWORD CTest1394::BusResetNotification(ULONG fulFlags)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_BUS_RESET_NOTIFICATION,
							&fulFlags,
							sizeof(ULONG),
							NULL,
							0,
							NULL
							);

	return Status;
}

DWORD CTest1394::GetDriverInfo(PVERSION_DATA DriverInfo)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_GET_DRIVER_INFO,
							NULL,
							0,
							DriverInfo,
							sizeof(VERSION_DATA),
							NULL
							);

	return Status;
}

DWORD CTest1394::GetDeviceInfoBlock(unsigned int* BlockType,
									unsigned char* BlockBuf,
									DWORD* BlockBufLength)
{
	DWORD Status;
	Status = IoctlSync(
							IOCTL_TEST1394_GET_CONFIG_INFO_BLOCK,
							BlockType,
							sizeof(unsigned int),
							BlockBuf,
							*BlockBufLength,
							BlockBufLength
							);
	return Status;
}

DWORD CTest1394::GetDeviceConfigInfo(PGet_Config_Info_Params pInfo,ULONG uBufSize)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_GET_CONFIG_INFO_PARAMS,
							NULL,
							0,
							pInfo,
							uBufSize,
							NULL
							);

	return Status;
}

DWORD CTest1394::AsyncRead(PASYNC_READ pAsyncRead,ULONG ulBufferSize)
{/*
	DWORD Status;
	
	Status = IoctlSync(
							IOCTL_TEST1394_ASYNC_READ,
							pAsyncRead,
							ulBufferSize,
							pAsyncRead,
							ulBufferSize,
							NULL
							);	
	return Status;*/
	DWORD Status;
	DWORD BytesRet = 0;
	BOOL succ;

	// check if the driver was opened
	if ( mFileHandle == NULL ) {
		return STATUS_DEVICE_NOT_OPEN;
	}
/*
	LARGE_INTEGER  litmp ;
	LONGLONG  QPart1,QPart2 ;
	double  dfMinus, dfFreq, dfTim ;

	QueryPerformanceFrequency(&litmp) ; 
	 // 獲得計數器的時鐘頻率
	dfFreq = (double)litmp.QuadPart ;

	QueryPerformanceCounter(&litmp) ; 
	 // 獲得初始值
	QPart1 = litmp.QuadPart ;
*/
	// call the device driver
	succ = DeviceIoControl(
						mFileHandle,        // driver handle
						IOCTL_TEST1394_ASYNC_READ,			// IOCTL code,驅動中的必須與應用程序中的相對應
						pAsyncRead,			// input buffer
						ulBufferSize,       // input buffer size
						pAsyncRead,     	    // output buffer
						ulBufferSize,      // output buffer size
						&BytesRet,          // number of bytes returned
						NULL		
						);/*
	QueryPerformanceCounter(&litmp) ; 
	// 獲得中止值
	QPart2 = litmp.QuadPart ;

	dfMinus = (double)(QPart2 - QPart1) ;
	dfTim = dfMinus / dfFreq ;  
	// 獲得對應的時間值
	CString strTime;
	strTime.Format("%f秒 \r\n", dfTim);
	PrintOut( strTime.GetBufferSetLength( strTime.GetLength() ) );
	strTime.ReleaseBuffer();*/
	//DeviceIoControl調用成功,返回值nonzero,不成功,返回值為zero,調用GetLastError得到錯誤描述
	if ( succ ) 
	{
		// ioctl completed successfully
		Status = STATUS_SUCCESS;//STATUS_SUCCESS 為 0 
	} 
	else 
	{
		Status = GetLastError();		
	}	
	return Status;
}

DWORD CTest1394::AsyncWrite(PASYNC_WRITE pAsyncWrite,ULONG ulBufferSize)
{
	DWORD Status;
	Status = IoctlSync(
							IOCTL_TEST1394_ASYNC_WRITE,
							pAsyncWrite,
							ulBufferSize,
							pAsyncWrite,
							ulBufferSize,
							NULL
							);		
	return Status;
}

DWORD CTest1394::AllocateAddressRange(PALLOCATE_ADDRESS_RANGE pAllocateAddressRange, ULONG ulBufferSize)
{
	DWORD Status;

	Status = IoctlSync(
							IOCTL_TEST1394_ALLOC_ADDR_RANGE,
							pAllocateAddressRange,
							ulBufferSize,
							pAllocateAddressRange,
							ulBufferSize,
							NULL
							);
	return Status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久久美女| 亚洲制服丝袜av| 日韩欧美一区在线观看| 91国在线观看| 91激情在线视频| 91美女福利视频| 国产98色在线|日韩| 成人一区二区三区| 国内精品久久久久影院色 | 亚洲人成亚洲人成在线观看图片| 久久综合九色综合97婷婷| 777xxx欧美| 欧美日韩美女一区二区| 欧美肥妇毛茸茸| 欧美日韩aaa| 欧美群妇大交群的观看方式| 成人午夜视频免费看| 91在线观看视频| 99re热视频这里只精品 | 精品国产乱子伦一区| 在线电影欧美成精品| 欧美日韩不卡一区| 色综合天天综合网天天狠天天| 成人三级伦理片| 成人免费va视频| av电影在线观看一区| 欧美最猛性xxxxx直播| 欧美调教femdomvk| 欧美精品自拍偷拍| 精品福利在线导航| 国产精品久久精品日日| 一色桃子久久精品亚洲| 国产婷婷色一区二区三区在线| 中文字幕一区二区不卡| 亚洲三级在线免费观看| 亚洲国产欧美在线人成| 久久国产福利国产秒拍| 国产一区二区中文字幕| 成人精品亚洲人成在线| 欧美影院一区二区三区| 5566中文字幕一区二区电影| 日韩三级av在线播放| 久久久久久久久一| 综合激情网...| 亚洲大片精品永久免费| 亚洲综合视频在线观看| 精一区二区三区| 懂色一区二区三区免费观看| 91性感美女视频| 精品免费视频一区二区| 国产亚洲精品7777| 亚洲精品视频一区| 国产一区中文字幕| 91视频国产资源| 4438x亚洲最大成人网| 欧洲亚洲国产日韩| 久久久久88色偷偷免费| 亚洲欧美日韩系列| 日韩中文字幕亚洲一区二区va在线| 国产大陆亚洲精品国产| 在线观看国产91| 久久网站最新地址| 亚洲欧洲色图综合| 日本强好片久久久久久aaa| 国产一区二区女| 欧美日韩在线三区| 中文字幕一区二区三区四区不卡 | 久久不见久久见免费视频1| 91视频国产观看| 欧美成人福利视频| 亚洲蜜臀av乱码久久精品蜜桃| 日韩电影在线免费看| eeuss鲁片一区二区三区| 欧美精品免费视频| 久久精品在线观看| 乱中年女人伦av一区二区| 一道本成人在线| 久久久99久久| 国模大尺度一区二区三区| 在线免费亚洲电影| 国产精品免费视频观看| 国产综合久久久久影院| 欧美日韩一区二区电影| 国产精品丝袜久久久久久app| 亚洲成人动漫精品| av在线不卡电影| 久久综合色一综合色88| 一区二区成人在线视频| 成人av中文字幕| 亚洲欧美日韩系列| 成人三级伦理片| 国产欧美精品一区aⅴ影院| 玖玖九九国产精品| 欧美老年两性高潮| 亚州成人在线电影| 日本精品免费观看高清观看| 国产欧美日韩亚州综合| 国产福利不卡视频| 欧美tickling挠脚心丨vk| 亚洲成av人片| 欧美日韩在线不卡| 中文字幕一区二| 91啦中文在线观看| 国产欧美日韩中文久久| 日韩国产精品大片| 欧美一区二区人人喊爽| 午夜电影网亚洲视频| 色婷婷综合激情| 亚洲一区视频在线| 在线视频欧美区| 一区二区三区中文字幕在线观看| 日韩一区二区中文字幕| 夜夜嗨av一区二区三区四季av| 成人app下载| 亚洲欧洲三级电影| 成人aa视频在线观看| 国产精品视频免费| av电影在线不卡| 国产精品久久久久久久久免费桃花| 成人国产亚洲欧美成人综合网| 久久久久久久综合日本| 国产精品影视在线观看| 精品国产第一区二区三区观看体验| 麻豆精品新av中文字幕| 日韩欧美综合在线| 韩国一区二区视频| 日韩一二三区视频| 精品一区二区在线免费观看| 精品国产乱码久久久久久蜜臀| 蜜桃av一区二区三区电影| 日韩欧美的一区| 国产精品一区二区在线观看不卡| 日韩精品自拍偷拍| 国产精品性做久久久久久| 久久免费视频色| 成人国产在线观看| 亚洲另类一区二区| 欧美日韩aaaaa| 国产成人aaa| 亚洲自拍偷拍综合| 日韩三级高清在线| 成人福利视频在线| 一区二区欧美视频| 欧美一区二区三区人| 成人在线一区二区三区| 亚洲精品菠萝久久久久久久| 欧美精品日韩一区| 大桥未久av一区二区三区中文| 亚洲精品国产精品乱码不99| 欧美日本在线一区| 成人精品高清在线| 亚洲制服丝袜av| 欧美成人vps| 欧美少妇性性性| 久久99精品久久久久久久久久久久 | 一区二区欧美在线观看| 91精品黄色片免费大全| 午夜伦理一区二区| 国产精品美女久久久久aⅴ国产馆| 欧美在线免费观看亚洲| 日本不卡1234视频| 亚洲女女做受ⅹxx高潮| 欧美大片在线观看一区二区| 国产精品一区免费在线观看| 天堂成人国产精品一区| 久久精品一区二区三区不卡 | 欧美日韩高清在线| 久久机这里只有精品| 国产精品嫩草久久久久| 制服丝袜日韩国产| 色域天天综合网| 大桥未久av一区二区三区中文| 美腿丝袜在线亚洲一区| 亚洲成人你懂的| 亚洲人精品午夜| 中文字幕精品在线不卡| 亚洲精品在线免费观看视频| 欧美日本精品一区二区三区| 91在线视频在线| 高清不卡一区二区在线| 国产一区二区伦理片| 蜜臀91精品一区二区三区| 亚洲6080在线| 亚洲午夜精品在线| 亚洲欧美视频一区| 中文字幕中文字幕一区| 久久噜噜亚洲综合| 欧美zozozo| 日韩一区二区免费在线观看| 欧美猛男超大videosgay| 在线精品视频一区二区| 9久草视频在线视频精品| 国产自产高清不卡| 久久不见久久见中文字幕免费| 日韩专区在线视频| 日韩av高清在线观看| 日韩电影在线免费看| 日本午夜精品一区二区三区电影| 无吗不卡中文字幕| 午夜精品123|