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

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

?? sbulkpnp.c

?? S3C2410X平臺下的USB驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
BulkUsb_StartDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

    Called from BulkUsb_ProcessPnPIrp(), the dispatch routine for IRP_MJ_PNP.
    Initializes a given instance of the device on the USB.
    USB client drivers such as us set up URBs (USB Request Packets) to send requests
    to the host controller driver (HCD). The URB structure defines a format for all
    possible commands that can be sent to a USB device.
    Here, we request the device descriptor and store it, and configure the device.


Arguments:

    DeviceObject - pointer to the FDO (Functional Device Object)

Return Value:

    NT status code

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

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("enter BulkUsb_StartDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

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

    BULKUSB_KdPrintCond( DBGLVL_HIGH,!urb, ("BulkUsb_StartDevice() FAILED BULKUSB_ExAllocatePool() for URB\n"));

    if (urb) {

        siz = sizeof(USB_DEVICE_DESCRIPTOR);

        deviceDescriptor = BULKUSB_ExAllocatePool(NonPagedPool,
                                          siz);

        BULKUSB_KdPrintCond( DBGLVL_HIGH, !deviceDescriptor, ("BulkUsb_StartDevice() FAILED BULKUSB_ExAllocatePool() for deviceDescriptor\n"));

        if (deviceDescriptor) {

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


            ntStatus = BulkUsb_CallUSBD(DeviceObject, urb);

            BULKUSB_KdPrintCond( DBGLVL_DEFAULT, !NT_SUCCESS(ntStatus), ("BulkUsb_StartDevice() FAILED BulkUsb_CallUSBD(DeviceObject, urb)\n"));

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

                BULKUSB_KdPrint( DBGLVL_MEDIUM,("I82930 Device Descriptor:\n"));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("-------------------------\n"));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bLength %d\n", deviceDescriptor->bLength));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDescriptorType 0x%x\n", deviceDescriptor->bDescriptorType));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bcdUSB 0x%x\n", deviceDescriptor->bcdUSB));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceClass 0x%x\n", deviceDescriptor->bDeviceClass));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceSubClass 0x%x\n", deviceDescriptor->bDeviceSubClass));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceProtocol 0x%x\n", deviceDescriptor->bDeviceProtocol));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bMaxPacketSize0 0x%x\n", deviceDescriptor->bMaxPacketSize0));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("idVendor 0x%x\n", deviceDescriptor->idVendor));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("idProduct 0x%x\n", deviceDescriptor->idProduct));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bcdDevice 0x%x\n", deviceDescriptor->bcdDevice));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("iManufacturer 0x%x\n", deviceDescriptor->iManufacturer));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("iProduct 0x%x\n", deviceDescriptor->iProduct));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("iSerialNumber 0x%x\n", deviceDescriptor->iSerialNumber));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bNumConfigurations 0x%x\n", deviceDescriptor->bNumConfigurations));
            }
        } else {
                        // if we got here we failed to allocate deviceDescriptor
            ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        }

        if (NT_SUCCESS(ntStatus)) {
            deviceExtension->UsbDeviceDescriptor = deviceDescriptor;
        } else if (deviceDescriptor) {
            BULKUSB_ExFreePool(deviceDescriptor);
        }

        BULKUSB_ExFreePool(urb);

    } else {
                // if we got here we failed to allocate the urb
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    }

    if (NT_SUCCESS(ntStatus)) {
        ntStatus = BulkUsb_ConfigureDevice(DeviceObject);

        BULKUSB_KdPrintCond( DBGLVL_MEDIUM,!NT_SUCCESS(ntStatus),("BulkUsb_StartDevice BulkUsb_ConfigureDevice() FAILURE (%x)\n", ntStatus));
    }


    if (NT_SUCCESS(ntStatus)) {
        deviceExtension->DeviceStarted = TRUE;
    }
    BULKUSB_KdPrint( DBGLVL_DEFAULT, ("exit BulkUsb_StartDevice (%x)\n", ntStatus));

    return ntStatus;
}


NTSTATUS
BulkUsb_RemoveDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

        Called from BulkUsb_ProcessPnPIrp() to
    clean up our device instance's allocated buffers; free symbolic links

Arguments:

    DeviceObject - pointer to the FDO

