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

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

?? isopnp.c

?? Pc板與DNW的USB驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
            ntStatus = IoCallDriver (deviceExtension->TopOfStackDeviceObject, Irp);
            IsoUsb_DecrementIoCount(DeviceObject);
            return ntStatus;
        }

		// Reset this flag so new IOCTL and IO Irp processing will be re-enabled
        deviceExtension->RemoveDeviceRequested = FALSE;

        break; // end, case IRP_MN_CANCEL_REMOVE_DEVICE

    case IRP_MN_REMOVE_DEVICE:

		// The PnP Manager uses this IRP to direct drivers to remove a device. 
		// For a "polite" device removal, the PnP Manager sends an 
		// IRP_MN_QUERY_REMOVE_DEVICE prior to the remove IRP. In this case, 
		// the device is in the remove-pending state when the remove IRP arrives.
		// For a surprise-style device removal ( i.e. sudden cord yank ), 
		// the physical device has already been removed so the PnP Manager sends 
		// the remove IRP without a prior query-remove. A device can be in any state
		// when it receives a remove IRP as a result of a surprise-style removal.

        // match the inc at the begining of the dispatch routine
        IsoUsb_DecrementIoCount(DeviceObject);

		//
        // Once DeviceRemoved is set no new IOCTL or read/write irps will be passed
        // down the stack to lower drivers; all will be quickly failed
		//
        deviceExtension->DeviceRemoved = TRUE;

		// If any pipes are still open, call USBD with URB_FUNCTION_ABORT_PIPE
		// This call will also close the pipes; if any user close calls get through,
		// they will be noops
		IsoUsb_AbortPipes( DeviceObject );




		// We don't explicitly wait for the below driver to complete, but just make
		// the call and go on, finishing cleanup
        IoCopyCurrentIrpStackLocationToNext(Irp);

        Irp->IoStatus.Status = STATUS_SUCCESS;
        ntStatus = IoCallDriver(stackDeviceObject,
                                Irp);
        //
        // The final decrement to device extension PendingIoCount == 0
		// will set deviceExtension->RemoveEvent, enabling device removal.
		// If there is no pending IO at this point, the below decrement will be it.
        //
        IsoUsb_DecrementIoCount(DeviceObject);


        // wait for any io request pending in our driver to
        // complete for finishing the remove

        KeWaitForSingleObject(
                    &deviceExtension->RemoveEvent,
                    Suspended,
                    KernelMode,
                    FALSE,
                    NULL);

        //
        // Delete the link and FDO we created
        //
        IsoUsb_RemoveDevice(DeviceObject);

        ISOUSB_KdPrint( DBGLVL_DEFAULT,("IsoUsb_ProcessPnPIrp() Detaching from %08X\n",
                         deviceExtension->TopOfStackDeviceObject));

        IoDetachDevice(deviceExtension->TopOfStackDeviceObject);

        ISOUSB_KdPrint( DBGLVL_DEFAULT,("IsoUsb_ProcessPnPIrp() Deleting %08X\n",
                         DeviceObject));

        IoDeleteDevice (DeviceObject);

        return ntStatus; // end, case IRP_MN_REMOVE_DEVICE


    default:
        ISOUSB_KdPrint( DBGLVL_MAXIMUM,("IsoUsb_ProcessPnPIrp() Minor PnP IOCTL not handled\n"));
    } /* case MinorFunction  */


    if (!NT_SUCCESS(ntStatus)) {

		// if anything went wrong, return failure  without passing Irp down
        Irp->IoStatus.Status = ntStatus;
		IoCompleteRequest (Irp,
						   IO_NO_INCREMENT
						   );

		IsoUsb_DecrementIoCount(DeviceObject);

		ISOUSB_KdPrint( DBGLVL_MAXIMUM,("IsoUsb_ProcessPnPIrp() Exit IsoUsb_ProcessPnPIrp FAILURE %x\n", ntStatus));
		return ntStatus;
    }

    IoCopyCurrentIrpStackLocationToNext(Irp);

    //
    // All PNP_POWER messages get passed to the TopOfStackDeviceObject
    // we were given in PnPAddDevice
    //

    ISOUSB_KdPrint( DBGLVL_MAXIMUM,("IsoUsb_ProcessPnPIrp() Passing PnP Irp down, status = %x\n", ntStatus));

    ntStatus = IoCallDriver(stackDeviceObject,
                            Irp);

    IsoUsb_DecrementIoCount(DeviceObject);

    ISOUSB_KdPrint( DBGLVL_MAXIMUM,("IsoUsb_ProcessPnPIrp() Exit IsoUsb_ProcessPnPIrp %x\n", ntStatus));

    return ntStatus;
}


