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

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

?? devctrl.cpp

?? DDK下虛擬串口驅(qū)動(dòng)源代碼.首先安裝DDK2003,然后安裝VC6++,對(duì)DDK的相關(guān)庫(kù)進(jìn)行編譯
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#include "vcp4usb.h"
#include "ntddser.h"

VOID ReportEvent(IN PVCP4USB_DEVICE_EXTENSION dx, IN ULONG events)
{
    PIRP            pOldWaitIrp = NULL;
    PDRIVER_CANCEL  pOldCancelRoutine;
    
    //KIRQL oldIrql; // Don't use spinLock
    //KeAcquireSpinLock(&dx->spinLock, &oldIrql);
    
    DPrint(DBG_DRVCONTRAL, ("ReportEvent() @ %d\n", KeGetCurrentIrql()));
    
    dx->historyEvents |= events;
    events &= dx->eventMask;
    
    if ((dx->pWaitCtrlIrp != NULL) && (events != 0))
    {
        pOldWaitIrp = dx->pWaitCtrlIrp;
        IoAcquireCancelSpinLock(&pOldWaitIrp->CancelIrql);
        pOldCancelRoutine = IoSetCancelRoutine(pOldWaitIrp, NULL);
        IoReleaseCancelSpinLock(pOldWaitIrp->CancelIrql);
        if (pOldCancelRoutine != NULL)
        {
            pOldWaitIrp->IoStatus.Information = sizeof(ULONG);
            *(PULONG)pOldWaitIrp->AssociatedIrp.SystemBuffer = events;
            
            pOldWaitIrp->IoStatus.Status = STATUS_SUCCESS;
            DPrint(DBG_DRVCONTRAL, ("ReportEvent: complete dx->pWaitCtrlIrp\n"));
            dx->pWaitCtrlIrp = NULL;
            dx->historyEvents = 0;
        }
        else
        {
            pOldWaitIrp = NULL;
        }
    }
    
    if (pOldWaitIrp != NULL)
        IoCompleteRequest(pOldWaitIrp, IO_NO_INCREMENT);
    
    DPrint(DBG_DRVCONTRAL, ("ReportEvent() exit\n"));
    
    //KeReleaseSpinLock(&dx->spinLock, oldIrql);
}

