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

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

?? isopnp.c

?? S3C2410X平臺下的USB驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
Return Value:

    NT status code

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

    ISOUSB_KdPrint( DBGLVL_DEFAULT,("enter IsoUsb_StartDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

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

    ISOUSB_KdPrintCond( DBGLVL_DEFAULT,!urb, ("IsoUsb_StartDevice() FAILED ExAllocatePool() for URB\n"));

    if (urb) {

        siz = sizeof(USB_DEVICE_DESCRIPTOR);

        deviceDescriptor = ExAllocatePool(NonPagedPool,
                                          siz);

        ISOUSB_KdPrintCond( DBGLVL_DEFAULT, !deviceDescriptor, ("IsoUsb_StartDevice() FAILED 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 = IsoUsb_CallUSBD(DeviceObject, urb);

            ISOUSB_KdPrintCond( DBGLVL_DEFAULT, !NT_SUCCESS(ntStatus), ("IsoUsb_StartDevice() FAILED IsoUsb_CallUSBD(DeviceObject, urb)\n"));

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

                ISOUSB_KdPrint( DBGLVL_MEDIUM,("I82930 Device Descriptor:\n"));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("-------------------------\n"));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bLength %d\n", deviceDescriptor->bLength));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bDescriptorType 0x%x\n", deviceDescriptor->bDescriptorType));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bcdUSB 0x%x\n", deviceDescriptor->bcdUSB));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceClass 0x%x\n", deviceDescriptor->bDeviceClass));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceSubClass 0x%x\n", deviceDescriptor->bDeviceSubClass));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceProtocol 0x%x\n", deviceDescriptor->bDeviceProtocol));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bMaxPacketSize0 0x%x\n", deviceDescriptor->bMaxPacketSize0));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("idVendor 0x%x\n", deviceDescriptor->idVendor));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("idProduct 0x%x\n", deviceDescriptor->idProduct));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("bcdDevice 0x%x\n", deviceDescriptor->bcdDevice));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("iManufacturer 0x%x\n", deviceDescriptor->iManufacturer));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("iProduct 0x%x\n", deviceDescriptor->iProduct));
                ISOUSB_KdPrint( DBGLVL_MEDIUM,("iSerialNumber 0x%x\n", deviceDescriptor->iSerialNumber));
                ISOUSB_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) {
            ExFreePool(deviceDescriptor);
        }

        ExFreePool(urb);

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

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

        ISOUSB_KdPrintCond( DBGLVL_MEDIUM,!NT_SUCCESS(ntStatus),("IsoUsb_StartDevice IsoUsb_ConfigureDevice() FAILURE (%x)\n", ntStatus));
    }


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

    return ntStatus;
}


NTSTATUS
IsoUsb_RemoveDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

	Called from IsoUsb_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;

    ISOUSB_KdPrint( DBGLVL_DEFAULT,("enter IsoUsb_RemoveDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    RtlInitUnicodeString (&deviceLinkUnicodeString,
                          deviceExtension->DeviceLinkNameBuffer);

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

    //
    // Free device descriptor structure
    //

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


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

        ExFreePool( deviceExtension->PipeInfo );
    }

    //
    // Free up the UsbInterface structure
    //
    if (deviceExtension->UsbInterface) {
        ExFreePool(deviceExtension->UsbInterface);
    }

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


    ISOUSB_KdPrint( DBGLVL_DEFAULT,("exit IsoUsb_RemoveDevice() status = 0x%x\n", ntStatus ));

    return ntStatus;
}




NTSTATUS
IsoUsb_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;

    ISOUSB_KdPrint( DBGLVL_DEFAULT,("enter IsoUsb_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 = ExAllocatePool(NonPagedPool,
                         siz);

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

        ntStatus = IsoUsb_CallUSBD(DeviceObject, urb);

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

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


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

    deviceExtension->StopDeviceRequested = FALSE;

    ISOUSB_KdPrint( DBGLVL_DEFAULT,("exit IsoUsb_StopDevice() (%x)\n", ntStatus));

    return ntStatus;
}