NTSTATUS
IsoUsb_PnPAddDevice(
    IN PDRIVER_OBJECT DriverObject,
    IN PDEVICE_OBJECT PhysicalDeviceObject
    )
/*++

Routine Description:

    This routine is called to create and initialize our Functional Device Object (FDO).
    For monolithic drivers, this is done in DriverEntry(), but Plug and Play devices
    wait for a PnP event

Arguments:

    DriverObject - pointer to the driver object for this instance of IsoUsb

    PhysicalDeviceObject - pointer to a device object created by the bus

Return Value:

    STATUS_SUCCESS if successful,
    STATUS_UNSUCCESSFUL otherwise

--*/
{
    NTSTATUS                ntStatus = STATUS_SUCCESS;
    PDEVICE_OBJECT          deviceObject = NULL;
    PDEVICE_EXTENSION       deviceExtension;
    USBD_VERSION_INFORMATION versionInformation;
    ULONG i;

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

    //
    // create our funtional device object (FDO)
    //

    ntStatus =
        IsoUsb_CreateDeviceObject(DriverObject, PhysicalDeviceObject, &deviceObject);

    if (NT_SUCCESS(ntStatus)) {
        deviceExtension = deviceObject->DeviceExtension;

        deviceObject->Flags &= ~DO_DEVICE_INITIALIZING;

        //
        // we support direct io for read/write
        //
        deviceObject->Flags |= DO_DIRECT_IO;


        //Set this flag causes the driver to not receive a IRP_MN_STOP_DEVICE
        //during suspend and also not get an IRP_MN_START_DEVICE during resume.  
        //This is neccesary because during the start device call, 
        // the GetDescriptors() call  will be failed by the USB stack.
        deviceObject->Flags |= DO_POWER_PAGABLE;

        // initialize our device extension
        //
        // remember the Physical device Object
        //
        deviceExtension->PhysicalDeviceObject=PhysicalDeviceObject;

        //
        // Attach to the PDO
        //

        deviceExtension->TopOfStackDeviceObject =
            IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject);

        // Get a copy of the physical device's capabilities into a
        // DEVICE_CAPABILITIES struct in our device extension;
        // We are most interested in learning which system power states
        // are to be mapped to which device power states for handling
        // IRP_MJ_SET_POWER Irps.
        IsoUsb_QueryCapabilities(PhysicalDeviceObject,
                                 &deviceExtension->DeviceCapabilities);


		// We want to determine what level to auto-powerdown to; This is the lowest
		//  sleeping level that is LESS than D3; 
		// If all are set to D3, auto powerdown/powerup will be disabled.

        deviceExtension->PowerDownLevel = PowerDeviceUnspecified; // init to disabled
        for (i=PowerSystemSleeping1; i<= PowerSystemSleeping3; i++) {

			if ( deviceExtension->DeviceCapabilities.DeviceState[i] < PowerDeviceD3 )
				deviceExtension->PowerDownLevel = deviceExtension->DeviceCapabilities.DeviceState[i];
        }

#if DBG

        // May want override auto power-down level from registry;
        // ( CurrentControlSet\Services\IsoUsb\Parameters )
		// Setting to 0 or 1 in registry disables auto power-down
        IsoUsb_GetRegistryDword( ISOUSB_REGISTRY_PARAMETERS_PATH,
                                         L"PowerDownLevel",
                                         &(deviceExtension->PowerDownLevel) );



        //
        // display the device  caps
        //

        ISOUSB_KdPrint( DBGLVL_MEDIUM,(" >>>>>> DeviceCaps\n"));
        ISOUSB_KdPrint( DBGLVL_MEDIUM,(" SystemWake = %s\n",
            ISOUSB_StringForSysState( deviceExtension->DeviceCapabilities.SystemWake ) ));
        ISOUSB_KdPrint( DBGLVL_MEDIUM,(" DeviceWake = %s\n",
            ISOUSB_StringForDevState( deviceExtension->DeviceCapabilities.DeviceWake) ));

        for (i=PowerSystemUnspecified; i< PowerSystemMaximum; i++) {

            ISOUSB_KdPrint( DBGLVL_MEDIUM,(" Device State Map: sysstate %s = devstate %s\n",
                 ISOUSB_StringForSysState( i ),
                 ISOUSB_StringForDevState( deviceExtension->DeviceCapabilities.DeviceState[i] ) ));
        }
        ISOUSB_KdPrint( DBGLVL_MEDIUM,(" <<<<<<<<DeviceCaps\n"));
#endif
        // We keep a pending IO count ( extension->PendingIoCount )  in the device extension.
        // The first increment of this count is done on adding the device.
        // Subsequently, the count is incremented for each new IRP received and
        // decremented when each IRP is completed or passed on.

        // Transition to 'one' therefore indicates no IO is pending and signals
        // deviceExtension->NoPendingIoEvent. This is needed for processing
        // IRP_MN_QUERY_REMOVE_DEVICE

        // Transition to 'zero' signals an event ( deviceExtension->RemoveEvent )
        // to enable device removal. This is used in processing for IRP_MN_REMOVE_DEVICE
        //
        IsoUsb_IncrementIoCount(deviceObject);

    }

    USBD_GetUSBDIVersion(&versionInformation);



    if( NT_SUCCESS( ntStatus ) )  
    {
        NTSTATUS actStat;
        // try to power down device until IO actually requested
        actStat = IsoUsb_SelfSuspendOrActivate( deviceObject, TRUE );
    }


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

    return ntStatus;
}


