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

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

?? ocrw.c

?? C51 USB1.1開發源碼及相關開發工具和文檔
?? C
?? 第 1 頁 / 共 2 頁
字號:
--*/
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PD12_PIPE pipeHandle = NULL;
    PFILE_OBJECT fileObject;
    PIO_STACK_LOCATION irpStack, nextStack;
    PDEVICE_EXTENSION deviceExtension;
    PURB urb;
    PD12_RW_CONTEXT context = NULL;

    D12_KdPrint (("D12TEST.SYS: enter D12_Read\n"));

    D12_IncrementIoCount(DeviceObject);

    deviceExtension = DeviceObject->DeviceExtension;

    if (deviceExtension->AcceptingRequests == FALSE) {
        ntStatus = STATUS_DELETE_PENDING;
        Irp->IoStatus.Status = ntStatus;
        Irp->IoStatus.Information = 0;

        IoCompleteRequest (Irp,
                           IO_NO_INCREMENT
                          );

        D12_DecrementIoCount(DeviceObject);                          
        return ntStatus;
    }
    
    irpStack = IoGetCurrentIrpStackLocation (Irp);
    fileObject = irpStack->FileObject;

    pipeHandle =  fileObject->FsContext;

    if (!pipeHandle) {
       ntStatus = STATUS_INVALID_HANDLE;
       goto D12_Read_Reject;
    }

    //
    // submit the write request to USB
    //

    switch (pipeHandle->PipeInfo->PipeType) {
    case UsbdPipeTypeIsochronous:
        D12_ResetPipe(DeviceObject, pipeHandle, FALSE);
        
        urb = D12_BuildIsoRequest(DeviceObject,
                                     Irp,
                                     pipeHandle,
                                     TRUE);
        if (urb) {

            nextStack = IoGetNextIrpStackLocation(Irp);
            ASSERT(nextStack != NULL);
            ASSERT(DeviceObject->StackSize>1);

            nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
            nextStack->Parameters.Others.Argument1 = urb;
            nextStack->Parameters.DeviceIoControl.IoControlCode =
                IOCTL_INTERNAL_USB_SUBMIT_URB;

            IoSetCompletionRoutine(Irp,
                                   D12_IsoReadWrite_Complete,
                                   urb,
                                   TRUE,
                                   TRUE,
                                   TRUE);

            D12_KdPrint (("D12TEST.SYS: IRP = 0x%x current = 0x%x next = 0x%x\n",
                Irp, irpStack, nextStack));

            ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                    Irp);
            goto D12_Read_Done;
        } else {
            ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        }
        break;
    case UsbdPipeTypeInterrupt:
    case UsbdPipeTypeBulk:
        urb = D12_BuildAsyncRequest(DeviceObject,
                                       Irp,
                                       pipeHandle,
                                       TRUE);
        if (urb) {
            context = ExAllocatePool(NonPagedPool, sizeof(D12_RW_CONTEXT));
        }
        
        if (urb && context) {
            context->Urb = urb;
            context->DeviceObject = DeviceObject;
            
            nextStack = IoGetNextIrpStackLocation(Irp);
            ASSERT(nextStack != NULL);
            ASSERT(DeviceObject->StackSize>1);

            nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
            nextStack->Parameters.Others.Argument1 = urb;
            nextStack->Parameters.DeviceIoControl.IoControlCode =
                IOCTL_INTERNAL_USB_SUBMIT_URB;

            IoSetCompletionRoutine(Irp,
                                   D12_AsyncReadWrite_Complete,
                                   context,
                                   TRUE,
                                   TRUE,
                                   TRUE);

            D12_KdPrint (("D12TEST.SYS: IRP = 0x%x current = 0x%x next = 0x%x\n",
                Irp, irpStack, nextStack));

			D12_AddPendingIrp(DeviceObject, Irp);
            ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                    Irp);
            goto D12_Read_Done;
        } else {
            ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        }

        break;
    default:
        ntStatus = STATUS_INVALID_PARAMETER;
        TRAP();
    }

D12_Read_Reject:

    Irp->IoStatus.Status = ntStatus;
    Irp->IoStatus.Information = 0;

    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );

D12_Read_Done:

    return ntStatus;
}


