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

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

?? sbulkpnp.c

?? 該代碼是基于S3C2410處理器上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一区二区三区免费野_久草精品视频
成人综合在线视频| 91免费精品国自产拍在线不卡| 国产一区二区日韩精品| 91在线免费播放| 欧美一级黄色片| 亚洲男女毛片无遮挡| 国产精品系列在线播放| 日韩欧美黄色影院| 一区二区三区四区高清精品免费观看 | 欧美影院一区二区| 久久久久久97三级| 黑人巨大精品欧美一区| 久久久精品影视| 日本aⅴ精品一区二区三区 | 国产精品亚洲专一区二区三区| 欧美日韩日日摸| 亚洲妇女屁股眼交7| 在线一区二区三区四区| 亚洲人午夜精品天堂一二香蕉| 国产精华液一区二区三区| 精品免费国产一区二区三区四区| 五月婷婷综合网| 欧美三级电影在线观看| 久久精品人人做| 国产精品二三区| 国产精品情趣视频| 国产剧情一区二区| 亚洲精品在线网站| 国产精品一线二线三线| 久久久综合九色合综国产精品| 美日韩黄色大片| 欧美mv日韩mv| 国产一区91精品张津瑜| 久久综合久久鬼色| 国产一区 二区 三区一级| 国产亚洲精品中文字幕| 韩国一区二区视频| 日韩精品影音先锋| 依依成人精品视频| 91在线精品一区二区三区| 亚洲欧美中日韩| 91在线观看免费视频| 亚洲免费观看在线观看| 色综合激情久久| 亚洲欧美日韩系列| 91在线国产观看| 国产精品网站在线播放| 97精品视频在线观看自产线路二| 国产女人18水真多18精品一级做| av在线不卡电影| 亚洲人亚洲人成电影网站色| 色综合中文字幕国产| 久久影院视频免费| 精品一区二区在线免费观看| 精品美女一区二区三区| 丝袜亚洲另类欧美| 欧美精品18+| 久久精品久久精品| 久久久亚洲午夜电影| 国产自产视频一区二区三区| 久久精品免费在线观看| 国产一区二区三区免费| 亚洲丝袜另类动漫二区| 欧美亚洲国产怡红院影院| 奇米影视一区二区三区| 久久久精品日韩欧美| 91九色最新地址| 日韩影院精彩在线| 中文字幕在线观看不卡| 欧美性大战xxxxx久久久| 国模少妇一区二区三区| 亚洲欧洲av一区二区三区久久| 欧美伦理电影网| 美女一区二区在线观看| 国产精品家庭影院| 欧美日韩精品一区二区| 国产a视频精品免费观看| 亚洲另类一区二区| 国产亚洲一本大道中文在线| 波多野结衣91| 久热成人在线视频| **性色生活片久久毛片| 91在线观看成人| 国产一区二区免费在线| 国产精品久久影院| 久久久久国产精品人| 在线看不卡av| 国产精品91一区二区| 亚洲一区二区视频在线| 国产精品久久免费看| 欧美日本在线观看| 色综合久久88色综合天天6| 日本欧美一区二区| 久久精品在线观看| 欧美日韩免费观看一区三区| 粉嫩绯色av一区二区在线观看| 亚洲综合色区另类av| 欧美日韩精品一区二区三区四区| 国v精品久久久网| 亚洲一级二级三级在线免费观看| 欧美激情一区三区| 欧美一级欧美三级在线观看| 日本道色综合久久| 丰满亚洲少妇av| 国产成人精品免费网站| 首页亚洲欧美制服丝腿| 亚洲高清不卡在线| 亚洲女同一区二区| 亚洲丝袜精品丝袜在线| 国产亚洲婷婷免费| 日本一区二区综合亚洲| 日韩一区二区不卡| 精品久久久久久久人人人人传媒| 在线视频综合导航| 欧美午夜不卡在线观看免费| 国产成+人+日韩+欧美+亚洲| 国产不卡免费视频| 九色综合狠狠综合久久| 国产专区综合网| 另类专区欧美蜜桃臀第一页| 乱一区二区av| 亚洲成人av在线电影| 日本欧美大码aⅴ在线播放| 亚洲国产一区二区三区青草影视| 亚洲中国最大av网站| 亚洲色图在线视频| 午夜精品福利一区二区三区蜜桃| 亚洲另类在线制服丝袜| 亚洲成a人片在线观看中文| 亚洲一区在线电影| 肉色丝袜一区二区| 午夜激情久久久| 婷婷一区二区三区| 欧美a级一区二区| 国产成人av影院| 成人午夜电影网站| 欧美亚州韩日在线看免费版国语版| 91网站视频在线观看| 色一区在线观看| 欧美精品v国产精品v日韩精品| 欧美性猛片xxxx免费看久爱| 欧美日韩国产高清一区二区三区 | 亚洲成人av福利| 久久成人免费日本黄色| 国产在线精品免费av| 95精品视频在线| 欧美影视一区二区三区| 精品国产髙清在线看国产毛片| 精品少妇一区二区三区免费观看 | 成人黄色软件下载| 丰满岳乱妇一区二区三区| 欧洲一区二区三区免费视频| 成人av网址在线| 欧美区在线观看| 欧美亚洲国产一区二区三区| 制服丝袜亚洲色图| 欧美激情综合五月色丁香小说| 中文字幕一区免费在线观看| 成人免费在线播放视频| 亚洲国产综合人成综合网站| 国产成人无遮挡在线视频| av亚洲精华国产精华| 日韩免费视频一区| 国产精品天美传媒沈樵| 免费成人小视频| 成人精品电影在线观看| 欧美成人精品二区三区99精品| 国产午夜精品理论片a级大结局| 丝袜亚洲精品中文字幕一区| 国产在线国偷精品免费看| 欧美日韩一区小说| 日韩精品一区二| 亚洲va欧美va人人爽午夜| 精品一区二区综合| 欧美美女网站色| 国产精品成人免费在线| 国产精品综合二区| 99久久精品免费看| 久久久久久久久久久久久夜| 偷拍一区二区三区| 成人av网站在线| 国产欧美一区二区精品秋霞影院| 一区二区在线电影| 97aⅴ精品视频一二三区| 日韩欧美三级在线| 青青国产91久久久久久| 97国产精品videossex| 国产精品不卡在线| 精品影视av免费| 日韩免费成人网| 亚洲一区二区精品3399| 色域天天综合网| 亚洲国产日日夜夜| 国产精品99久久久| 欧美国产日本视频| 韩国三级在线一区| 久久精品亚洲精品国产欧美kt∨ | 美国十次了思思久久精品导航| 欧美影院一区二区三区| 中文字幕日韩av资源站|