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

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

?? d12.c

?? 自己買(mǎi)的arms3c44b0開(kāi)發(fā)板附帶的demo程序
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
                // Yes,
                // just pass it on
                IoCopyCurrentIrpStackLocationToNext(Irp);
                PoStartNextPowerIrp(Irp);
                ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                        Irp);

                D12_DecrementIoCount(DeviceObject);                                        

            }

            } 
            break;

        case DevicePowerState:

            ntStatus = D12_SetDevicePowerState(DeviceObject,
                                                  irpStack->Parameters.Power.State.DeviceState,
                                                  &hookIt);

            IoCopyCurrentIrpStackLocationToNext(Irp);
            
            if (hookIt) {
                D12_KdPrint(("D12TEST.SYS:  Set PowerIrp Completion Routine\n"));
                IoSetCompletionRoutine(Irp,
                       D12_PowerIrp_Complete,
                       // always pass FDO to completion routine
                       DeviceObject,
                       hookIt,
                       hookIt,
                       hookIt);
            }

            PoStartNextPowerIrp(Irp);
            ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                    Irp);

            D12_DecrementIoCount(DeviceObject);
            
            break;
        } /* case irpStack->Parameters.Power.Type */

        } 
        break; /* IRP_MN_SET_POWER */

    case IRP_MN_QUERY_POWER:
    
        D12_KdPrint(("D12TEST.SYS:  IRP_MN_QUERY_POWER\n"));  

        IoCopyCurrentIrpStackLocationToNext(Irp);
        PoStartNextPowerIrp(Irp);
        ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                Irp);


        D12_DecrementIoCount(DeviceObject);

        break; /* IRP_MN_QUERY_POWER */            
    
    default:
    
        D12_KdPrint(("D12TEST.SYS:  UNKNOWN POWER MESSAGE (%x)\n", irpStack->MinorFunction));

        //
        // All unahndled PnP messages are passed on to the PDO
        //

        IoCopyCurrentIrpStackLocationToNext(Irp);

        //
        // All PNP_POWER POWER messages get passed to
        // TopOfStackDeviceObject and some are handled in the completion routine
        //

        // pass on to our PDO
        PoStartNextPowerIrp(Irp);
        ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                Irp);

        D12_DecrementIoCount(DeviceObject);                                

    } /* irpStack->MinorFunction */

    return ntStatus;
}


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

Routine Description:

    Process the IRPs sent to this device.

Arguments:

    DeviceObject - pointer to a device object

    Irp          - pointer to an I/O Request Packet

Return Value:


--*/
{

    PIO_STACK_LOCATION irpStack;
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PDEVICE_OBJECT stackDeviceObject;

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

    //
    // Get a pointer to the current location in the Irp. This is where
    //     the function codes and parameters are located.
    //

    irpStack = IoGetCurrentIrpStackLocation (Irp);

    //
    // Get a pointer to the device extension
    //

    deviceExtension = DeviceObject->DeviceExtension;
    stackDeviceObject = deviceExtension->TopOfStackDeviceObject;

    D12_IncrementIoCount(DeviceObject);

    switch (irpStack->MajorFunction) {
    case IRP_MJ_SYSTEM_CONTROL: 
    
        D12_KdPrint (("D12TEST.SYS: IRP_MJ_SYSTEM_CONTROL\n"));
        IoCopyCurrentIrpStackLocationToNext(Irp);

        D12_KdPrint (("D12TEST.SYS: Passing SysCtrl Irp down\n"));

        D12_DecrementIoCount(DeviceObject);
        
        ntStatus = IoCallDriver(stackDeviceObject,
                                Irp);
        goto D12_Dispatch_Done;                                
        break;        

    case IRP_MJ_PNP:

        D12_KdPrint (("D12TEST.SYS: IRP_MJ_PNP\n"));

        switch (irpStack->MinorFunction) {
        case IRP_MN_START_DEVICE:

            {
            KEVENT event;
            D12_KdPrint (("D12TEST.SYS: IRP_MN_START_DEVICE\n"));
            
            KeInitializeEvent(&event, NotificationEvent, FALSE);

            IoCopyCurrentIrpStackLocationToNext(Irp);  
            IoSetCompletionRoutine(Irp,
                                   D12_DeferIrpCompletion,
                                   &event,
                                   TRUE,
                                   TRUE,
                                   TRUE);


            ntStatus = IoCallDriver(stackDeviceObject,
                                    Irp);
                
            if (ntStatus == STATUS_PENDING) {
                 // wait for irp to complete
           
                TRAP(); // first time we hit this
                       
                KeWaitForSingleObject(
                    &event,
                    Suspended,
                    KernelMode,
                    FALSE,
                    NULL);
            }

            ntStatus = D12_StartDevice(DeviceObject);
            Irp->IoStatus.Status = ntStatus;

            goto D12_Dispatch_CompleteRequest;
            }
            break;

        case IRP_MN_STOP_DEVICE:

            D12_KdPrint (("D12TEST.SYS: IRP_MN_STOP_DEVICE\n"));

            ntStatus = D12_StopDevice(DeviceObject);

            break;

        case IRP_MN_REMOVE_DEVICE:

            D12_KdPrint (("D12TEST.SYS: IRP_MN_REMOVE_DEVICE\n"));

            // match the inc at the begining of the dispatch
            // routine
            D12_DecrementIoCount(DeviceObject);

            //
            // ounce this flag is set no irps will be pased 
            // down the stack to lower drivers
            //
            deviceExtension->AcceptingRequests = FALSE;

            if (deviceExtension->UserEvent != NULL) {
                KeSetEvent(deviceExtension->UserEvent,
                           1,
                           FALSE);
            }

            if (NT_SUCCESS(ntStatus)) {
                LONG pendingIoCount;

                IoCopyCurrentIrpStackLocationToNext(Irp);  

                ntStatus = IoCallDriver(stackDeviceObject,
                                        Irp);

                //
                // final decrement will trigger the remove
                //
                pendingIoCount = D12_DecrementIoCount(DeviceObject);

                {
                    NTSTATUS status;

                    // wait for any io request pending in our driver to
                    // complete for finishing the remove

                    status = KeWaitForSingleObject(
                                &deviceExtension->RemoveEvent,
                                Suspended,
                                KernelMode,
                                FALSE,
                                NULL);

//                    TRAP();
                }
                //
                // Delete the link and FDO we created
                //

                D12_RemoveDevice(DeviceObject);

                D12_KdPrint (("D12TEST.SYS: Detaching from %08X\n",
                                 deviceExtension->TopOfStackDeviceObject));

                IoDetachDevice(deviceExtension->TopOfStackDeviceObject);

                D12_KdPrint (("D12TEST.SYS: Deleting %08X\n",
                                 DeviceObject));

                IoDeleteDevice (DeviceObject);

                goto D12_Dispatch_Done;
            }
            break;

        case IRP_MN_QUERY_STOP_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_QUERY_STOP_DEVICE\n"));
            break;
        case IRP_MN_QUERY_REMOVE_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_QUERY_REMOVE_DEVICE\n"));
            break;
        case IRP_MN_CANCEL_STOP_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_CANCEL_STOP_DEVICE\n"));
            break;
        case IRP_MN_CANCEL_REMOVE_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_CANCEL_REMOVE_DEVICE\n"));
            break;
        default:
            D12_KdPrint (("D12TEST.SYS: PnP IOCTL not handled\n"));
        } /* case MinorFunction, MajorFunction == IRP_MJ_PNP_POWER  */


        if (!NT_SUCCESS(ntStatus)) {
            Irp->IoStatus.Status = ntStatus;
            goto D12_Dispatch_CompleteRequest;
        }

        IoCopyCurrentIrpStackLocationToNext(Irp);

        //
        // All PNP_POWER messages get passed to the TopOfStackDeviceObject
        // we were given in PnPAddDevice
        //

        D12_KdPrint (("D12TEST.SYS: Passing PnP Irp down, status = %x\n", ntStatus));

        ntStatus = IoCallDriver(stackDeviceObject,
                                Irp);

        D12_DecrementIoCount(DeviceObject);

        goto D12_Dispatch_Done;
        break; // IRP_MJ_PNP

    default:
        D12_KdPrint (("D12TEST.SYS: MAJOR IOCTL not handled\n"));
        Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;

    } /* case MajorFunction */


    ntStatus = Irp->IoStatus.Status;

D12_Dispatch_CompleteRequest:

    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );

    D12_DecrementIoCount(DeviceObject);