Return Value:

    NT status code from free symbolic link operation

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

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("enter BulkUsb_RemoveDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    RtlInitUnicodeString (&deviceLinkUnicodeString,
                          deviceExtension->DeviceLinkNameBuffer);

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

    //
    // Free device descriptor structure
    //

    if (deviceExtension->UsbDeviceDescriptor) {
        BULKUSB_ExFreePool(deviceExtension->UsbDeviceDescriptor);
        deviceExtension->UsbDeviceDescriptor = NULL;
    }

    //
    // Free pipe info structs
    //
    if( deviceExtension->PipeInfo ) {

        BULKUSB_ExFreePool( deviceExtension->PipeInfo );
        deviceExtension->PipeInfo = NULL;
    }


    //
    // Free up the UsbInterface structure
    //
    if (deviceExtension->UsbInterface) {
        BULKUSB_ExFreePool(deviceExtension->UsbInterface);
        deviceExtension->UsbInterface = NULL;
    }

        // free up the USB config discriptor
    if (deviceExtension->UsbConfigurationDescriptor) {
        BULKUSB_ExFreePool(deviceExtension->UsbConfigurationDescriptor);
        deviceExtension->UsbConfigurationDescriptor = NULL;
    }


    // free the pending irp list
    if ( deviceExtension->PendingIoIrps ) {
        BULKUSB_ExFreePool(deviceExtension->PendingIoIrps );
        deviceExtension->PendingIoIrps = NULL;
    }

        BULKUSB_ASSERT( gExAllocCount == 0 );
    BULKUSB_KdPrint( DBGLVL_HIGH,("exit BulkUsb_RemoveDevice() gExAllocCount = dec %d\n", gExAllocCount ));

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("exit BulkUsb_RemoveDevice() status = 0x%x\n", ntStatus ));

    return ntStatus;
}




NTSTATUS
BulkUsb_StopDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

    Stops a given instance of a 82930 device on the USB.
    We basically just tell USB this device is now 'unconfigured'

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;
    PURB urb;
    ULONG siz;

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("enter BulkUsb_StopDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    //
    // Send the select configuration urb with a NULL pointer for the configuration
    // handle. This closes the configuration and puts the device in the 'unconfigured'
    // state.
    //

    siz = sizeof(struct _URB_SELECT_CONFIGURATION);

    urb = BULKUSB_ExAllocatePool(NonPagedPool,
                         siz);

    if (urb) {
        UsbBuildSelectConfigurationRequest(urb,
                                          (USHORT) siz,
                                          NULL);

        ntStatus = BulkUsb_CallUSBD(DeviceObject, urb);

        BULKUSB_KdPrintCond( DBGLVL_DEFAULT,!NT_SUCCESS(ntStatus),("BulkUsb_StopDevice() FAILURE Configuration Closed status = %x usb status = %x.\n", ntStatus, urb->UrbHeader.Status));

        BULKUSB_ExFreePool(urb);
    } else {
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    }


    if (NT_SUCCESS(ntStatus)) {
        deviceExtension->DeviceStarted = FALSE;
    }

    deviceExtension->StopDeviceRequested = FALSE;

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("exit BulkUsb_StopDevice() (%x)\n", ntStatus));

    return ntStatus;
}



