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

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

?? isopnp.c

?? softusb for atmel avr
?? C
?? 第 1 頁 / 共 3 頁
字號:

    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;

    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一区二区三区免费野_久草精品视频
91丨porny丨在线| 中文字幕精品在线不卡| 精品久久久三级丝袜| 久久婷婷综合激情| 日韩伦理电影网| 天天影视色香欲综合网老头| 蓝色福利精品导航| 成人app网站| 欧美高清www午色夜在线视频| 欧美成人女星排行榜| 国产精品美女久久久久久| 午夜视频在线观看一区二区三区| 激情久久五月天| 色综合天天综合给合国产| 欧美一级欧美三级| 国产精品久久久99| 欧美日韩和欧美的一区二区| 亚洲精品一区二区在线观看| 一区二区三区日本| 国产一区二区三区在线观看精品 | 91麻豆高清视频| 日韩欧美亚洲国产精品字幕久久久| 国产精品嫩草99a| 日本成人中文字幕| 色综合久久天天| 久久尤物电影视频在线观看| 亚洲国产中文字幕| 成人亚洲精品久久久久软件| 欧美日本国产一区| 中文字幕五月欧美| 韩国女主播成人在线| 欧美日韩久久一区| 自拍偷拍亚洲激情| 国产精品一线二线三线精华| 欧美日韩免费电影| 亚洲欧洲日产国码二区| 激情综合色播五月| 欧美剧在线免费观看网站| 成人免费在线播放视频| 国产一区二区毛片| 制服丝袜在线91| 亚洲最新视频在线观看| 成人中文字幕电影| 久久亚洲综合色| 老汉av免费一区二区三区| 欧美乱妇15p| 亚洲黄色在线视频| eeuss影院一区二区三区| 久久久精品国产99久久精品芒果 | 欧美日韩一区二区在线观看| 国产精品国产三级国产普通话99 | 一区二区三区四区精品在线视频| 久久9热精品视频| 欧美久久久久免费| 亚洲与欧洲av电影| 91麻豆精品在线观看| 中文字幕乱码久久午夜不卡| 国产真实乱对白精彩久久| 91精品国产91久久久久久一区二区| 一区二区三区四区激情| 99久久精品免费| 国产精品国产成人国产三级| 国产成人啪午夜精品网站男同| 欧美不卡视频一区| 激情欧美一区二区| 日韩欧美一区二区免费| 全国精品久久少妇| 91精品国产综合久久精品麻豆| 亚洲自拍都市欧美小说| 色婷婷av久久久久久久| 中文成人av在线| 成人美女在线观看| 综合久久综合久久| 91在线视频播放| 日韩美女啊v在线免费观看| www.色综合.com| 亚洲男人的天堂av| 91搞黄在线观看| 亚洲一级二级三级| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲欧洲日韩综合一区二区| www.色精品| 亚洲精品欧美专区| 欧美网站大全在线观看| 丝袜美腿亚洲色图| 日韩一区二区在线观看| 九色综合狠狠综合久久| 精品粉嫩超白一线天av| 国产麻豆视频精品| 国产精品视频你懂的| 91丨porny丨最新| 亚洲成人tv网| 欧美va日韩va| 成人网在线播放| 亚洲乱码日产精品bd| 欧美日韩一区二区三区视频| 日韩电影在线免费观看| 精品欧美一区二区久久| 国产69精品久久久久777| **欧美大码日韩| 欧美亚洲动漫另类| 美女网站一区二区| 一区二区三区国产精华| 亚洲午夜在线电影| 欧美一区二区三区四区视频| 成人精品gif动图一区| www精品美女久久久tv| 国产日韩欧美在线一区| 精品剧情在线观看| 国产福利一区二区三区视频在线 | 91麻豆福利精品推荐| 亚洲一区二区三区四区在线免费观看| 欧美日韩一区不卡| 久久av中文字幕片| 中文字幕制服丝袜一区二区三区| 欧美在线观看你懂的| 久久国产人妖系列| 亚洲女厕所小便bbb| 欧美日韩免费高清一区色橹橹| 美日韩一级片在线观看| 1区2区3区精品视频| 欧美一三区三区四区免费在线看| 国产成人免费视频网站| 亚洲午夜电影在线| 国产亚洲制服色| 欧美日韩国产精品自在自线| 国产一区二区三区四区五区入口| 亚洲欧美国产77777| 日韩视频一区二区三区在线播放 | 亚洲欧美自拍偷拍| 欧美成人bangbros| 91免费看视频| 国产毛片精品视频| 天堂蜜桃91精品| 中文字幕av一区 二区| 欧美丰满嫩嫩电影| 91小视频免费观看| 国产一区二区在线看| 亚洲在线观看免费| 国产精品久久久久久户外露出| 日韩欧美一区二区免费| 欧美在线啊v一区| 粉嫩一区二区三区性色av| 日韩国产在线一| 亚洲男人都懂的| 国产三级欧美三级日产三级99 | 天堂资源在线中文精品| 综合自拍亚洲综合图不卡区| 欧美xxxxxxxx| 在线播放亚洲一区| 欧美伊人久久大香线蕉综合69| 成人午夜精品一区二区三区| 激情小说亚洲一区| 青青草97国产精品免费观看无弹窗版| 亚洲激情成人在线| 国产精品久久看| 久久精品在线观看| 精品国产一区二区三区av性色 | 一区二区高清免费观看影视大全| 久久精品日产第一区二区三区高清版 | 欧美日韩国产成人在线91| 波多野结衣的一区二区三区| 国内成人免费视频| 日本欧美肥老太交大片| 亚洲一区二区三区自拍| 亚洲色欲色欲www在线观看| 久久精品亚洲乱码伦伦中文| 日韩三级av在线播放| 欧美另类变人与禽xxxxx| 日本国产一区二区| 91视视频在线观看入口直接观看www | 精品免费国产二区三区| 欧美一区三区四区| 欧美精品xxxxbbbb| 欧美精品在线观看一区二区| 日本高清无吗v一区| 日本韩国一区二区| 欧美在线观看视频一区二区 | 亚洲成av人片一区二区三区| 一区二区久久久久| 亚洲自拍偷拍图区| 亚洲国产精品一区二区久久| 亚洲愉拍自拍另类高清精品| 亚洲永久免费av| 午夜一区二区三区视频| 午夜国产精品一区| 婷婷久久综合九色国产成人| 亚洲第一精品在线| 视频一区在线视频| 美日韩一区二区| 国产一区二区久久| 高潮精品一区videoshd| 成人永久免费视频| 91色九色蝌蚪| 欧美色网站导航| 91精品国产入口| 欧美成人官网二区| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品日韩精品欧美在线| 亚洲欧洲国产日韩|