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

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

?? bulkpnp.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乱码久久精品 | 日韩不卡免费视频| 日韩午夜激情视频| 国产精品一区二区在线观看不卡| 久久女同精品一区二区| av福利精品导航| 亚洲一区国产视频| 精品99久久久久久| 99在线精品观看| 视频一区二区三区入口| 精品国产凹凸成av人网站| 成人性生交大片免费看中文网站| 亚洲欧美日韩中文播放| 欧美精品久久99久久在免费线| 日韩av网站免费在线| 国产欧美精品一区aⅴ影院| 色噜噜久久综合| 日本欧美一区二区| 中文字幕亚洲区| 欧美日韩高清一区二区三区| 国产精品一区三区| 一区二区三区在线播放| 日韩一区二区三区免费看| 成人av在线一区二区| 日韩国产精品91| 亚洲日本在线看| 精品处破学生在线二十三| 91黄色激情网站| 国产成人自拍在线| 亚洲mv大片欧洲mv大片精品| 国产欧美精品在线观看| 欧美日韩国产天堂| av在线不卡网| 国产在线精品一区二区 | 日韩电影在线观看网站| 国产亚洲欧美中文| 欧美日本免费一区二区三区| 不卡电影一区二区三区| 久久se精品一区精品二区| 夜夜嗨av一区二区三区中文字幕| 2021国产精品久久精品| 欧美日韩一区二区三区在线看| 国产精品主播直播| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品久久久久四虎| 欧美一区二区精美| 91行情网站电视在线观看高清版| 国产精品综合网| 日韩国产精品久久久| 一区二区三区欧美| 亚洲日本乱码在线观看| 国产日韩亚洲欧美综合| 精品人在线二区三区| 欧美日本在线视频| 欧美色综合久久| 色婷婷综合久久久| 91在线免费看| 成人黄色av电影| 国产老女人精品毛片久久| 免费成人在线观看| 日韩精品久久久久久| 五月婷婷久久丁香| 亚洲va天堂va国产va久| 亚洲综合激情另类小说区| 亚洲精品国产一区二区精华液 | 亚洲老妇xxxxxx| 中文字幕亚洲在| 国产农村妇女毛片精品久久麻豆 | 91在线观看一区二区| 国产一区二区h| 国产一本一道久久香蕉| 狠狠色丁香婷婷综合久久片| 麻豆精品视频在线观看| 麻豆国产欧美日韩综合精品二区| 秋霞影院一区二区| 九九九久久久精品| 国产一区在线不卡| 成人一级视频在线观看| av网站一区二区三区| 一本一本久久a久久精品综合麻豆| av中文字幕不卡| 91久久一区二区| 欧美日韩免费高清一区色橹橹| 欧美精品在线一区二区三区| 欧美一区二区视频在线观看| 欧美va日韩va| 国产精品九色蝌蚪自拍| 亚洲靠逼com| 免费成人av资源网| 国产精品乡下勾搭老头1| 成人av免费观看| 欧美性高清videossexo| 日韩美女天天操| 久久精品亚洲乱码伦伦中文 | 欧美欧美午夜aⅴ在线观看| 7777精品伊人久久久大香线蕉| 日韩午夜精品电影| 国产欧美精品一区二区色综合| 中文字幕日韩av资源站| 丝袜诱惑制服诱惑色一区在线观看| 久久精品国产亚洲aⅴ| 不卡一区二区中文字幕| 欧美性一二三区| 欧美成人午夜电影| 亚洲久草在线视频| 久久成人免费网| 91色porny| 91精品国产综合久久精品| 国产人妖乱国产精品人妖| 亚洲一区二区三区四区在线免费观看| 免费不卡在线视频| 97久久精品人人做人人爽| 欧美一区二区在线视频| 国产亚洲va综合人人澡精品 | 日韩一本二本av| 一区二区中文视频| 免费高清视频精品| 日本精品免费观看高清观看| 亚洲精品在线观| 亚洲观看高清完整版在线观看 | 成人动漫一区二区在线| 欧美精品免费视频| 亚洲欧洲日本在线| 蜜桃av一区二区| 色综合av在线| 久久久久久亚洲综合影院红桃 | 秋霞电影网一区二区| 成人激情图片网| 亚洲精品一线二线三线无人区| 一区二区三区精品在线| 成人午夜av电影| 久久综合九色综合欧美98| 午夜精品久久久久久久蜜桃app| 不卡的av在线| 国产亚洲午夜高清国产拍精品 | 国产精品水嫩水嫩| 久久国产精品色| 欧美高清视频不卡网| 一区二区三区在线播| 99久久久久免费精品国产| 国产天堂亚洲国产碰碰| 国产主播一区二区| 欧美成人video| 日韩精品午夜视频| 69堂国产成人免费视频| 亚洲电影第三页| 欧美性做爰猛烈叫床潮| 亚洲欧美色综合| 91亚洲国产成人精品一区二三| 国产精品人成在线观看免费| 国产一区亚洲一区| 久久综合成人精品亚洲另类欧美| 蜜臀av一级做a爰片久久| 欧美日韩精品免费观看视频| 亚洲图片有声小说| 欧美色男人天堂| 亚洲香蕉伊在人在线观| 欧美天天综合网| 午夜免费欧美电影| 欧美剧在线免费观看网站| 亚洲永久精品大片| 欧美日本在线观看| 日本在线不卡一区| 精品国产伦一区二区三区免费| 久久99国产精品免费| 精品999久久久| 国产成人精品www牛牛影视| 久久久久久9999| 成人高清免费观看| 一区二区三区四区不卡在线| 欧美在线观看18| 丝袜亚洲另类欧美| 欧美一区二区黄| 国产一区三区三区| 中文字幕av在线一区二区三区| 成人久久久精品乱码一区二区三区 | 美国十次综合导航| 亚洲精品在线三区| 成人激情校园春色| 亚洲一区二区三区在线| 日韩视频免费观看高清在线视频| 久久国产欧美日韩精品| 亚洲国产成人在线| 色婷婷久久久亚洲一区二区三区| 亚洲国产成人av网| xvideos.蜜桃一区二区| 风间由美一区二区三区在线观看| 亚洲色大成网站www久久九九| 欧美日韩精品免费| 国产一区欧美日韩| 一区二区成人在线观看| 在线不卡的av| 国产成人av资源| 亚洲综合色视频| 久久综合一区二区| 日本高清免费不卡视频| 麻豆成人久久精品二区三区红| 国产精品久久三|