NTSTATUS
D12_Write(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

Arguments:

    DeviceObject - pointer to the device object for this instance of the 82930
                    device.


Return Value:

    NT status code

--*/
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PD12_PIPE pipeHandle = NULL;
    PFILE_OBJECT fileObject;
    PIO_STACK_LOCATION irpStack, nextStack;
    PDEVICE_EXTENSION deviceExtension;
    PURB urb;
    PD12_RW_CONTEXT context = NULL;

    D12_KdPrint (("D12TEST.SYS: enter D12_Write\n"));

    D12_IncrementIoCount(DeviceObject);

    deviceExtension = DeviceObject->DeviceExtension;

    if (deviceExtension->AcceptingRequests == FALSE) {
        ntStatus = STATUS_DELETE_PENDING;
        Irp->IoStatus.Status = ntStatus;
        Irp->IoStatus.Information = 0;

        D12_DecrementIoCount(DeviceObject);

        IoCompleteRequest (Irp,
                           IO_NO_INCREMENT
                          );
        return ntStatus;
    }
    
    irpStack = IoGetCurrentIrpStackLocation (Irp);
    fileObject = irpStack->FileObject;

//    MmProbeAndLockPages(Irp->MdlAddress,
//                        KernelMode,
//                        IoReadAccess);

    pipeHandle =  fileObject->FsContext;
    if (!pipeHandle)
    {
       ntStatus = STATUS_INVALID_HANDLE;
       goto D12_Write_Reject;
    }

    //
    // submit the write request to USB
    //

    switch (pipeHandle->PipeInfo->PipeType) {
    case UsbdPipeTypeIsochronous:
        D12_ResetPipe(DeviceObject, pipeHandle, FALSE);
        
        urb = D12_BuildIsoRequest(DeviceObject,
                                     Irp,
                                     pipeHandle,
                                     FALSE);
        if (urb) {

            nextStack = IoGetNextIrpStackLocation(Irp);
            ASSERT(nextStack != NULL);
            ASSERT(DeviceObject->StackSize>1);

            nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
            nextStack->Parameters.Others.Argument1 = urb;
            nextStack->Parameters.DeviceIoControl.IoControlCode =
                IOCTL_INTERNAL_USB_SUBMIT_URB;

            IoSetCompletionRoutine(Irp,
                                   D12_IsoReadWrite_Complete,
                                   urb,
                                   TRUE,
                                   TRUE,
                                   TRUE);

            D12_KdPrint (("D12TEST.SYS: IRP = 0x%x current = 0x%x next = 0x%x\n",
                Irp, irpStack, nextStack));

            ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                    Irp);
            goto D12_Write_Done;
        } else {
            ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        }
        break;
    case UsbdPipeTypeInterrupt:
    case UsbdPipeTypeBulk:
        urb = D12_BuildAsyncRequest(DeviceObject,
                                       Irp,
                                       pipeHandle,
                                       FALSE);

        if (urb) {
            context = ExAllocatePool(NonPagedPool, sizeof(D12_RW_CONTEXT));
        }
        
        if (urb && context) {
            context->Urb = urb;
            context->DeviceObject = DeviceObject;                                       
            
            nextStack = IoGetNextIrpStackLocation(Irp);
            ASSERT(nextStack != NULL);
            ASSERT(DeviceObject->StackSize>1);

            nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
            nextStack->Parameters.Others.Argument1 = urb;
            nextStack->Parameters.DeviceIoControl.IoControlCode =
                IOCTL_INTERNAL_USB_SUBMIT_URB;

            IoSetCompletionRoutine(Irp,
                                   D12_AsyncReadWrite_Complete,
                                   context,
                                   TRUE,
                                   TRUE,
                                   TRUE);

            D12_KdPrint (("D12TEST.SYS: IRP = 0x%x current = 0x%x next = 0x%x\n",
                Irp, irpStack, nextStack));

			D12_AddPendingIrp(DeviceObject, Irp);
            ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                    Irp);
            goto D12_Write_Done;
        } else {
            ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        }

        break;
    default:
        ntStatus = STATUS_INVALID_PARAMETER;
        TRAP();
    }

D12_Write_Reject:

    Irp->IoStatus.Status = ntStatus;
    Irp->IoStatus.Information = 0;

    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );

D12_Write_Done:

    return ntStatus;
}


NTSTATUS
D12_Close(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

Arguments:

    DeviceObject - pointer to the device object for this instance of the 82930
                    devcice.


Return Value:

    NT status code

--*/
{
    NTSTATUS ntStatus;
    PFILE_OBJECT fileObject;
    PIO_STACK_LOCATION irpStack;
    PDEVICE_EXTENSION deviceExtension;
    PD12_PIPE pipeHandle = NULL;

    D12_KdPrint (("D12TEST.SYS: entering D12_Close\n"));

    D12_IncrementIoCount(DeviceObject);

    deviceExtension = DeviceObject->DeviceExtension;
    irpStack = IoGetCurrentIrpStackLocation (Irp);
    fileObject = irpStack->FileObject;

    if (fileObject->FsContext) {
        // closing pipe handle
        pipeHandle =  fileObject->FsContext;
        D12_KdPrint (("D12TEST.SYS: closing pipe %x\n", pipeHandle));

        pipeHandle->Opened = FALSE;
    }

    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;


    ntStatus = Irp->IoStatus.Status;

    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );
                       
    D12_DecrementIoCount(DeviceObject);

    D12_KdPrint (("D12TEST.SYS: exit D12_Close\n"));
    return ntStatus;
}