D12_Dispatch_Done:

    D12_KdPrint (("D12TEST.SYS: Exit D12_Dispatch %x\n", ntStatus));

    return ntStatus;
}


VOID
D12_Unload(
    IN PDRIVER_OBJECT DriverObject
    )
/*++

Routine Description:

    Free all the allocated resources, etc.

Arguments:

    DriverObject - pointer to a driver object

Return Value:


--*/
{
    D12_KdPrint (("D12TEST.SYS: enter D12_Unload\n"));

    //
    // Free any global resources allocated
    // in DriverEntry
    //

    D12_KdPrint (("D12TEST.SYS: exit D12_Unload\n"));
}


NTSTATUS
D12_StartDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

    Initializes a given instance of the device on the USB.
    All we do here is get the device descriptor and store it

Arguments:

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

Return Value:

    NT status code

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus;
    PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;
    PURB urb;
    ULONG siz;

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

    deviceExtension = DeviceObject->DeviceExtension;
	
	D12_ResetIrpQueue(DeviceObject);

    urb = ExAllocatePool(NonPagedPool,
                         sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

    if (urb) {

        siz = sizeof(USB_DEVICE_DESCRIPTOR);

        deviceDescriptor = ExAllocatePool(NonPagedPool,
                                          siz);

        if (deviceDescriptor) {

            UsbBuildGetDescriptorRequest(urb,
                                         (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
                                         USB_DEVICE_DESCRIPTOR_TYPE,
                                         0,
                                         0,
                                         deviceDescriptor,
                                         NULL,
                                         siz,
                                         NULL);

            ntStatus = D12_CallUSBD(DeviceObject, urb);

            if (NT_SUCCESS(ntStatus)) {
                D12_KdPrint (("D12TEST.SYS: Device Descriptor = %x, len %x\n",
                                deviceDescriptor,
                                urb->UrbControlDescriptorRequest.TransferBufferLength));

                D12_KdPrint (("D12TEST.SYS: D12 Device Descriptor:\n"));
                D12_KdPrint (("D12TEST.SYS: -------------------------\n"));
                D12_KdPrint (("D12TEST.SYS: bLength %d\n", deviceDescriptor->bLength));
                D12_KdPrint (("D12TEST.SYS: bDescriptorType 0x%x\n", deviceDescriptor->bDescriptorType));
                D12_KdPrint (("D12TEST.SYS: bcdUSB 0x%x\n", deviceDescriptor->bcdUSB));
                D12_KdPrint (("D12TEST.SYS: bDeviceClass 0x%x\n", deviceDescriptor->bDeviceClass));
                D12_KdPrint (("D12TEST.SYS: bDeviceSubClass 0x%x\n", deviceDescriptor->bDeviceSubClass));
                D12_KdPrint (("D12TEST.SYS: bDeviceProtocol 0x%x\n", deviceDescriptor->bDeviceProtocol));
                D12_KdPrint (("D12TEST.SYS: bMaxPacketSize0 0x%x\n", deviceDescriptor->bMaxPacketSize0));
                D12_KdPrint (("D12TEST.SYS: idVendor 0x%x\n", deviceDescriptor->idVendor));
                D12_KdPrint (("D12TEST.SYS: idProduct 0x%x\n", deviceDescriptor->idProduct));
                D12_KdPrint (("D12TEST.SYS: bcdDevice 0x%x\n", deviceDescriptor->bcdDevice));
                D12_KdPrint (("D12TEST.SYS: iManufacturer 0x%x\n", deviceDescriptor->iManufacturer));
                D12_KdPrint (("D12TEST.SYS: iProduct 0x%x\n", deviceDescriptor->iProduct));
                D12_KdPrint (("D12TEST.SYS: iSerialNumber 0x%x\n", deviceDescriptor->iSerialNumber));
                D12_KdPrint (("D12TEST.SYS: bNumConfigurations 0x%x\n", deviceDescriptor->bNumConfigurations));
            }
        } else {
            ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        }

        if (NT_SUCCESS(ntStatus)) {
            deviceExtension->DeviceDescriptor = deviceDescriptor;
        } else if (deviceDescriptor) {
            ExFreePool(deviceDescriptor);
        }

        ExFreePool(urb);

    } else {
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    }

    if (NT_SUCCESS(ntStatus)) {
        ntStatus = D12_ConfigureDevice(DeviceObject);
    }

    if (NT_SUCCESS(ntStatus)) {
        ntStatus = D12_BuildPipeList(DeviceObject);
    }

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

    return ntStatus;
}


NTSTATUS
D12_RemoveDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

    Stops a given instance of a 82930 device on the USB.

Arguments:

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

Return Value:

    NT status code

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus = STATUS_SUCCESS;
    UNICODE_STRING deviceLinkUnicodeString;

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

    deviceExtension = DeviceObject->DeviceExtension;

    
    RtlInitUnicodeString (&deviceLinkUnicodeString,
                          deviceExtension->DeviceLinkNameBuffer);

    // remove the GUID-based symbolic link
    ntStatus = IoSetDeviceInterfaceState(&deviceLinkUnicodeString, FALSE);

    //
    // Free device descriptor structure
    //

    if (deviceExtension->DeviceDescriptor) {
        ExFreePool(deviceExtension->DeviceDescriptor);
    }

    //

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人丝袜视频网| 另类人妖一区二区av| 国产精品一区二区三区乱码| 欧美性色黄大片| 中文字幕乱码亚洲精品一区| 久草热8精品视频在线观看| 色www精品视频在线观看| 欧美国产视频在线| 激情国产一区二区| 欧美一区二区私人影院日本| 一区二区视频免费在线观看| 国产成人一区二区精品非洲| 日韩精品一区二区三区视频播放| 亚洲综合激情另类小说区| 成人黄动漫网站免费app| 精品国产免费久久| 免费高清在线视频一区·| 欧美亚一区二区| 亚洲精品国产a| 99在线热播精品免费| 欧美激情综合在线| 国产一区二区不卡在线| 日韩一卡二卡三卡| 男人的天堂亚洲一区| 欧美精品第一页| 亚洲成人激情自拍| 欧美性三三影院| 亚洲电影视频在线| 欧美午夜片在线看| 国产成人啪免费观看软件 | 26uuu欧美| 日本成人中文字幕在线视频| 97se亚洲国产综合自在线不卡| wwwwxxxxx欧美| 狠狠色综合播放一区二区| 日韩午夜中文字幕| 裸体歌舞表演一区二区| 日韩欧美中文一区二区| 麻豆国产精品777777在线| 日韩欧美一级二级三级| 久久精品国产一区二区三区免费看| 欧美一区日韩一区| 蜜桃视频在线观看一区| 精品免费99久久| 国产精品12区| 国产精品麻豆一区二区 | 免费观看在线色综合| 日韩午夜中文字幕| 国产在线日韩欧美| 欧美激情一区二区三区| caoporn国产精品| 亚洲免费在线视频| 欧美午夜寂寞影院| 秋霞成人午夜伦在线观看| 精品美女一区二区三区| 成人污视频在线观看| 亚洲免费观看高清完整版在线观看熊| 色综合天天在线| 亚洲午夜激情av| 日韩亚洲欧美成人一区| 国产麻豆一精品一av一免费 | 国产精品萝li| 在线观看av不卡| 日韩国产欧美视频| 亚洲精品一区二区精华| 大胆亚洲人体视频| 夜夜夜精品看看| 日韩三级免费观看| 国产sm精品调教视频网站| 中文字幕一区av| 欧美视频中文一区二区三区在线观看 | 91影院在线免费观看| 亚洲图片有声小说| 欧美电影免费观看高清完整版| 国产成人在线视频网站| 亚洲与欧洲av电影| 日韩精品一区二区三区老鸭窝| 成人小视频在线| 亚洲线精品一区二区三区| 日韩手机在线导航| 成人爱爱电影网址| 亚洲成人tv网| 国产日产欧美一区| 欧美亚男人的天堂| 国产成人精品www牛牛影视| 亚洲免费三区一区二区| 日韩精品在线一区| 91老司机福利 在线| 日本欧美一区二区三区乱码| 久久精品夜色噜噜亚洲a∨| 在线免费视频一区二区| 久久99国内精品| 亚洲欧美日韩综合aⅴ视频| 日韩午夜中文字幕| 色婷婷精品久久二区二区蜜臂av | 综合婷婷亚洲小说| 日韩欧美国产综合在线一区二区三区| 粉嫩一区二区三区性色av| 亚洲成精国产精品女| 国产日韩精品一区二区三区| 欧美人与z0zoxxxx视频| 成人午夜免费av| 首页亚洲欧美制服丝腿| 国产精品毛片a∨一区二区三区| 91精品国产91久久久久久一区二区 | 亚洲第一av色| 国产精品蜜臀av| 日韩免费观看高清完整版在线观看| 99久久免费精品| 国产在线一区观看| 视频一区二区三区中文字幕| 国产精品美女久久久久aⅴ | 在线免费一区三区| 丰满亚洲少妇av| 美腿丝袜亚洲一区| 亚洲观看高清完整版在线观看| 国产精品毛片大码女人| 精品日韩一区二区三区免费视频| 色成年激情久久综合| 国产激情视频一区二区在线观看| 日本成人在线视频网站| 一区二区三区国产| 国产精品午夜电影| 久久婷婷国产综合国色天香| 欧美美女bb生活片| 在线亚洲人成电影网站色www| 懂色一区二区三区免费观看| 免费在线一区观看| 偷偷要91色婷婷| 亚洲一区二区三区四区在线免费观看| 日本一区二区高清| 久久综合色8888| 欧美岛国在线观看| 欧美一级免费大片| 欧美军同video69gay| 日本韩国欧美国产| 91视频.com| 99久久精品免费| 成人黄动漫网站免费app| 国产精品18久久久久久vr| 麻豆成人91精品二区三区| 日韩电影在线免费观看| 日韩激情中文字幕| 五月综合激情网| 性做久久久久久久久| 亚洲影视在线观看| 夜夜嗨av一区二区三区网页| 亚洲丝袜精品丝袜在线| 国产精品电影院| 国产精品久久久久久久岛一牛影视 | 精品1区2区在线观看| 日韩午夜在线影院| 欧美xxxxx裸体时装秀| 欧美α欧美αv大片| 精品1区2区在线观看| 久久蜜桃av一区二区天堂| 久久综合狠狠综合久久激情| 久久这里只有精品视频网| 精品国内二区三区| 久久久久九九视频| 欧美极品少妇xxxxⅹ高跟鞋| 中文在线资源观看网站视频免费不卡| 国产欧美一区二区三区在线看蜜臀| 久久精品亚洲精品国产欧美kt∨| 久久久777精品电影网影网| 久久久精品人体av艺术| 国产人成一区二区三区影院| 中文字幕免费不卡| 亚洲三级电影网站| 亚洲一区视频在线| 五月综合激情婷婷六月色窝| 蜜臀精品一区二区三区在线观看 | 亚洲最快最全在线视频| 亚洲福利视频一区二区| 男女男精品视频网| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品久久久久久久蜜臀| 中文字幕日本不卡| 亚洲免费观看高清完整版在线观看 | 精品视频色一区| 欧美成人精品1314www| 国产亚洲欧美一级| 综合在线观看色| 午夜亚洲福利老司机| 久久成人av少妇免费| 国产成人一区二区精品非洲| 一本一本大道香蕉久在线精品 | 欧美另类高清zo欧美| 日韩久久免费av| 国产精品灌醉下药二区| 亚洲一二三级电影| 国产尤物一区二区| 色香色香欲天天天影视综合网| 欧美美女直播网站| 国产视频不卡一区| 亚洲一区二区av在线| 伦理电影国产精品| 国产91精品久久久久久久网曝门| 91免费版pro下载短视频| 欧美男女性生活在线直播观看|