NTSTATUS
IsoUsb_StartDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本中文字幕不卡| 麻豆国产一区二区| 国产丝袜欧美中文另类| 日韩亚洲欧美一区二区三区| 欧美日韩高清在线| 欧美日本精品一区二区三区| 在线播放视频一区| 欧美精品一区二| 久久久精品免费观看| 久久精品男人的天堂| 国产精品第13页| 亚洲精品五月天| 亚洲成人1区2区| 午夜电影网亚洲视频| 老汉av免费一区二区三区| 激情五月婷婷综合| 北岛玲一区二区三区四区| 在线观看成人小视频| 欧美日韩一区二区在线视频| 日韩一区二区免费视频| 国产欧美精品一区二区三区四区 | 91免费看`日韩一区二区| 91在线观看美女| 91精品在线免费| 国产午夜一区二区三区| 亚洲欧美综合色| 三级精品在线观看| 国产精品一区2区| 欧美亚洲动漫精品| 精品粉嫩aⅴ一区二区三区四区| 日本一区二区三区电影| 一区二区三区中文字幕电影 | 在线不卡一区二区| 久久美女高清视频| 亚洲成人免费影院| 粉嫩嫩av羞羞动漫久久久| 欧美中文字幕一区二区三区 | 亚洲人123区| 美女性感视频久久| 91亚洲精华国产精华精华液| 日韩午夜激情电影| 国产精品国产成人国产三级| 日本伊人午夜精品| 99久久亚洲一区二区三区青草| 91精品欧美久久久久久动漫| 国产精品天干天干在线综合| 青青草原综合久久大伊人精品 | 日韩精品一区二区三区四区视频| 中文字幕在线一区免费| 国产综合色在线| 欧美狂野另类xxxxoooo| 日韩毛片在线免费观看| 国产一区二区三区视频在线播放| 欧美绝品在线观看成人午夜影视| 国产精品入口麻豆九色| 国内外精品视频| 欧美一级精品在线| 亚洲资源中文字幕| 99re在线精品| 国产精品色噜噜| 精品一区精品二区高清| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲精品国产品国语在线app| 国产一区二区视频在线| 91精品免费在线观看| 亚洲成人自拍网| 欧美在线视频不卡| 一区二区三区蜜桃| 91亚洲精品一区二区乱码| 国产欧美日韩麻豆91| 成人网在线免费视频| 国产欧美综合色| 成人高清视频在线| 国产欧美日韩在线视频| 国产美女精品一区二区三区| 日韩精品专区在线影院观看| 久久er精品视频| 日韩欧美的一区| 精彩视频一区二区三区| 久久蜜桃av一区精品变态类天堂| 激情久久久久久久久久久久久久久久 | 色综合婷婷久久| 亚洲精品一二三区| 欧美美女一区二区| 午夜精品视频在线观看| 欧美一区二区三区免费大片| 美女视频免费一区| 久久久一区二区| aaa国产一区| 亚洲一区二区三区在线播放| 在线不卡的av| 国产一区欧美一区| 国产精品传媒视频| 欧美性生活久久| 喷白浆一区二区| 中文字幕+乱码+中文字幕一区| 成人黄色小视频在线观看| 亚洲三级电影网站| 欧美一区二区黄色| 国产91丝袜在线观看| 亚洲高清一区二区三区| 精品久久久久久最新网址| 成人免费看黄yyy456| 亚洲一级在线观看| 久久久久久久久久久久电影| 色综合久久天天| 免费在线观看精品| 国产精品丝袜黑色高跟| 欧美精品一二三区| 国产成人综合在线| 五月激情六月综合| 久久精品人人做| 欧美喷潮久久久xxxxx| 粉嫩av一区二区三区| 日本亚洲免费观看| 国产精品福利一区| 欧美va亚洲va在线观看蝴蝶网| 不卡av在线网| 精品伊人久久久久7777人| 一区二区三区日韩欧美精品| 久久久午夜精品理论片中文字幕| 色综合天天综合网天天狠天天| 黄页视频在线91| 性做久久久久久久免费看| 国产精品久久久久久户外露出| 欧美乱妇一区二区三区不卡视频 | 亚洲日本成人在线观看| 欧美sm美女调教| 欧美日韩国产一区二区三区地区| 成人黄色国产精品网站大全在线免费观看 | 成人97人人超碰人人99| 精品中文字幕一区二区小辣椒| 亚洲国产裸拍裸体视频在线观看乱了| 日本一区二区高清| 久久精品视频网| 精品入口麻豆88视频| 欧美日韩一二区| 色婷婷av一区二区三区之一色屋| 国产成人在线影院| 国内精品免费**视频| 裸体一区二区三区| 亚洲超丰满肉感bbw| 亚洲午夜在线观看视频在线| 日韩码欧中文字| 国产精品理论片| 久久久99精品免费观看不卡| 亚洲精品在线观| 欧美一区二区二区| 在线综合+亚洲+欧美中文字幕| 在线区一区二视频| 欧美亚洲综合色| 在线观看国产日韩| 欧美日韩亚洲综合一区二区三区| 欧美吻胸吃奶大尺度电影| 91影院在线观看| 色欧美乱欧美15图片| 欧美中文字幕一二三区视频| 欧美在线制服丝袜| 欧美精品高清视频| 精品国产99国产精品| 久久久久高清精品| 中文字幕一区三区| 一区二区三区美女视频| 亚洲网友自拍偷拍| 免费在线观看一区| 韩国三级在线一区| 成人黄色国产精品网站大全在线免费观看| 国产69精品久久99不卡| 色婷婷久久99综合精品jk白丝| 欧美午夜精品电影| 欧美大尺度电影在线| 欧美精品一区视频| 中文字幕中文字幕一区二区| 樱花影视一区二区| 免费人成在线不卡| 大白屁股一区二区视频| 一本色道久久加勒比精品| 欧美美女直播网站| 精品不卡在线视频| 亚洲激情五月婷婷| 久久99最新地址| 一本色道久久综合精品竹菊| 91精品国产综合久久久蜜臀图片| 精品久久国产字幕高潮| 国产精品二区一区二区aⅴ污介绍| 亚洲香蕉伊在人在线观| 国产盗摄精品一区二区三区在线| 一本色道久久加勒比精品| 在线成人免费观看| 亚洲欧美在线aaa| 免费看精品久久片| 波多野结衣中文字幕一区| 欧美日韩国产高清一区二区三区| 国产欧美一区二区精品婷婷| 午夜激情综合网| 不卡高清视频专区| 精品国产乱码久久久久久久| 一区二区不卡在线播放| 国产精品亚洲第一区在线暖暖韩国 | 欧美日韩中字一区|