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

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

?? devctrl.cpp

?? DDK下虛擬串口驅動源代碼.首先安裝DDK2003,然后安裝VC6++,對DDK的相關庫進行編譯
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
            }
            else
            {
                dx->pWaitCtrlIrp = Irp;
                
                status = STATUS_PENDING;
                IoAcquireCancelSpinLock(&Irp->CancelIrql);
                IoSetCancelRoutine(Irp, CancelWaitCtrlIrp);
                IoReleaseCancelSpinLock(Irp->CancelIrql);
                // is IRP to be canceled?
                if (Irp->Cancel)
                {
                    IoAcquireCancelSpinLock(&Irp->CancelIrql);
                    pOldCancelRoutine = IoSetCancelRoutine(Irp, NULL);
                    IoReleaseCancelSpinLock(Irp->CancelIrql);
                    // cancel routine already called?
                    if (pOldCancelRoutine != NULL)
                    {
                        // no, then cancel IRP here
                        status = STATUS_CANCELLED;
                        Irp->IoStatus.Information = 0;
                        dx->pWaitCtrlIrp = NULL;
                        DPrint(DBG_DRVCONTRAL, ("WAIT_ON_MASK: STATUS_CANCELLED\n"));
                        break;
                    }
                    else
                    {
                        // yes, cancel routine will complete IRP
                        IoMarkIrpPending(Irp);
                    }
                }
                else
                {
                    IoMarkIrpPending(Irp);
                }
                Irp->IoStatus.Status = STATUS_PENDING;
                Irp->IoStatus.Information = 0;
                DPrint(DBG_DRVCONTRAL, ("WAIT_ON_MASK STATUS_PENDING\n"));
                status = STATUS_PENDING;
                break;
            }
            break;
        }
    case IOCTL_SERIAL_PURGE:
        {
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(ULONG))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("PURGE: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(ULONG);
			dx->curLenRx = 0;
			dx->curLenTx = 0;
            //DPrint(DBG_DRVCONTRAL, ("PURGE: not handle and success.\n"));
            break;
        }
    case IOCTL_SERIAL_GET_BAUD_RATE:
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(SERIAL_BAUD_RATE))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_BAUD_RATE: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(SERIAL_BAUD_RATE);
            RtlMoveMemory(Irp->AssociatedIrp.SystemBuffer,
                &dx->curBaudRate, sizeof(SERIAL_BAUD_RATE));
            DPrint(DBG_DRVCONTRAL, ("GET_BAUD_RATE: 0x%x.\n", dx->curBaudRate.BaudRate));
            break;
        }
    case IOCTL_SERIAL_GET_LINE_CONTROL:
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(SERIAL_LINE_CONTROL))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_LINE_CONTROL: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(SERIAL_LINE_CONTROL);
            RtlMoveMemory(Irp->AssociatedIrp.SystemBuffer,
                &dx->curLineControl, sizeof(SERIAL_LINE_CONTROL));
            DPrint(DBG_DRVCONTRAL, ("GET_LINE_CONTROL: StopBits=%d, Parity=%d, WordLength=%d\n",
                dx->curLineControl.StopBits, dx->curLineControl.Parity, dx->curLineControl.WordLength));
            break;
        }
    case IOCTL_SERIAL_GET_CHARS:
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(SERIAL_CHARS))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_CHARS: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(SERIAL_CHARS);
            RtlMoveMemory(Irp->AssociatedIrp.SystemBuffer,
                &dx->curChars, sizeof(SERIAL_CHARS));
            DPrint(DBG_DRVCONTRAL, ("GET_CHARS: EofChar=0x%x, ErrorChar=0x%x, BreakChar=0x%x, EventChar=0x%x, XonChar=0x%x, XoffChar=0x%x\n",
                dx->curChars.EofChar, dx->curChars.ErrorChar, dx->curChars.BreakChar, dx->curChars.EventChar, dx->curChars.XonChar, dx->curChars.XoffChar));
            break;
        }
    case IOCTL_SERIAL_SET_CHARS:
        {
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(SERIAL_CHARS))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("SET_CHARS: rtn TOO_SMALL.\n"));
                break;
            }
            RtlMoveMemory(&dx->curChars,
                Irp->AssociatedIrp.SystemBuffer, sizeof(SERIAL_CHARS));
            DPrint(DBG_DRVCONTRAL, ("SET_CHARS: EofChar=0x%x, ErrorChar=0x%x, BreakChar=0x%x, EventChar=0x%x, XonChar=0x%x, XoffChar=0x%x\n",
                dx->curChars.EofChar, dx->curChars.ErrorChar, dx->curChars.BreakChar, dx->curChars.EventChar, dx->curChars.XonChar, dx->curChars.XoffChar));
            break;
        }
    case IOCTL_SERIAL_GET_HANDFLOW:
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(SERIAL_HANDFLOW))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_HANDFLOW: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(SERIAL_HANDFLOW);
            RtlMoveMemory(Irp->AssociatedIrp.SystemBuffer,
                &dx->curHandflow, sizeof(SERIAL_HANDFLOW));
            DPrint(DBG_DRVCONTRAL, ("GET_HANDFLOW: ControlHandShake=0x%x, FlowReplace=0x%x, XonLimit=0x%x, XoffLimit=0x%x.\n",
                dx->curHandflow.ControlHandShake, dx->curHandflow.FlowReplace, dx->curHandflow.XonLimit, dx->curHandflow.XoffLimit));
            break;
        }
    case IOCTL_SERIAL_SET_HANDFLOW:
        {
            if (IrpStack->Parameters.DeviceIoControl.InputBufferLength
                < sizeof(SERIAL_HANDFLOW))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("SET_HANDFLOW: rtn TOO_SMALL.\n"));
                break;
            }
            RtlMoveMemory(&dx->curHandflow,
                Irp->AssociatedIrp.SystemBuffer, sizeof(SERIAL_HANDFLOW));
            DPrint(DBG_DRVCONTRAL, ("SET_HANDFLOW: ControlHandShake=0x%x, FlowReplace=0x%x, XonLimit=0x%x, XoffLimit=0x%x.\n",
                dx->curHandflow.ControlHandShake, dx->curHandflow.FlowReplace, dx->curHandflow.XonLimit, dx->curHandflow.XoffLimit));
            break;
        }
    case IOCTL_SERIAL_GET_MODEMSTATUS: // 3. x4
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(ULONG))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_MODEMSTATUS: rtn TOO_SMALL.\n"));
                break;
            }
            Irp->IoStatus.Information = sizeof(ULONG);
            //*(PULONG)Irp->AssociatedIrp.SystemBuffer = 0;
            DPrint(DBG_DRVCONTRAL, ("GET_MODEMSTATUS: not handle and success.\n"));//for comDebug
            break;
        }
    case IOCTL_SERIAL_GET_COMMSTATUS: // 2.
        {
            if (IrpStack->Parameters.DeviceIoControl.OutputBufferLength
                < sizeof(SERIAL_STATUS))
            {
                status = STATUS_BUFFER_TOO_SMALL;
                DPrint(DBG_DRVCONTRAL, ("GET_COMMSTATUS: rtn TOO_SMALL.\n"));
                break;
            }
            PSERIAL_STATUS pStatus = (PSERIAL_STATUS)Irp->AssociatedIrp.SystemBuffer;
            Irp->IoStatus.Information = sizeof(SERIAL_STATUS);
            //pStatus->Errors  = ;
            //pStatus->HoldReasons  = ;
            pStatus->AmountInInQueue  = dx->curLenRx;
            pStatus->AmountInOutQueue = dx->curLenTx;
            //pStatus->EofReceived = ;
            //pStatus->WaitForImmediate = ;
            DPrint(DBG_DRVCONTRAL, ("GET_COMMSTATUS: not complete and curLenTx=%d, curLenRx=%d.\n",
                dx->curLenTx, dx->curLenRx));
            break;
        }
    case IOCTL_SERIAL_XOFF_COUNTER:
        {
            DPrint(DBG_DRVCONTRAL, ("XOFF_COUNTER: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_GET_PROPERTIES:
        {
            Irp->IoStatus.Information = sizeof(SERIAL_COMMPROP);
            DPrint(DBG_DRVCONTRAL, ("GET_PROPERTIES: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_GET_DTRRTS:
        {
            Irp->IoStatus.Information = sizeof(ULONG);
            DPrint(DBG_DRVCONTRAL, ("GET_DTRRTS: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_LSRMST_INSERT:
        {
            Irp->IoStatus.Information = sizeof(UCHAR);
            DPrint(DBG_DRVCONTRAL, ("LSRMST_INSERT: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_CONFIG_SIZE:
        {
            Irp->IoStatus.Information = sizeof(ULONG);
            DPrint(DBG_DRVCONTRAL, ("CONFIG_SIZE: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_GET_COMMCONFIG: //************************** not help
        {
            DPrint(DBG_DRVCONTRAL, ("GET_COMMCONFIG: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_SET_COMMCONFIG: //************************** not help
        {
            DPrint(DBG_DRVCONTRAL, ("SET_COMMCONFIG: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_GET_STATS:
        {
            Irp->IoStatus.Information = sizeof(SERIALPERF_STATS);
            DPrint(DBG_DRVCONTRAL, ("GET_STATS: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_CLEAR_STATS:
        {
            DPrint(DBG_DRVCONTRAL, ("CLEAR_STATS: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_GET_MODEM_CONTROL:
        {
            Irp->IoStatus.Information = sizeof(ULONG);
            DPrint(DBG_DRVCONTRAL, ("GET_MODEM_CONTROL: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_SET_MODEM_CONTROL:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_MODEM_CONTROL: do nothing and success.\n"));
            break;
        }
    case IOCTL_SERIAL_SET_FIFO_CONTROL:
        {
            DPrint(DBG_DRVCONTRAL, ("SET_FIFO_CONTROL: do nothing and success.\n"));
            break;
        }
    default: // Invalid request
        {
            ULONG controlCode, funcCode;
            controlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode;
            funcCode = (controlCode & (~(FILE_DEVICE_SERIAL_PORT<<16))) >> 2;
            DPrint(DBG_DRVCONTRAL, ("DeviceControl 0x%x %d not handled.\n",
                controlCode, funcCode));
            Irp->IoStatus.Information = 0;
            status = STATUS_SUCCESS;
            break;
        }
    }
    
    if (status == STATUS_PENDING)
        return status;
    
    // Complete IRP
    return Vcp4usbCompleteIrp(Irp, status, Irp->IoStatus.Information);
}

//
NTSTATUS Vcp4usbSystemControl(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
{
    DPrint(DBG_SYSCONTRAL, ("SystemControl\n"));
    PVCP4USB_DEVICE_EXTENSION dx = (PVCP4USB_DEVICE_EXTENSION)fdo->DeviceExtension;
    NTSTATUS status = STATUS_SUCCESS;
    
    // Just pass to lower driver
    IoSkipCurrentIrpStackLocation(Irp);
    
    return IoCallDriver(dx->NextStackDevice, Irp);
}

///////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女人小视频在线观看| 亚洲v日本v欧美v久久精品| 亚洲免费看黄网站| 日韩av不卡一区二区| 成人性生交大片免费看在线播放 | 99精品热视频| 欧美成人女星排行榜| 一区二区三区四区不卡在线| 国产综合久久久久影院| 欧美撒尿777hd撒尿| 国产精品麻豆一区二区| 精品无人码麻豆乱码1区2区| 欧美日韩在线播放一区| 综合婷婷亚洲小说| 成人在线综合网| 欧美不卡123| 午夜视频在线观看一区| 色婷婷久久99综合精品jk白丝| 日本一区二区视频在线| 精品一区二区三区视频在线观看| 欧美日韩亚洲丝袜制服| 一区二区成人在线| 一本在线高清不卡dvd| 中文字幕 久热精品 视频在线 | 成人app软件下载大全免费| 日韩午夜在线观看视频| 天天色综合成人网| 91成人免费在线| 一区二区在线观看免费| av激情综合网| 亚洲欧洲日韩av| 99国产精品一区| 亚洲日本护士毛茸茸| 99精品桃花视频在线观看| 亚洲欧洲三级电影| 色婷婷久久综合| 亚洲一区二区欧美激情| 91国产精品成人| 亚洲国产视频一区二区| 欧美精品九九99久久| 天天综合色天天综合| 日韩你懂的在线播放| 久久99精品国产.久久久久| 精品精品国产高清a毛片牛牛| 久久国产精品一区二区| 久久久久亚洲蜜桃| 成人app网站| 香蕉影视欧美成人| 日韩视频永久免费| 国产69精品久久99不卡| 国产精品福利在线播放| 欧美午夜电影网| 蜜桃av噜噜一区| 欧美经典三级视频一区二区三区| hitomi一区二区三区精品| 亚洲一区二区三区中文字幕 | 亚洲国产裸拍裸体视频在线观看乱了 | 久久综合五月天婷婷伊人| 国产精品自拍三区| 亚洲视频香蕉人妖| 51精品国自产在线| 从欧美一区二区三区| 亚洲美女屁股眼交3| 欧美一区三区四区| 国产成人免费在线观看| 亚洲一区二区av在线| 日韩精品一区在线观看| 92国产精品观看| 三级不卡在线观看| 中文字幕在线观看不卡| 欧美高清视频在线高清观看mv色露露十八 | 91 com成人网| 成人永久看片免费视频天堂| 一区二区三区精品视频| 精品成人免费观看| 欧美在线观看18| 国产99久久久国产精品| 午夜电影网亚洲视频| 国产精品久久久一本精品| 欧美久久一二三四区| aaa亚洲精品一二三区| 国产999精品久久久久久绿帽| 亚洲国产精品综合小说图片区| 久久先锋影音av鲁色资源 | 成人av电影在线网| 久久国产精品第一页| 亚洲精品乱码久久久久久黑人 | 欧美一区二区三区色| 成人动漫在线一区| 国产综合色产在线精品| 日韩国产欧美三级| 亚洲伦理在线精品| 中文字幕精品综合| 精品捆绑美女sm三区| 91精品国产综合久久久久久久久久| 成人av综合在线| 国产不卡免费视频| 精品一区二区成人精品| 奇米综合一区二区三区精品视频| 亚洲色图视频网| 亚洲欧洲日本在线| 欧美激情中文字幕一区二区| 亚洲精品在线观看视频| 91精品久久久久久久99蜜桃| 精品1区2区3区| 一本色道亚洲精品aⅴ| 99国产精品国产精品久久| 国产河南妇女毛片精品久久久| 极品尤物av久久免费看| 秋霞电影网一区二区| 日韩不卡一区二区| 日韩激情一二三区| 日韩精品欧美成人高清一区二区| 亚洲尤物视频在线| 亚洲成a人v欧美综合天堂下载| 一区二区激情视频| 亚洲午夜视频在线| 亚洲成人在线网站| 琪琪一区二区三区| 欧美日韩国产免费一区二区 | 亚洲成精国产精品女| 亚洲一二三四在线| 性做久久久久久久久| 香蕉成人啪国产精品视频综合网| 香蕉久久夜色精品国产使用方法| 天天影视网天天综合色在线播放| 日韩专区一卡二卡| 久久超碰97中文字幕| 寂寞少妇一区二区三区| 国产成人av一区二区三区在线| 国产a久久麻豆| 色综合天天做天天爱| 欧美日韩在线播| 精品乱人伦小说| 中文字幕精品在线不卡| 国产精品久久三| 亚洲一区二区欧美| 国产综合久久久久影院| 国产成人精品在线看| 91成人在线观看喷潮| 欧美一区二区三区喷汁尤物| 久久久三级国产网站| 中文字幕亚洲成人| 丝袜美腿一区二区三区| 激情小说亚洲一区| 成人激情视频网站| 欧美精品在线观看播放| 国产午夜精品福利| 亚洲一区二区视频在线| 久久99精品国产91久久来源| 99久久777色| 在线不卡中文字幕播放| 日本一二三不卡| 天天影视涩香欲综合网| 国产精品2024| 欧美亚洲国产一区在线观看网站| 日韩欧美成人激情| 亚洲精品视频观看| 国产麻豆日韩欧美久久| 91黄视频在线| 亚洲国产精品v| 蜜臀久久久久久久| 色综合夜色一区| 久久久久久免费网| 日韩影视精彩在线| 91看片淫黄大片一级在线观看| 日韩精品一区二区三区中文不卡 | 亚洲女同一区二区| 精品无码三级在线观看视频| 日本韩国欧美在线| 国产欧美日韩卡一| 免费人成网站在线观看欧美高清| 99re热这里只有精品视频| 久久嫩草精品久久久精品一| 亚洲综合色婷婷| 91亚洲精品久久久蜜桃| 久久精品一区蜜桃臀影院| 天天操天天干天天综合网| 91在线小视频| 欧美韩国日本不卡| 韩国成人在线视频| 日韩一区二区免费高清| 午夜欧美在线一二页| 91麻豆自制传媒国产之光| 国产精品美女久久久久久久网站| 久久99精品网久久| 日韩你懂的在线观看| 日本欧美一区二区三区| 欧美日精品一区视频| 一区二区三区日韩欧美精品| 久久久综合精品| 久久精品72免费观看| 欧美精品丝袜中出| 亚洲午夜私人影院| 欧美日韩精品三区| 亚洲不卡在线观看| 在线播放欧美女士性生活| 一区二区免费在线| 欧美日韩精品高清| 亚洲一区二区视频|