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

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

?? isopnp.c

?? ARM2410的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 | 亚洲婷婷在线视频| 色综合天天在线| 亚洲狠狠爱一区二区三区| 欧美一区二区三区四区五区| 久久66热re国产| 中文字幕 久热精品 视频在线| 99精品在线观看视频| 日韩影视精彩在线| 国产女主播视频一区二区| 91极品视觉盛宴| 极品瑜伽女神91| 亚洲最大成人网4388xx| 欧美一区二区三区四区视频| 国产成人免费在线观看| 午夜影视日本亚洲欧洲精品| 国产校园另类小说区| 欧美午夜精品久久久久久超碰| 精品在线播放免费| 一级特黄大欧美久久久| 2019国产精品| 欧美日韩国产片| 北条麻妃一区二区三区| 捆绑调教美女网站视频一区| 中文字幕五月欧美| 日韩免费性生活视频播放| 色综合天天综合狠狠| 国内外成人在线| 日韩中文字幕不卡| 亚洲女性喷水在线观看一区| 国产人伦精品一区二区| 欧美区视频在线观看| 日本电影欧美片| 99综合影院在线| 成人三级伦理片| 国产成人av影院| 国产精品正在播放| 久久99蜜桃精品| 美国av一区二区| 午夜精品爽啪视频| 午夜精品一区二区三区免费视频| 亚洲男女毛片无遮挡| 国产精品免费丝袜| 欧美国产日韩亚洲一区| 中文字幕免费在线观看视频一区| 久久精品亚洲乱码伦伦中文| 欧美精品一区二| 久久久久久毛片| 中文字幕免费一区| 亚洲视频 欧洲视频| 国产精品电影一区二区| **欧美大码日韩| 一区二区三区鲁丝不卡| 亚洲bdsm女犯bdsm网站| 丝袜诱惑制服诱惑色一区在线观看| 亚洲国产wwwccc36天堂| 日韩av一区二| 国产老女人精品毛片久久| 国产精品亚洲第一区在线暖暖韩国| 国精品**一区二区三区在线蜜桃| 国产成人a级片| 欧美体内she精视频| 欧美一区欧美二区| 国产无一区二区| 亚洲欧美一区二区久久| 婷婷久久综合九色国产成人| 国内久久精品视频| 97久久精品人人爽人人爽蜜臀| 91福利精品第一导航| 正在播放一区二区| 国产精品免费丝袜| 首页欧美精品中文字幕| 国产一区二区日韩精品| 日本丶国产丶欧美色综合| 日韩一卡二卡三卡国产欧美| 国产精品看片你懂得| 日本视频一区二区三区| 国产99久久久精品| 91精品国产综合久久小美女| 国产精品女同一区二区三区| 男男gaygay亚洲| 91蜜桃视频在线| 久久综合久久久久88| 午夜伊人狠狠久久| 91丨porny丨蝌蚪视频| 久久综合国产精品| 五月婷婷激情综合| 99久久综合国产精品| 26uuu国产在线精品一区二区| 亚洲第一狼人社区| 不卡的av电影| 国产欧美一区二区精品久导航| 视频在线观看一区| 欧美日韩中文字幕一区二区| 国产欧美一区二区精品性色| 久久国产精品99精品国产| 欧美丝袜丝交足nylons| 亚洲日本一区二区| 99久久精品免费看| 欧美激情一二三区| 成人激情免费视频| 亚洲国产精品二十页| 国产美女视频一区| 欧美电视剧免费全集观看| 青青草伊人久久| 日韩欧美色综合网站| 图片区日韩欧美亚洲| 88在线观看91蜜桃国自产| 午夜国产精品影院在线观看| 3atv一区二区三区| 日本aⅴ亚洲精品中文乱码| 91精品在线麻豆| 久久99精品久久久久婷婷| 日韩欧美在线不卡| 老司机精品视频一区二区三区| 精品sm捆绑视频| 懂色av一区二区在线播放| 国产精品美女一区二区在线观看| voyeur盗摄精品| 亚洲福利视频一区| 91精品国产日韩91久久久久久| 久久精品国内一区二区三区| 婷婷丁香激情综合| 日韩一区二区在线观看视频| 韩日精品视频一区| 国产精品久久久久影视| 欧亚洲嫩模精品一区三区| 婷婷久久综合九色综合绿巨人| 2022国产精品视频| 99在线视频精品| 青青草97国产精品免费观看无弹窗版| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲另类中文字| 911精品产国品一二三产区| 国产一区二区三区观看| 亚洲欧美视频一区| 欧美tk—视频vk| 97国产一区二区| 精品无码三级在线观看视频| 一区二区三区四区在线播放| 欧美不卡在线视频| 在线观看日韩精品| 国产一区二区导航在线播放| 夜夜爽夜夜爽精品视频| 久久久精品免费网站| 91精品国产福利| 在线亚洲+欧美+日本专区| 国产精品综合av一区二区国产馆| 亚洲一区二区在线视频| 国产精品国产a级| 精品乱人伦一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 精品一区二区三区香蕉蜜桃 | 国产综合色在线| 亚洲高清三级视频| 亚洲欧美电影一区二区| 国产蜜臀97一区二区三区| 日韩一区二区三区在线观看 | 精品久久久久99| 538在线一区二区精品国产| 在线免费不卡视频| 99久久婷婷国产| 成人一区二区在线观看| 国产麻豆视频一区| 国产一区日韩二区欧美三区| 青青草伊人久久| 全国精品久久少妇| 午夜久久电影网| 亚洲chinese男男1069| 午夜精品福利一区二区三区av| 一区二区三区欧美亚洲| 亚洲毛片av在线| 亚洲综合丝袜美腿| 亚洲午夜精品在线| 首页欧美精品中文字幕| 青青草原综合久久大伊人精品| 美女网站在线免费欧美精品| 国产一区啦啦啦在线观看| 国产精品一区在线观看你懂的| 久久精品久久精品| 国产·精品毛片| 91香蕉视频mp4| 欧美日韩在线播| 久久久夜色精品亚洲| 国产精品国产自产拍高清av王其| 亚洲欧洲日韩av| 亚洲成a人v欧美综合天堂| 久久爱www久久做| av影院午夜一区| 欧美伦理视频网站| 精品国产伦一区二区三区免费| 国产精品欧美极品| 亚洲大片在线观看| 久久国产成人午夜av影院| 91美女在线看| 欧美大片顶级少妇| 中文字幕视频一区二区三区久| 性做久久久久久免费观看|