VOID CancelWaitCtrlIrp(IN PDEVICE_OBJECT PDevObj, IN PIRP Irp)
{
    PVCP4USB_DEVICE_EXTENSION dx = (PVCP4USB_DEVICE_EXTENSION)PDevObj->DeviceExtension;
    PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
    
    DPrint(DBG_DRVCONTRAL, ("CancelWaitCtrlIrp() @ %d\n", KeGetCurrentIrql()));
    
    Irp->IoStatus.Status = STATUS_CANCELLED;
    Irp->IoStatus.Information = 0;
    IoSetCancelRoutine(Irp, NULL);
    IoReleaseCancelSpinLock(Irp->CancelIrql);
    IoCompleteRequest(Irp, IO_NO_INCREMENT);
    
    dx->pWaitCtrlIrp = NULL;
    
    DPrint(DBG_DRVCONTRAL, ("CancelWaitCtrlIrp() exit\n"));
}
NTSTATUS Vcp4usbDeviceControl(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
{
    PVCP4USB_DEVICE_EXTENSION dx=(PVCP4USB_DEVICE_EXTENSION)fdo->DeviceExtension;
    PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
    NTSTATUS status;
    
    // default value
    status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;
    
    switch (IrpStack->Parameters.DeviceIoControl.IoControlCode)
    {
    case IOCTL_SERIAL_SET_BAUD_RATE:
        {
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(SERIAL_BAUD_RATE))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("SET_BAUD_RATE: rtn TOO_SMALL.\n"));
                break;
            }
            RtlMoveMemory(&dx->curBaudRate, 
                Irp->AssociatedIrp.SystemBuffer, sizeof(SERIAL_BAUD_RATE));
            DPrint(DBG_DRVCONTRAL, ("SET_BAUD_RATE: 0x%x.\n", dx->curBaudRate.BaudRate));
            break;
        }
    case IOCTL_SERIAL_SET_QUEUE_SIZE:
        {
            PSERIAL_QUEUE_SIZE pNewQueueSize= (PSERIAL_QUEUE_SIZE)Irp->AssociatedIrp.SystemBuffer;
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(SERIAL_QUEUE_SIZE))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("SET_QUEUE_SIZE: rtn TOO_SMALL.\n"));
                break;
            }
            DPrint(DBG_DRVCONTRAL, ("SET_QUEUE_SIZE: not handle and InSize=%d, OutSize=%d.\n",
                pNewQueueSize->InSize, pNewQueueSize->OutSize));
            break;
        }
    case IOCTL_SERIAL_SET_LINE_CONTROL:
        {
            PSERIAL_LINE_CONTROL pNewLineControl = (PSERIAL_LINE_CONTROL)Irp->AssociatedIrp.SystemBuffer;
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(SERIAL_LINE_CONTROL))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("SET_LINE_CONTROL: rtn TOO_SMALL.\n"));
                break;
            }
            RtlMoveMemory(&dx->curLineControl, 
                pNewLineControl, sizeof(SERIAL_LINE_CONTROL));
            DPrint(DBG_DRVCONTRAL, ("SET_LINE_CONTROL: StopBits=%d, Parity=%d, WordLength=%d\n",
                pNewLineControl->StopBits, pNewLineControl->Parity, pNewLineControl->WordLength));
            break;
        }
    case IOCTL_SERIAL_SET_BREAK_ON:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_BREAK_ON: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_SET_BREAK_OFF:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_BREAK_OFF: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_IMMEDIATE_CHAR:
        {
            UCHAR ch = (UCHAR)Irp->AssociatedIrp.SystemBuffer;
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(UCHAR))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("IMMEDIATE_CHAR: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(UCHAR);
            DPrint(DBG_DRVCONTRAL, ("IMMEDIATE_CHAR: not handle and UCHAR(0x%x).\n", ch));
            break;
        }
    case IOCTL_SERIAL_SET_TIMEOUTS:
        {
            PSERIAL_TIMEOUTS pNewTimeouts = (PSERIAL_TIMEOUTS)Irp->AssociatedIrp.SystemBuffer;
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(SERIAL_TIMEOUTS))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("SET_TIMEOUTS: rtn TOO_SMALL.\n"));
                break;
            }
            RtlMoveMemory(&dx->curTimeouts, pNewTimeouts, sizeof(SERIAL_TIMEOUTS));
            DPrint(DBG_DRVCONTRAL, ("SET_TIMEOUTS: RdIv=%d, RdTM=%d, RdTC=%d, WTTM=%d, WTTC=%d.\n",
                pNewTimeouts->ReadIntervalTimeout,
                pNewTimeouts->ReadTotalTimeoutMultiplier,
                pNewTimeouts->ReadTotalTimeoutConstant,
                pNewTimeouts->WriteTotalTimeoutMultiplier,
                pNewTimeouts->WriteTotalTimeoutConstant));
            break;
        }
    case IOCTL_SERIAL_GET_TIMEOUTS:
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(SERIAL_TIMEOUTS))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_TIMEOUTS: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(SERIAL_TIMEOUTS);
            RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &dx->curTimeouts, sizeof(SERIAL_TIMEOUTS));
            DPrint(DBG_DRVCONTRAL, ("GET_TIMEOUTS: RdIv=%d, RdTM=%d, RdTC=%d, WTTM=%d, WTTC=%d.\n",
                dx->curTimeouts.ReadIntervalTimeout,
                dx->curTimeouts.ReadTotalTimeoutMultiplier,
                dx->curTimeouts.ReadTotalTimeoutConstant,
                dx->curTimeouts.WriteTotalTimeoutMultiplier,
                dx->curTimeouts.WriteTotalTimeoutConstant));
            break;
        }
    case IOCTL_SERIAL_SET_DTR:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_DTR: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_CLR_DTR:
        {
            DPrint(DBG_DRVCONTRAL, ("CLR_DTR: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_RESET_DEVICE:
        {
            DPrint(DBG_DRVCONTRAL, ("RESET_DEVICE: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_SET_RTS:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_RTS: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_CLR_RTS:
        {
            DPrint(DBG_DRVCONTRAL, ("CLR_RTS: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_SET_XOFF:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_XOFF: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_SET_XON:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_XON: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_GET_WAIT_MASK:
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(ULONG))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_WAIT_MASK: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(ULONG);
            *(PULONG)Irp->AssociatedIrp.SystemBuffer = dx->eventMask;
            DPrint(DBG_DRVCONTRAL, ("GET_WAIT_MASK: eventMask=0x%x\n", dx->eventMask));
            break;
        }
    case IOCTL_SERIAL_SET_WAIT_MASK:
        {
            ULONG newMask;
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(ULONG))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("SET_WAIT_MASK: rtn TOO_SMALL.\n"));
                break;
            }
            newMask = *(PULONG)Irp->AssociatedIrp.SystemBuffer;
            dx->eventMask = newMask;
            DPrint(DBG_DRVCONTRAL, ("SET_WAIT_MASK: newMask=0x%x\n", newMask));
			if (dx->pWaitCtrlIrp != NULL)
			{
				PIRP pOldWaitIrp = dx->pWaitCtrlIrp;
				IoAcquireCancelSpinLock(&pOldWaitIrp->CancelIrql);
				IoSetCancelRoutine(pOldWaitIrp, NULL);
				IoReleaseCancelSpinLock(pOldWaitIrp->CancelIrql);
				pOldWaitIrp->IoStatus.Information = sizeof(ULONG);
				*(PULONG)pOldWaitIrp->AssociatedIrp.SystemBuffer = 0;
				pOldWaitIrp->IoStatus.Status = STATUS_SUCCESS;
				IoCompleteRequest(pOldWaitIrp, IO_NO_INCREMENT);

				DPrint(DBG_DRVCONTRAL, ("SET_WAIT_MASK: complete dx->pWaitCtrlIrp\n"));
				dx->pWaitCtrlIrp = NULL;
			}
            break;
        }
    case IOCTL_SERIAL_WAIT_ON_MASK: // 1.
        {
            PDRIVER_CANCEL  pOldCancelRoutine;
            
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(ULONG))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("WAIT_ON_MASK: rtn TOO_SMALL.\n"));
                break;
            }
            
            if ((dx->pWaitCtrlIrp != NULL) || (dx->eventMask == 0))
            {
                Irp->IoStatus.Information = 0;
                status = STATUS_INVALID_PARAMETER;
                DPrint(DBG_DRVCONTRAL, ("WAIT_ON_MASK: STATUS_INVALID_PARAMETER\n"));
                break;
            }
            if ((dx->eventMask & dx->historyEvents) != 0)
            {
                // report any saved events
                Irp->IoStatus.Information = sizeof(ULONG);
                *(PULONG)Irp->AssociatedIrp.SystemBuffer = dx->eventMask & dx->historyEvents;
                DPrint(DBG_DRVCONTRAL, ("WAIT_ON_MASK: STATUS_SUCCESS mask=0x%x\n",
                    dx->eventMask & dx->historyEvents));
                dx->historyEvents = 0;
                status = STATUS_SUCCESS;
                break;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品123| 91丨porny丨最新| 麻豆久久久久久| 日韩中文字幕91| 日韩精品高清不卡| 天堂成人国产精品一区| 日韩国产精品久久久| 日韩av在线发布| 麻豆91精品91久久久的内涵| 男女性色大片免费观看一区二区 | 日韩伦理电影网| 综合激情成人伊人| 亚洲黄色录像片| 亚洲成人先锋电影| 日韩av午夜在线观看| 看片网站欧美日韩| 国产精品综合久久| 95精品视频在线| 欧美日韩小视频| 欧美一级片在线观看| 精品久久久久久久久久久久久久久久久 | 从欧美一区二区三区| 成人久久久精品乱码一区二区三区| 成人免费av资源| 色偷偷久久人人79超碰人人澡| 欧美性大战xxxxx久久久| 在线成人小视频| 久久夜色精品国产欧美乱极品| 久久久久9999亚洲精品| 自拍偷拍国产亚洲| 日韩和欧美一区二区| 国产一区999| www.av亚洲| 欧美高清视频在线高清观看mv色露露十八| 91精品国产综合久久香蕉的特点| xfplay精品久久| 亚洲色大成网站www久久九九| 亚洲超碰97人人做人人爱| 精品一区二区成人精品| proumb性欧美在线观看| 欧美日韩不卡在线| 久久久久久免费网| 亚洲一线二线三线久久久| 毛片不卡一区二区| 96av麻豆蜜桃一区二区| 日韩久久精品一区| 中文字幕人成不卡一区| 免费精品视频在线| www.欧美.com| 日韩欧美国产一区二区三区 | 久久久久久久综合| 一区二区三区欧美亚洲| 久久精品久久99精品久久| 99国产欧美另类久久久精品| 欧美一级搡bbbb搡bbbb| 亚洲日本成人在线观看| 麻豆一区二区三| 日本道在线观看一区二区| 亚洲精品一区二区三区精华液 | 国产精品888| 欧美视频在线观看一区二区| 国产午夜精品一区二区三区嫩草| 亚洲高清免费视频| 成人黄动漫网站免费app| 在线播放视频一区| 亚洲女子a中天字幕| 国产精品亚洲第一| 91.麻豆视频| 亚洲综合一区二区| 欧美成人在线直播| 亚洲伦理在线精品| 国产91丝袜在线18| 精品国精品自拍自在线| 无码av免费一区二区三区试看 | 91精品国产综合久久久蜜臀图片 | 中文字幕一区二区三区在线不卡 | 日韩不卡在线观看日韩不卡视频| 不卡电影免费在线播放一区| 精品国产区一区| 日韩精品免费视频人成| 日本道免费精品一区二区三区| 国产色产综合产在线视频| 日本亚洲最大的色成网站www| 91在线云播放| 国产精品女主播av| 国产激情一区二区三区桃花岛亚洲| 欧美二区三区的天堂| 亚洲第一福利视频在线| 一道本成人在线| 亚洲手机成人高清视频| 波多野结衣亚洲| 中文文精品字幕一区二区| 国产精品一区二区三区四区| 日韩视频不卡中文| 免费成人在线播放| 日韩一区和二区| 琪琪久久久久日韩精品| 在线播放欧美女士性生活| 五月天久久比比资源色| 欧美日本国产视频| 舔着乳尖日韩一区| 欧美狂野另类xxxxoooo| 日韩专区中文字幕一区二区| 欧美区在线观看| 三级不卡在线观看| 91精品国产综合久久精品性色 | 国产精品亚洲一区二区三区妖精| 欧美成人激情免费网| 狂野欧美性猛交blacked| 日韩免费一区二区| 狠狠久久亚洲欧美| 久久久久久久久伊人| 国产福利精品导航| 国产精品人人做人人爽人人添| 欧美xxxx老人做受| 国内精品第一页| 久久精品人人爽人人爽| 不卡视频在线看| 亚洲精品成人a在线观看| 欧美少妇xxx| 麻豆国产欧美日韩综合精品二区| 欧美刺激脚交jootjob| 国产乱人伦精品一区二区在线观看 | 欧美性高清videossexo| 婷婷六月综合网| 精品伦理精品一区| 成人免费黄色大片| 亚洲动漫第一页| 日韩三级视频在线看| 国产米奇在线777精品观看| 国产精品网站导航| 91福利国产精品| 老司机午夜精品| 国产精品视频第一区| 欧美熟乱第一页| 九一九一国产精品| 18欧美乱大交hd1984| 欧美日韩一二三区| 国产中文一区二区三区| 亚洲免费高清视频在线| 宅男在线国产精品| 国产精品影视在线观看| 亚洲精品乱码久久久久久日本蜜臀| 欧美精品色一区二区三区| 国产麻豆成人传媒免费观看| 国产精品初高中害羞小美女文 | 亚洲免费观看高清在线观看| 欧美日韩免费观看一区三区| 久久er99精品| 亚洲欧美另类小说视频| 日韩精品一区国产麻豆| 不卡的电视剧免费网站有什么| aaa国产一区| 蜜桃视频在线观看一区| 亚洲免费电影在线| 精品国产电影一区二区| 色哟哟欧美精品| 激情欧美日韩一区二区| 夜色激情一区二区| 久久久777精品电影网影网| 欧美怡红院视频| 国产a久久麻豆| 青娱乐精品视频在线| 亚洲三级电影全部在线观看高清| 欧美一区二区三区免费大片 | 成人动漫一区二区三区| 三级在线观看一区二区| 国产精品成人免费精品自在线观看| 欧美丰满一区二区免费视频| 不卡一区二区中文字幕| 久久精品99国产精品| 一区二区三区精品视频在线| 久久九九全国免费| 欧美一级爆毛片| 欧美日精品一区视频| av一区二区三区四区| 看片的网站亚洲| 亚洲大尺度视频在线观看| 中文字幕av免费专区久久| 日韩欧美美女一区二区三区| 一本一道久久a久久精品| 丰满亚洲少妇av| 国产一区在线观看视频| 日本视频免费一区| 亚洲精品菠萝久久久久久久| 亚洲国产成人私人影院tom| 日韩欧美国产一区二区在线播放 | 久久精品男人天堂av| 欧美一区二区在线观看| 欧美色图天堂网| 91在线播放网址| 不卡视频一二三四| 国产sm精品调教视频网站| 国内精品免费**视频| 美女被吸乳得到大胸91| 秋霞电影一区二区| 丝袜美腿亚洲一区二区图片| 亚洲成人久久影院| 亚洲成a人在线观看| 亚洲高清在线视频|