NTSTATUS
IsoUsb_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一区二区三区免费野_久草精品视频
另类小说图片综合网| 色综合久久久久网| 亚洲欧美激情小说另类| 日韩美女一区二区三区四区| 成人影视亚洲图片在线| 久久成人免费网站| 亚洲成精国产精品女| www国产精品av| 6080午夜不卡| 欧美日韩国产一二三| 成人午夜激情在线| 精品一区二区三区不卡| 午夜欧美大尺度福利影院在线看| 国产精品福利一区二区三区| 精品免费一区二区三区| 欧美一二三在线| 欧美网站大全在线观看| 国产成a人亚洲精| 国产精品一区在线观看乱码| 国内国产精品久久| 麻豆精品久久精品色综合| 亚洲成人免费在线| 亚洲1区2区3区4区| 亚洲国产精品久久久久秋霞影院| 亚洲人xxxx| 亚洲欧美激情小说另类| 亚洲男同性视频| 亚洲综合色视频| 五月激情综合婷婷| 日韩成人午夜电影| 午夜久久久久久久久久一区二区| 日韩和欧美一区二区三区| 欧美a级一区二区| 国产精品1区二区.| 色激情天天射综合网| 色婷婷国产精品综合在线观看| 欧美日韩一级视频| 在线播放视频一区| 亚洲精品国产视频| 亚洲美女少妇撒尿| 日本麻豆一区二区三区视频| 精品夜夜嗨av一区二区三区| 成人免费不卡视频| 色狠狠综合天天综合综合| 51午夜精品国产| 国产欧美视频一区二区| 一区二区三区不卡在线观看| 日韩av一二三| 成人丝袜高跟foot| 欧美一区二区不卡视频| 久久久精品黄色| 一区二区三区免费在线观看| 日韩av不卡在线观看| 高清成人免费视频| 欧美日韩成人一区| 亚洲国产成人在线| 日韩电影在线看| 91视频国产资源| 久久一区二区三区四区| 一区二区在线电影| 国产成人在线视频免费播放| 欧美亚洲综合色| 亚洲国产精品精华液2区45| 亚洲v精品v日韩v欧美v专区| 国产精品一区二区三区乱码| 777亚洲妇女| 亚洲美女视频一区| 99麻豆久久久国产精品免费| 日韩一级免费观看| 一级精品视频在线观看宜春院| 成人一区二区三区在线观看| 日韩一级二级三级| 亚洲电影第三页| 91免费在线看| 国产精品久久久久久久久图文区| 免费观看日韩电影| 欧美色综合网站| 亚洲国产精品久久人人爱蜜臀| 99re热视频精品| 中文字幕欧美一区| 国产成人无遮挡在线视频| 精品久久一二三区| 久久精品国产精品亚洲红杏| 欧美一区二区人人喊爽| 免费人成在线不卡| 91精品国产乱| 久草在线在线精品观看| 日韩欧美一区中文| 国内成+人亚洲+欧美+综合在线| 欧美成人三级电影在线| 久久超级碰视频| 精品电影一区二区| 蜜臀av一区二区在线免费观看 | 亚洲成人av一区二区三区| 色婷婷久久久综合中文字幕| 亚洲午夜电影在线观看| 欧美在线一二三四区| 亚洲成a人片综合在线| 欧美巨大另类极品videosbest| 奇米影视在线99精品| 精品久久国产97色综合| 国产高清不卡一区| 中文字幕一区二区三区色视频| 97久久精品人人澡人人爽| 一区二区视频在线看| 538prom精品视频线放| 国产一区久久久| 综合久久国产九一剧情麻豆| 91天堂素人约啪| 午夜在线电影亚洲一区| 久久久久久免费网| 99精品视频在线播放观看| 亚洲人成网站色在线观看| 日韩一区二区在线看| 粉嫩绯色av一区二区在线观看| 亚洲一区二区三区视频在线播放| 精品成人私密视频| 色一情一伦一子一伦一区| 蜜臀国产一区二区三区在线播放| 国产欧美日韩视频在线观看| 欧美日韩一区在线| 国产成人在线视频免费播放| 亚洲曰韩产成在线| 国产欧美一区二区精品性| 91麻豆精品国产91久久久更新时间 | 国产精品911| 亚洲欧洲制服丝袜| 久久婷婷国产综合国色天香| 91视频com| 国产精品一区三区| 日韩黄色免费电影| 亚洲欧美日韩国产另类专区| 国产亚洲精品中文字幕| 欧美中文字幕一区二区三区亚洲| 国产伦精品一区二区三区免费 | 久久久久亚洲综合| 日韩一区二区在线观看视频| 色狠狠桃花综合| 成人h版在线观看| 国产成人在线免费| 久久精工是国产品牌吗| 亚洲与欧洲av电影| 亚洲欧美日韩人成在线播放| 国产清纯在线一区二区www| 4438成人网| 欧美少妇性性性| 欧洲精品一区二区三区在线观看| 不卡一区二区中文字幕| 成人永久aaa| 国产精品一区免费在线观看| 精品一区二区三区视频| 狠狠色丁香久久婷婷综合_中 | 成人高清免费观看| 国产+成+人+亚洲欧洲自线| 国产精品18久久久久久vr| 国模大尺度一区二区三区| 美国十次综合导航| 久久精品久久久精品美女| 美女被吸乳得到大胸91| 精品国产免费人成电影在线观看四季| 亚洲一区二区三区四区五区黄 | 欧美色精品在线视频| 日本韩国一区二区三区| 色婷婷国产精品久久包臀| 91老师国产黑色丝袜在线| 欧美午夜一区二区| 欧美日本不卡视频| 日韩免费成人网| 国产三级精品在线| 亚洲免费色视频| 日韩高清欧美激情| 国产精品综合久久| 色悠悠亚洲一区二区| 欧美精品成人一区二区三区四区| 日韩欧美高清在线| 久久久美女毛片| 一二三四区精品视频| 美女网站一区二区| 国产成人综合在线播放| 欧美在线观看一二区| 精品国产电影一区二区| 亚洲卡通动漫在线| 精品夜夜嗨av一区二区三区| 色综合久久天天综合网| 欧美在线免费视屏| www国产精品av| 久久综合国产精品| 日韩毛片在线免费观看| 亚洲电影你懂得| 成人精品亚洲人成在线| 欧美一级黄色片| 国产精品乱人伦| 精品在线亚洲视频| 欧美在线综合视频| 国产精品成人一区二区艾草| 久久www免费人成看片高清| 欧美亚洲综合一区| 中文字幕人成不卡一区| 国产乱子伦视频一区二区三区| 欧美日韩一区二区三区免费看|