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

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

?? ch375wdm.c

?? 這是USB接口芯片CH372上位機和下位機的測試程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
// 這是CH372和CH375的Windows98/ME/2000/XP簡化版驅(qū)動程序, 僅供學習USB驅(qū)動開發(fā)
// 稍加修改完全可以用于其它USB芯片, 不過作者希望你是用于CH372和CH375芯片
// 2003.09.08, 2003.12.28, 2004.10.15, 2004.12.05, 2004.12.10, 2005.01.20, 2005.02.23, 2005.07.15
//****************************************
//**  Copyright  (C)  W.ch  1999-2005   **
//**  Web:  http://www.winchiphead.com  **
//****************************************
//**  WDM for USB interface chip CH375  **
//**  C, VC5.0, Windows 98 DDK          **
//****************************************
//
// USB總線接口芯片CH375的WDM驅(qū)動程序   V0.1
// 南京沁恒電子有限公司  作者: W.ch 2005.07
// CH375-WDM  V0.1 , Support: Ctrl/Bulk/Int
// 運行環(huán)境: Windows 98/ME, Windows 2000/XP
// support USB chip: CH372/CH375
//


#define		mTHIS_VERSION			0x01		// 當前版本
#define		mTHIS_VER_STR			"0.1"		// 當前版本字符串

#include	<wdm.h>
#include	<usbdi.h>
#include	<usbdlib.h>


#include	"CH375WDM.H"

typedef	struct	_DEVICE_EXTENSION {				// 定義設(shè)備擴展結(jié)構(gòu)
	UNICODE_STRING		mExtDeviceName;			// 設(shè)備名稱
	PDEVICE_OBJECT		mExtPhysicalTarget;		// 物理設(shè)備對象指針
	PDEVICE_OBJECT		mExtNextLowerDevice;	// 下級設(shè)備對象指針
	USBD_PIPE_HANDLE	mExtInterUpPipe;		// USB中斷數(shù)據(jù)上傳管道的句柄
	USBD_PIPE_HANDLE	mExtAuxDownPipe;		// USB輔助數(shù)據(jù)下傳管道的句柄
	USBD_PIPE_HANDLE	mExtDataDownPipe;		// USB數(shù)據(jù)塊下傳管道的句柄
	USBD_PIPE_HANDLE	mExtDataUpPipe;			// USB數(shù)據(jù)塊上傳管道的句柄
	ULONG				mExtIoCount;			// 計數(shù)正在進行的操作,以阻止操作中途停止或者移除設(shè)備
	ULONG				mExtDeviceOpen;			// 指示設(shè)備被打開的次數(shù)
	BOOLEAN				mExtDeviceStart;		// 指示設(shè)備啟動狀態(tài)
	BOOLEAN				mExtDeviceRemove;		// 指示設(shè)備移除狀態(tài)
} mDEVICE_EXTENSION, *mPDEVICE_EXTENSION;


// 驅(qū)動程序說明
UCHAR			mDescription[128] = " CH375 WDM V" mTHIS_VER_STR " "
									" Author : W.ch  "
									"HX.S065  2003.12\xd\xa"
									" www.wch99.com  \xd\xa"
									" Copyright (C) W.ch 1999-2005 \xd\xa\x0";

PDRIVER_OBJECT	mDriverObject = NULL;


// 子程序說明