NTSTATUS
D12_Create(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

    //
    // Entry point for CreateFile calls
    // user mode apps may open "\\.\D12-x\yy"
    // where yy is the internal pipe id
    //

Arguments:

    DeviceObject - pointer to the device object for this instance of the 82930
                    devcice.


Return Value:

    NT status code

--*/
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PD12_PIPE pipeHandle = NULL;
    PFILE_OBJECT fileObject;
    PIO_STACK_LOCATION irpStack;
    PDEVICE_EXTENSION deviceExtension;
    ULONG i;

    D12_KdPrint (("D12TEST.SYS: entering D12_Create\n"));

    D12_IncrementIoCount(DeviceObject);

    deviceExtension = DeviceObject->DeviceExtension;

    if (deviceExtension->AcceptingRequests == FALSE) {
        ntStatus = STATUS_DELETE_PENDING;
        Irp->IoStatus.Status = ntStatus;
        Irp->IoStatus.Information = 0;

        IoCompleteRequest (Irp,
                           IO_NO_INCREMENT
                          );

        D12_DecrementIoCount(DeviceObject);                          
        
        return ntStatus;
    }
    
    irpStack = IoGetCurrentIrpStackLocation (Irp);
    fileObject = irpStack->FileObject;

    // fscontext is null for device
    fileObject->FsContext = NULL;

    if (fileObject->FileName.Length != 0) {

        ntStatus = STATUS_INSUFFICIENT_RESOURCES;

        //
        // a name was specified, convert it to a pipe id
        //

        for (i=0; i<D12_MAX_PIPES; i++) {
            if (RtlCompareMemory (fileObject->FileName.Buffer,
                                  deviceExtension->PipeList[i].Name,
                                  fileObject->FileName.Length)
                    == fileObject->FileName.Length &&
                !deviceExtension->PipeList[i].Opened) {
                //
                // found a match
                //
                pipeHandle = &deviceExtension->PipeList[i];
                //D12_ResetPipe(DeviceObject, pipeHandle);
                break;
            }
        }
    }

	// if we are opening a pipe set stuff up and set FsContext
    if (pipeHandle) {
        D12_KdPrint (("D12TEST.SYS: open pipe %x\n", pipeHandle));
        fileObject->FsContext = pipeHandle;
        pipeHandle->Opened = TRUE;
		pipeHandle->bPerfTimerEnabled = FALSE;
        ntStatus = STATUS_SUCCESS;
    }

    Irp->IoStatus.Status = ntStatus;
    Irp->IoStatus.Information = 0;

    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );

    D12_DecrementIoCount(DeviceObject);                               

    D12_KdPrint (("D12TEST.SYS: exit D12_Create %x\n", ntStatus));

    return ntStatus;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区日韩精品中文字幕| 国产欧美日韩在线| 日本黄色一区二区| 国产91在线观看| 国产成人av一区| 国产激情一区二区三区桃花岛亚洲| 美女一区二区三区在线观看| 蜜臀91精品一区二区三区| 日韩高清国产一区在线| 日韩va欧美va亚洲va久久| 日韩—二三区免费观看av| 青椒成人免费视频| 蓝色福利精品导航| 国内精品久久久久影院薰衣草| 美女一区二区三区在线观看| 国产在线不卡视频| 成人精品小蝌蚪| 一本色道久久综合亚洲精品按摩| 91激情在线视频| 欧美丰满一区二区免费视频 | 成人精品国产福利| 成人av在线播放网站| 色婷婷av久久久久久久| 欧美精品1区2区| 久久久国产一区二区三区四区小说| 国产欧美一区在线| 亚洲黄色小视频| 日日夜夜精品视频天天综合网| 久久99这里只有精品| 波多野结衣在线一区| 欧美视频精品在线| 精品国产3级a| 亚洲精品欧美二区三区中文字幕| 免费看黄色91| 9色porny自拍视频一区二区| 欧美日韩国产一区| 欧美精彩视频一区二区三区| 亚洲综合区在线| 国产精品12区| 777色狠狠一区二区三区| 国产欧美一区视频| 天天色 色综合| 91免费在线视频观看| 日韩一区二区三| 一区二区三区鲁丝不卡| 国产一区二区不卡| 51精品久久久久久久蜜臀| 国产精品福利av| 国产中文字幕精品| 欧美日韩成人综合天天影院 | 亚洲精品在线观看视频| 亚洲精品国产精华液| 国产精品一区二区三区乱码| 欧美另类变人与禽xxxxx| 国产精品免费观看视频| 精品一区二区免费| 欧美日韩视频不卡| 亚洲视频一区在线观看| 国产精品1区2区3区在线观看| 欧美日韩精品是欧美日韩精品| 亚洲欧洲另类国产综合| 国产白丝网站精品污在线入口| 日韩午夜激情免费电影| 日韩精品电影在线| 欧美性欧美巨大黑白大战| 国产精品福利一区二区| 国产91丝袜在线18| 精品国产伦理网| 久久99国产精品久久99| 欧美一区二区视频在线观看2022| 亚洲一区二区三区爽爽爽爽爽| 99久精品国产| 国产精品日日摸夜夜摸av| 国产麻豆91精品| 久久这里只有精品首页| 国产一区 二区| 国产日韩欧美综合一区| 成人激情免费视频| 中文字幕中文字幕中文字幕亚洲无线| 国产suv精品一区二区三区| 久久久亚洲欧洲日产国码αv| 国内成人自拍视频| 久久影院午夜论| 国产成人av一区二区三区在线| 中文字幕不卡三区| 成人av免费观看| 亚洲欧美日韩国产一区二区三区| 色婷婷久久久综合中文字幕| 亚洲永久精品国产| 欧美精品成人一区二区三区四区| 久久精品72免费观看| 久久亚洲一区二区三区四区| 成人免费av网站| 亚洲一区二区三区美女| 日韩一级在线观看| 国产剧情一区二区三区| 最近中文字幕一区二区三区| 欧美性欧美巨大黑白大战| 久久99精品久久久| 国产精品亲子乱子伦xxxx裸| 在线视频欧美精品| 男女视频一区二区| 国产精品久久久久久户外露出| 欧美亚洲一区二区在线观看| 男人的天堂久久精品| 中文字幕中文字幕一区二区 | 精品一区二区国语对白| 成人欧美一区二区三区| 欧美丰满高潮xxxx喷水动漫 | 国产精品超碰97尤物18| 欧美日韩精品高清| 国产精品一区在线观看你懂的| 亚洲视频一区二区免费在线观看| 欧美日韩一区二区电影| 国产精品亚洲午夜一区二区三区| 亚洲丝袜自拍清纯另类| 日韩欧美国产成人一区二区| 成人高清免费在线播放| 免费欧美在线视频| 亚洲男女毛片无遮挡| 欧美白人最猛性xxxxx69交| 9久草视频在线视频精品| 石原莉奈在线亚洲二区| 亚洲私人黄色宅男| 久久你懂得1024| 欧美精品久久久久久久多人混战| 成人一级片在线观看| 蜜芽一区二区三区| 亚洲欧美一区二区三区孕妇| www精品美女久久久tv| 欧美高清一级片在线| 91在线国产福利| 国产.精品.日韩.另类.中文.在线.播放| 性做久久久久久免费观看| 亚洲欧洲精品成人久久奇米网| 日韩欧美国产一区二区在线播放| 欧美性受xxxx| 色94色欧美sute亚洲线路一久| 高清shemale亚洲人妖| 精品一区二区在线免费观看| 天天做天天摸天天爽国产一区| 有码一区二区三区| 最新日韩在线视频| 国产精品视频看| 国产精品免费免费| 国产精品视频观看| 亚洲欧美在线aaa| 日韩美女视频19| 亚洲视频你懂的| 亚洲激情图片小说视频| 一区二区三区中文字幕电影| 亚洲精品久久久蜜桃| 尤物在线观看一区| 亚洲线精品一区二区三区 | 欧美日韩激情一区二区| 欧美日韩一区二区三区在线| 欧美视频一区二区三区| 欧美色视频在线观看| 欧美日韩一二三| 欧美日韩免费视频| 制服丝袜成人动漫| 精品少妇一区二区三区| 久久久国产一区二区三区四区小说 | 一本色道久久综合亚洲91| 日本福利一区二区| 欧美美女网站色| 日韩视频一区在线观看| 日韩女优视频免费观看| 国产午夜精品理论片a级大结局| 亚洲国产精品v| 一区二区三区加勒比av| 日韩不卡免费视频| 国产成人免费9x9x人网站视频| jlzzjlzz亚洲女人18| 欧美亚一区二区| 亚洲精品在线观看视频| 国产精品美女久久福利网站| 亚洲一区在线电影| 精品综合免费视频观看| jiyouzz国产精品久久| 精品视频全国免费看| 欧美成人vps| 亚洲素人一区二区| 久久精品国产**网站演员| 99久久精品情趣| 日韩一区二区三区观看| 国产精品女上位| 男男gaygay亚洲| 91亚洲永久精品| 欧美岛国在线观看| 亚洲免费观看高清完整版在线观看熊| 天天综合天天综合色| 99麻豆久久久国产精品免费| 91精品国产入口| 亚洲免费在线播放| 国产精品一级二级三级| 91精品国产91综合久久蜜臀| 亚洲欧洲三级电影| 国产伦精一区二区三区| 欧美高清hd18日本|