NTSTATUS
BulkUsb_IrpCompletionRoutine(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )
/*++

Routine Description:

    Used as a  general purpose completion routine so it can signal an event,
    passed as the Context, when the next lower driver is done with the input Irp.
        This routine is used by both PnP and Power Management logic.

    Even though this routine does nothing but set an event, it must be defined and
    prototyped as a completetion routine for use as such


Arguments:

    DeviceObject - Pointer to the device object for the class device.

    Irp - Irp completed.

    Context - Driver defined context, in this case a pointer to an event.

Return Value:

    The function value is the final status from the operation.

--*/
{
    PKEVENT event = Context;

    // Set the input event
    KeSetEvent(event,
               1,       // Priority increment  for waiting thread.
               FALSE);  // Flag this call is not immediately followed by wait.

    // This routine must return STATUS_MORE_PROCESSING_REQUIRED because we have not yet called
    // IoFreeIrp() on this IRP.
    return STATUS_MORE_PROCESSING_REQUIRED;

}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道av一区二区在线播放| 91最新地址在线播放| 夜夜爽夜夜爽精品视频| 国产精品成人在线观看| 国产欧美日本一区视频| 国产欧美精品一区二区三区四区 | 日韩主播视频在线| 亚洲午夜成aⅴ人片| 一区二区三区色| 亚洲成av人影院| 亚洲成国产人片在线观看| 亚洲国产精品精华液网站| 亚洲va天堂va国产va久| 久久福利资源站| 国产麻豆欧美日韩一区| 成人动漫视频在线| 91精品办公室少妇高潮对白| 在线中文字幕一区| 69久久99精品久久久久婷婷| 精品区一区二区| 国产精品久久综合| 综合欧美亚洲日本| 婷婷久久综合九色国产成人| 日韩av在线免费观看不卡| 国产成人免费在线视频| 91老师国产黑色丝袜在线| 欧美日韩免费一区二区三区| 欧美变态口味重另类| 亚洲欧洲在线观看av| 一区二区三区色| 捆绑变态av一区二区三区| 国产成人在线视频免费播放| 91一区二区在线| 制服丝袜激情欧洲亚洲| 日本一区二区视频在线观看| 亚洲精选免费视频| 国产一区二区h| 久久综合久久99| 国产精品大尺度| 免费久久99精品国产| 国产成人8x视频一区二区| 91高清视频在线| 亚洲国产成人私人影院tom| 亚洲综合一区在线| 国产精品18久久久| 7777精品伊人久久久大香线蕉最新版| 亚洲精品在线免费播放| 又紧又大又爽精品一区二区| 国精品**一区二区三区在线蜜桃| 在线观看成人小视频| 国产欧美日韩激情| 极品尤物av久久免费看| 欧美亚洲一区三区| 亚洲精品免费电影| 成人看片黄a免费看在线| 欧美一区午夜精品| 亚洲一区二区三区四区五区中文 | 99久久综合国产精品| 欧美一区二区三区电影| 亚洲美女精品一区| 高清在线观看日韩| 久久久精品tv| 韩国v欧美v亚洲v日本v| 欧美一区二区视频免费观看| 亚洲伊人色欲综合网| 一本一道久久a久久精品| 国产精品天干天干在线综合| 国产自产v一区二区三区c| 欧美一区二区视频在线观看2020 | 日本不卡在线视频| 欧美在线你懂得| 有坂深雪av一区二区精品| av在线免费不卡| 国产欧美日韩视频一区二区| 国产成人av自拍| 国产清纯白嫩初高生在线观看91 | 91国产视频在线观看| 亚洲欧美激情插 | 午夜欧美在线一二页| 欧美在线免费播放| 亚洲福利视频三区| 91精品中文字幕一区二区三区| 日韩专区中文字幕一区二区| 5566中文字幕一区二区电影| 男女性色大片免费观看一区二区| 欧美精品在线一区二区三区| 日本免费在线视频不卡一不卡二| 日韩一区二区影院| 老司机免费视频一区二区| 精品国产伦一区二区三区免费| 九一久久久久久| 中文字幕第一页久久| 91麻豆精品秘密| 亚洲v中文字幕| 欧美精品一区二区三区在线播放| 韩国成人在线视频| 国产精品久久久久久久久免费桃花| 99久久99久久免费精品蜜臀| 亚洲综合视频网| 日韩三区在线观看| 懂色av一区二区三区免费看| 日韩一区中文字幕| 91精品国产综合久久香蕉的特点 | 欧美日韩电影在线播放| 一区二区三区波多野结衣在线观看| 欧美日韩一级大片网址| 久久精品国产99久久6| 中文字幕av在线一区二区三区| 色视频成人在线观看免| 久久精品国产精品亚洲红杏| 国产精品色哟哟网站| 欧美日韩一区二区三区不卡 | 国产精品久99| 欧美日韩色一区| 国产xxx精品视频大全| 亚洲国产成人高清精品| 精品国产一区二区国模嫣然| 色综合天天做天天爱| 麻豆久久久久久久| 亚洲综合激情小说| 日本一区二区综合亚洲| 欧美剧情片在线观看| 99视频精品免费视频| 精品一区二区三区影院在线午夜 | 国产精品三级视频| 欧美大白屁股肥臀xxxxxx| 日本久久精品电影| 福利视频网站一区二区三区| 日韩电影在线观看电影| 亚洲蜜臀av乱码久久精品蜜桃| 久久婷婷国产综合国色天香| 欧美精品18+| 在线视频中文字幕一区二区| 国产精品一区免费视频| 久久机这里只有精品| 亚洲va韩国va欧美va| 亚洲人xxxx| 亚洲欧美一区二区在线观看| 精品国产乱码久久久久久牛牛| 欧美精品三级日韩久久| 在线看国产日韩| 99精品黄色片免费大全| 成人亚洲一区二区一| 国产自产v一区二区三区c| 免费观看在线综合色| 日韩av电影免费观看高清完整版 | www.欧美日韩| 国产激情精品久久久第一区二区| 久久精品国产精品青草| 日韩av一二三| 视频一区二区三区在线| 亚洲一区二区三区中文字幕在线| 亚洲精品老司机| 亚洲精品少妇30p| 一区二区三区欧美日| 一区二区三区日韩| 亚洲国产精品一区二区www在线 | 国产精品免费视频一区| 国产精品三级电影| 亚洲男人的天堂在线aⅴ视频| 亚洲免费观看高清完整| 一区二区三区中文字幕| 亚洲一区二区三区在线播放| 亚洲电影一区二区| 日本成人中文字幕在线视频| 精品一区二区久久久| 精品中文字幕一区二区| 国产成人高清在线| 91香蕉视频污在线| 欧美日韩综合一区| 欧美一区二区三区在| 一区二区三区四区中文字幕| 亚洲国产一二三| 老汉av免费一区二区三区| 国产精品一区在线观看你懂的| www.日韩av| 欧美理论电影在线| 国产网站一区二区| 亚洲欧美乱综合| 美女高潮久久久| 成人爱爱电影网址| 欧美日韩夫妻久久| 国产午夜精品久久久久久免费视 | 欧美精品日韩精品| 精品成人私密视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 在线观看91精品国产入口| 欧美日韩国产精品自在自线| 久久久亚洲综合| 一区二区三区高清不卡| 极品少妇一区二区三区精品视频 | 精品粉嫩aⅴ一区二区三区四区| 国产精品久线在线观看| 日本欧洲一区二区| 91女厕偷拍女厕偷拍高清| 日韩美女主播在线视频一区二区三区| 日本一区二区三区在线观看| 偷拍亚洲欧洲综合| 99精品国产一区二区三区不卡| 欧美一区二区三区免费大片|