NTSTATUS		DriverEntry( PDRIVER_OBJECT iDriverObject, PUNICODE_STRING iRegistryPath );
VOID			mDriverUnload( PDRIVER_OBJECT iDriverObject );
NTSTATUS		mAddDevice( PDRIVER_OBJECT iDriverObject, PDEVICE_OBJECT iPhysicalDeviceObject );
VOID			mRemoveDevice( PDEVICE_OBJECT iDeviceObject );
NTSTATUS		mDispatchCreate( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mDispatchClose( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mDispatchDeviceControl( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mRequestPipe( PDEVICE_OBJECT iDeviceObject, USHORT iFunction, ULONG iPipe );
NTSTATUS		mDispatchCleanup( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mDispatchPower( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mDispatchSystemControl( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mDispatchPnp( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mWaitCompletion( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mCompletionRoutine( PDEVICE_OBJECT iDeviceObject, PIRP iIrp, PVOID iContext );
NTSTATUS		mActiveConfig( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mDeactiveConfig( PDEVICE_OBJECT iDeviceObject, PIRP iIrp );
NTSTATUS		mUsbSubmitUrb( PDEVICE_OBJECT iDeviceObject, PURB iUrb );


#ifdef		ALLOC_PRAGMA
#pragma		alloc_text( INIT, DriverEntry )
#endif


NTSTATUS	DriverEntry(  // 驅(qū)動程序初始化入口
	PDRIVER_OBJECT	iDriverObject,  // 驅(qū)動程序?qū)ο?	PUNICODE_STRING	iRegistryPath )
{
	mDriverObject = iDriverObject;  // 保存驅(qū)動程序?qū)ο?//	while ( mDriverObject );  // 調(diào)試
	iDriverObject -> MajorFunction[ IRP_MJ_CREATE ] = mDispatchCreate;  // 創(chuàng)建或者打開設(shè)備
	iDriverObject -> MajorFunction[ IRP_MJ_CLOSE ] = mDispatchClose;  // 關(guān)閉設(shè)備
	iDriverObject -> MajorFunction[ IRP_MJ_DEVICE_CONTROL ] = mDispatchDeviceControl;  // 設(shè)備控制
	iDriverObject -> MajorFunction[ IRP_MJ_CLEANUP ] = mDispatchCleanup;  // 取消操作
	iDriverObject -> MajorFunction[ IRP_MJ_POWER ] = mDispatchPower;  // 電源管理
	iDriverObject -> MajorFunction[ IRP_MJ_SYSTEM_CONTROL ] = mDispatchSystemControl;  // 系統(tǒng)WMI接口
	iDriverObject -> MajorFunction[ IRP_MJ_PNP ] = mDispatchPnp;  // 設(shè)備PnP操作
	iDriverObject -> DriverUnload = mDriverUnload;  // 卸載驅(qū)動程序
	iDriverObject -> DriverExtension -> AddDevice = mAddDevice;  // 檢測到新硬件設(shè)備
	return( STATUS_SUCCESS );
}

VOID		mDriverUnload(  // 卸載驅(qū)動程序
	PDRIVER_OBJECT	iDriverObject )
{
	mDriverObject = NULL;  // 清除驅(qū)動程序?qū)ο?指示系統(tǒng)線程終止
}

NTSTATUS	mAddDevice(  // 添加新設(shè)備的PnP例程
	PDRIVER_OBJECT	iDriverObject,  // 驅(qū)動程序?qū)ο?	PDEVICE_OBJECT	iPhysicalDeviceObject )
{
	PDEVICE_OBJECT		mDeviceObject = NULL;
	mPDEVICE_EXTENSION	mDeviceExtension;
	NTSTATUS			mStatus = STATUS_INSUFFICIENT_RESOURCES;
	__try {  // 確保退出前的處理
		mStatus = IoCreateDevice( iDriverObject, sizeof( mDEVICE_EXTENSION ), NULL,  // 創(chuàng)建設(shè)備對象
								  FILE_DEVICE_UNKNOWN, 0, FALSE, &mDeviceObject );  // 返回的設(shè)備對象
		if ( ! NT_SUCCESS( mStatus ) ) __leave;  // 創(chuàng)建設(shè)備失敗
		mDeviceExtension = mDeviceObject -> DeviceExtension;  // 設(shè)備擴展指針
		RtlZeroMemory( mDeviceExtension, sizeof( mDEVICE_EXTENSION ) );  // 清除內(nèi)存
		mDeviceExtension -> mExtPhysicalTarget = iPhysicalDeviceObject;  // 物理設(shè)備的功能設(shè)備對象
		mDeviceExtension -> mExtIoCount = 0;  // 清操作計數(shù)
		mDeviceExtension -> mExtDeviceOpen = 0;  // 清除設(shè)備打開標志
		mDeviceExtension -> mExtDeviceStart = FALSE;  // 清除設(shè)備啟動標志
		mDeviceExtension -> mExtDeviceRemove = FALSE;  // 清除設(shè)備移除標志
		mDeviceExtension -> mExtNextLowerDevice = IoAttachDeviceToDeviceStack( mDeviceObject,  // 掛接設(shè)備棧,返回下級設(shè)備
																			   iPhysicalDeviceObject );  // 指向物理對象
		if ( mDeviceExtension -> mExtNextLowerDevice == NULL ) {  // 掛接設(shè)備棧失敗
			mStatus = STATUS_UNSUCCESSFUL;  // 返回錯誤信息
			__leave;
		}
		mStatus = IoRegisterDeviceInterface( iPhysicalDeviceObject, &CH375Guid,  // 注冊設(shè)備接口
											 NULL, & mDeviceExtension -> mExtDeviceName );  // 保存符號鏈接名稱
		mDeviceObject -> Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;  // 緩沖IO,指示代碼可能在分頁內(nèi)存中
		mDeviceObject -> Flags &= ~DO_DEVICE_INITIALIZING;  // 初始化完成
	}
	__finally {  // 退出前的處理
		if ( ! NT_SUCCESS( mStatus ) ) {  // 初始化失敗
			mRemoveDevice( mDeviceObject );  // 移除設(shè)備
		}
	}
	return( STATUS_SUCCESS );
}

VOID		mRemoveDevice(  // 移除設(shè)備
	PDEVICE_OBJECT	iDeviceObject )
{
	ULONG				mDeviceInstance;
	mPDEVICE_EXTENSION	mDeviceExtension;
	if ( iDeviceObject == NULL ) return;  // 設(shè)備對象無效
	mDeviceExtension = iDeviceObject -> DeviceExtension;  // 設(shè)備擴展
	if ( mDeviceExtension -> mExtDeviceName.Buffer != NULL ) {  // 已經(jīng)注冊設(shè)備接口
		IoSetDeviceInterfaceState( & mDeviceExtension -> mExtDeviceName, FALSE );  // 禁用設(shè)備接口
		RtlFreeUnicodeString( & mDeviceExtension -> mExtDeviceName );  // 釋放設(shè)備名稱緩沖區(qū)
		mDeviceExtension -> mExtDeviceName.Buffer = NULL;
	}
	if ( mDeviceExtension -> mExtNextLowerDevice != NULL ) {  // 已經(jīng)掛接到設(shè)備棧
		IoDetachDevice( mDeviceExtension -> mExtNextLowerDevice );  // 撤出設(shè)備棧
		mDeviceExtension -> mExtNextLowerDevice = NULL;
	}
	IoDeleteDevice( iDeviceObject );  // 刪除設(shè)備對象
}

NTSTATUS	mDispatchCreate(  // 新建或者打開
	PDEVICE_OBJECT	iDeviceObject,
	PIRP			iIrp )
{
	mPDEVICE_EXTENSION	mDeviceExtension = iDeviceObject -> DeviceExtension;  // 設(shè)備擴展
	iIrp -> IoStatus.Information = 0;
	InterlockedIncrement( & mDeviceExtension -> mExtDeviceOpen );  // 打開計數(shù)增量
	iIrp -> IoStatus.Status = STATUS_SUCCESS;  // 返回操作狀態(tài)
	IoCompleteRequest( iIrp, IO_NO_INCREMENT );  // 完成請求
	return( STATUS_SUCCESS );  // 返回狀態(tài)
}

NTSTATUS	mDispatchClose(  // 關(guān)閉
	PDEVICE_OBJECT	iDeviceObject,
	PIRP			iIrp )
{
	mPDEVICE_EXTENSION	mDeviceExtension = iDeviceObject -> DeviceExtension;  // 設(shè)備擴展
	InterlockedDecrement( & mDeviceExtension -> mExtDeviceOpen );  // 關(guān)閉則打開計數(shù)減量
	iIrp -> IoStatus.Status = STATUS_SUCCESS;  // 返回操作狀態(tài)
	iIrp -> IoStatus.Information = 0;
	IoCompleteRequest( iIrp, IO_NO_INCREMENT );  // 完成請求
	return( STATUS_SUCCESS );  // 返回狀態(tài)
}

NTSTATUS	mDispatchDeviceControl(  // 設(shè)備控制
	PDEVICE_OBJECT	iDeviceObject,
	PIRP			iIrp )
{
	UCHAR				mRequestType, mRequestCode;
	USHORT				mRequestValue, mRequestIndex;
	ULONG				mControlCode;
	ULONG				mFunction, mLength, mReturn;
	ULONG				mTransferFlags, mParameter;
	PVOID				mBuffer;
	mPWIN32_COMMAND		mWin32Command;
	NTSTATUS			mStatus;
	PURB				mUrb;
	PIO_STACK_LOCATION	mCurrentIrpStack;
	mPDEVICE_EXTENSION	mDeviceExtension = iDeviceObject -> DeviceExtension;  // 設(shè)備擴展
	InterlockedIncrement( & mDeviceExtension -> mExtIoCount );  // 操作計數(shù)增量,阻止中途停止或者移除設(shè)備
	mCurrentIrpStack = IoGetCurrentIrpStackLocation( iIrp );  // 當前棧單元指針
	mControlCode = mCurrentIrpStack -> Parameters.DeviceIoControl.IoControlCode;  // 操作命令
	if ( mControlCode == IOCTL_CH375_COMMAND ) {  // 專用接口
		mStatus = STATUS_SUCCESS;  // 返回狀態(tài)預置為成功
		mReturn = 0;  // 返回數(shù)據(jù)長度預置為0
		mUrb = ExAllocatePool( NonPagedPool, sizeof( URB ) );  // 分配內(nèi)存作為URB請求塊
		if (  mUrb != NULL && mCurrentIrpStack -> Parameters.DeviceIoControl.InputBufferLength >= mWIN32_COMMAND_HEAD ) {  // 輸入緩沖區(qū)長度有效
			mWin32Command = iIrp -> AssociatedIrp.SystemBuffer;  // 命令緩沖區(qū)
			mFunction = mWin32Command -> mFunction;  // 功能代碼

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影一区二区| 亚洲国产欧美在线人成| 亚洲男人都懂的| 美国av一区二区| 日本高清无吗v一区| 精品少妇一区二区三区在线视频| 亚洲人成电影网站色mp4| 国产综合久久久久久鬼色| 欧美日韩国产综合一区二区三区| 国产精品视频一区二区三区不卡| 奇米色一区二区| 欧美吻胸吃奶大尺度电影| 国产精品三级电影| 韩国精品主播一区二区在线观看 | 亚洲女同女同女同女同女同69| 日韩国产一二三区| 在线精品亚洲一区二区不卡| 日本一区二区在线不卡| 国产美女精品人人做人人爽| 日韩欧美的一区| 日韩电影在线免费观看| 欧美日韩精品专区| 亚洲午夜羞羞片| 欧美日韩三级在线| 亚洲国产日韩在线一区模特| 在线免费不卡视频| 亚洲一区影音先锋| 欧美在线免费观看亚洲| 亚洲男人的天堂在线观看| 不卡一区中文字幕| 国产精品成人在线观看| 高清av一区二区| 欧美激情一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 精品国产成人在线影院| 韩国av一区二区| 久久久激情视频| 成人av在线网站| 国产精品久久久久久亚洲毛片 | 亚洲一区二区精品视频| 在线看一区二区| 午夜a成v人精品| 欧美一级欧美一级在线播放| 久久精品国产亚洲aⅴ| 日韩免费一区二区三区在线播放| 奇米888四色在线精品| 国产精品三级视频| 99国产精品久久久久久久久久 | 国产三级欧美三级| 丁香一区二区三区| 亚洲另类在线视频| 欧美日韩二区三区| 精品无人区卡一卡二卡三乱码免费卡| 精品国产sm最大网站免费看| 不卡在线视频中文字幕| 午夜欧美视频在线观看 | 毛片av一区二区| 久久久国产精品午夜一区ai换脸| va亚洲va日韩不卡在线观看| 天堂成人国产精品一区| 久久老女人爱爱| 91麻豆国产香蕉久久精品| 日韩精品一二三区| 国产精品素人视频| 欧美日本一道本| 成人精品电影在线观看| 性感美女极品91精品| 国产日产欧美一区二区三区| 在线观看一区二区视频| 精品一区二区三区欧美| 亚洲欧美国产毛片在线| 久久综合视频网| 日本黄色一区二区| 国产二区国产一区在线观看| 亚洲与欧洲av电影| 国产日韩欧美a| 欧美精品v国产精品v日韩精品 | 日本道色综合久久| 国产一区在线看| 亚洲福利一二三区| 日本一区二区视频在线观看| 欧美精品乱码久久久久久 | 国产精品乱码妇女bbbb| 91精品国产欧美日韩| 99精品一区二区| 国产一区二区精品久久99| 亚洲国产aⅴ天堂久久| 国产精品欧美一区二区三区| 日韩一区二区三区四区| 欧美亚洲免费在线一区| 粉嫩13p一区二区三区| 另类小说一区二区三区| 亚洲成a人v欧美综合天堂下载| 欧美国产日韩a欧美在线观看| 欧美一区二区三区在线电影 | 精品国内片67194| 欧美日韩亚洲综合在线| 色婷婷精品大在线视频| 成人免费电影视频| 国产精品538一区二区在线| 久久精品国产澳门| 日韩高清不卡一区| 亚洲成人动漫在线免费观看| 亚洲乱码日产精品bd| 中文字幕字幕中文在线中不卡视频| 久久久久国产精品人| 精品国产乱码久久久久久图片| 欧美一区二区三区免费视频| 欧美视频日韩视频在线观看| 在线观看日韩av先锋影音电影院| 91麻豆文化传媒在线观看| va亚洲va日韩不卡在线观看| 成人久久久精品乱码一区二区三区| 国产精品亚洲人在线观看| 国产在线播放一区二区三区| 国产一区二区毛片| 国产成人精品网址| a4yy欧美一区二区三区| 99re热视频精品| 一本大道久久a久久精品综合| 91毛片在线观看| 欧美系列在线观看| 日韩一区和二区| 2023国产精品自拍| 久久精品人人做| 国产精品丝袜黑色高跟| 亚洲精品视频在线看| 一卡二卡欧美日韩| 日韩高清不卡一区二区| 国内一区二区视频| 99久久综合99久久综合网站| 色综合网色综合| 欧美日本在线播放| 日韩欧美高清一区| 国产精品视频看| 亚洲一级电影视频| 免费在线看成人av| 国产成人在线视频网站| 91麻豆123| 欧美一区二区三区日韩| 国产人成一区二区三区影院| 亚洲天堂福利av| 偷拍日韩校园综合在线| 国产一区二区美女诱惑| 色激情天天射综合网| 日韩一区二区三区免费看| 久久精品亚洲麻豆av一区二区| 国产精品美女久久久久久 | 久久99精品国产.久久久久久| 国产伦精品一区二区三区免费 | 亚洲视频网在线直播| 视频精品一区二区| 丁香婷婷深情五月亚洲| 欧美无乱码久久久免费午夜一区| 精品国产污污免费网站入口| 亚洲免费av观看| 国产一区三区三区| 欧美性大战久久| 国产精品视频第一区| 日本亚洲免费观看| 91污在线观看| 久久久99免费| 日韩精品久久理论片| 91小视频免费看| www欧美成人18+| 热久久国产精品| 在线视频中文字幕一区二区| 久久久精品日韩欧美| 偷拍日韩校园综合在线| 99riav一区二区三区| 国产欧美精品一区aⅴ影院| 日本在线不卡视频| 91国在线观看| 国产精品国产a级| 国产乱人伦精品一区二区在线观看| 在线免费观看日本一区| 国产精品国产三级国产普通话99 | 国产成人亚洲综合a∨婷婷 | 青青草97国产精品免费观看| 粉嫩13p一区二区三区| 精品国产免费人成在线观看| 午夜影院在线观看欧美| 91看片淫黄大片一级| 国产精品人成在线观看免费| 一区二区三区四区在线| 成人h精品动漫一区二区三区| 精品久久人人做人人爽| 日韩激情视频在线观看| 欧美日韩一区小说| 一区二区三区四区乱视频| 91丨porny丨中文| 中文字幕亚洲一区二区av在线| 国产一区二区中文字幕| 精品成人a区在线观看| 麻豆精品视频在线观看| 日韩丝袜美女视频| 毛片av一区二区| 精品国产免费久久| 国内久久精品视频| 国产亚洲成aⅴ人片在线观看|