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

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

?? usblspwr.c

?? 來自微軟的usb2.0開發包,加速USB驅動開發
?? C
?? 第 1 頁 / 共 3 頁
字號:

        // Trigger Self-requested power irp completed event;
        //  The caller is waiting for completion
        KeSetEvent(&deviceExtension->SelfRequestedPowerIrpEvent, 1, FALSE);
    }

    USBLS120_DecrementIoCount(deviceObject);

    USBLS120_KdPrintCond( DBGLVL_HIGH, !NT_SUCCESS(ntStatus),("Exit USBLS120_PoSelfRequestCompletion() FAILED, ntStatus = 0x%x\n", ntStatus ));
   
    return ntStatus;
}


BOOLEAN
USBLS120_SetDevicePowerState(
    IN PDEVICE_OBJECT DeviceObject,
    IN DEVICE_POWER_STATE DeviceState
    )
/*++

Routine Description:

    This routine is called when An IRP_MN_SET_POWER of type 'DevicePowerState'
    has been received by USBLS120_ProcessPowerIrp().


Arguments:

    DeviceObject - Pointer to the device object for the class device.

    DeviceState - Device specific power state to set the device in to.


Return Value:

    For requests to DeviceState D0 ( fully on ), returns TRUE to signal caller 
    that we must set a completion routine and finish there.

--*/
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PDEVICE_EXTENSION deviceExtension;
    BOOLEAN fRes = FALSE;

    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    switch (DeviceState) {
    case PowerDeviceD3:

        //
        // Device will be going OFF, 
        // TODO: add any needed device-dependent code to save state here.
        //  ( We have nothing to do in this sample )
        //

        USBLS120_KdPrint( DBGLVL_MEDIUM,("USBLS120_SetDevicePowerState() PowerDeviceD3 (OFF)\n"));

        deviceExtension->CurrentDevicePowerState = DeviceState;
        break;

    case PowerDeviceD1:
    case PowerDeviceD2:
        //
        // power states D1,D2 translate to USB suspend

        USBLS120_KdPrint( DBGLVL_MEDIUM,("USBLS120_SetDevicePowerState()  %s\n",
            USBLS120_StringForDevState(DeviceState) ));

        deviceExtension->CurrentDevicePowerState = DeviceState;
        break;


    case PowerDeviceD0:
        USBLS120_KdPrint( DBGLVL_MEDIUM,("USBLS120_SetDevicePowerState() PowerDeviceD0 (ON)\n"));

        // We'll need to finish the rest in the completion routine;
        //   signal caller we're going to D0 and will need to set a completion routine
        fRes = TRUE;

        // Caller will pass on to PDO ( Physical Device object )
        break;


    default:
        USBLS120_KdPrint( DBGLVL_MEDIUM,(" Bogus DeviceState = %x\n", DeviceState));
    }

    return fRes;
}



NTSTATUS
USBLS120_QueryCapabilities(
    IN PDEVICE_OBJECT PdoDeviceObject,
    IN PDEVICE_CAPABILITIES DeviceCapabilities
    )

/*++

Routine Description:

    This routine generates an internal IRP from this driver to the PDO
    to obtain information on the Physical Device Object's capabilities.
    We are most interested in learning which system power states
    are to be mapped to which device power states for honoring IRP_MJ_SET_POWER Irps.

    This is a blocking call which waits for the IRP completion routine
    to set an event on finishing.

Arguments:

    DeviceObject        - Physical DeviceObject for this USB controller.

Return Value:

    NTSTATUS value from the IoCallDriver() call.

--*/

{
    PIO_STACK_LOCATION nextStack;
    PIRP irp;
    NTSTATUS ntStatus;
    KEVENT event;


    // This is a DDK-defined DBG-only macro that ASSERTS we are not running pageable code
    // at higher than APC_LEVEL.
    PAGED_CODE();


    // Build an IRP for us to generate an internal query request to the PDO
    irp = IoAllocateIrp(PdoDeviceObject->StackSize, FALSE);

    if (!irp) {
        return STATUS_INSUFFICIENT_RESOURCES;
    }


    // IoGetNextIrpStackLocation gives a higher level driver access to the next-lower
    // driver's I/O stack location in an IRP so the caller can set it up for the lower driver.
    nextStack = IoGetNextIrpStackLocation(irp);
    USBLS120_ASSERT(nextStack != NULL);
    nextStack->MajorFunction= IRP_MJ_PNP;
    nextStack->MinorFunction= IRP_MN_QUERY_CAPABILITIES;

    // init an event to tell us when the completion routine's been called
    KeInitializeEvent(&event, NotificationEvent, FALSE);

    // Set a completion routine so it can signal our event when
    //  the next lower driver is done with the Irp
    IoSetCompletionRoutine(
        irp,
        USBLS120_IrpCompletionRoutine,
        &event,  // pass the event as Context to completion routine
        TRUE,    // invoke on success
        TRUE,    // invoke on error
        TRUE     // invoke on cancellation of the Irp
        );

    // set our pointer to the DEVICE_CAPABILITIES struct
    nextStack->Parameters.DeviceCapabilities.Capabilities = DeviceCapabilities;

    ntStatus = IoCallDriver(PdoDeviceObject, irp);

    USBLS120_KdPrint( DBGLVL_MEDIUM,(" USBLS120_QueryCapabilities() ntStatus from IoCallDriver to PCI = 0x%x\n", ntStatus));

    if (ntStatus == STATUS_PENDING) {
       // wait for irp to complete

       KeWaitForSingleObject(
           &event,
           Suspended,
           KernelMode,
           FALSE,
           NULL
           );
    }

    // failed? this is probably a bug
    USBLS120_KdPrintCond( DBGLVL_DEFAULT,(!NT_SUCCESS(ntStatus)), ("USBLS120_QueryCapabilities() failed\n"));

    IoFreeIrp(irp);

    return ntStatus;
}



BOOLEAN
USBLS120_CanAcceptIoRequests(
    IN PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

  Check device extension status flags; 

     Can't accept a new io request if device:
      1) is removed, 
      2) has never been started, 
      3) is stopped,
      4) has a remove request pending, or
      5) has a stop device pending


Arguments:

    DeviceObject - pointer to the device object for this instance of the 82930
                    device.


Return Value:

    return TRUE if can accept new io requests, else FALSE

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    BOOLEAN fCan = FALSE;

    deviceExtension = DeviceObject->DeviceExtension;

    //flag set when processing IRP_MN_REMOVE_DEVICE
    if ( !deviceExtension->DeviceRemoved &&
         // device must be started( enabled )
         deviceExtension->DeviceStarted &&
         // flag set when driver has answered success to IRP_MN_QUERY_REMOVE_DEVICE
         !deviceExtension->RemoveDeviceRequested &&
         // flag set when driver has answered success to IRP_MN_QUERY_STOP_DEVICE
         !deviceExtension->StopDeviceRequested ){
         fCan = TRUE;
    }

    USBLS120_KdPrintCond( DBGLVL_MAXIMUM, !fCan, ("**** FALSE return from USBLS120_CanAcceptIoRequests()!\n"));

    return fCan;
}





NTSTATUS
USBLS120_PdoProcessPowerIrp(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    )
/*++

Routine Description:

    This is our PDO's dispatch table function for IRP_MJ_POWER.
    It processes the Power IRPs sent to the PDO for this device.

Arguments:

    DeviceObject - pointer to our device object (FDO)

    Irp          - pointer to an I/O Request Packet

Return Value:

    NT status code

--*/
{

    PIO_STACK_LOCATION irpStack;
    NTSTATUS NtStatus = STATUS_SUCCESS;
    PDEVICE_EXTENSION deviceExtension;
    BOOLEAN fGoingToD0 = FALSE;
    POWER_STATE sysPowerState, desiredDevicePowerState;

    USBLS120_KdPrint( DBGLVL_DEFAULT,(" USBLS120_PdoProcessPowerIrp() IRP_MJ_POWER\n"));

    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
    irpStack = IoGetCurrentIrpStackLocation (Irp);
    USBLS120_IncrementIoCount(DeviceObject);

    switch (irpStack->MinorFunction)
    {
   
        case IRP_MN_SET_POWER:

            USBLS120_KdPrint(1, ("IRP_MN_SET_POWER pdo\n"));
            NtStatus = Irp->IoStatus.Status = USBLS120_PdoSetPower(DeviceObject, Irp);
            break;


        case IRP_MN_WAIT_WAKE:

            USBLS120_KdPrint(1,("IRP_MN_WAIT_WAKE pdo\n"));
            NtStatus = Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
            break;


        case IRP_MN_QUERY_POWER:

            USBLS120_KdPrint(1,("IRP_MN_QUERY_POWER pdo\n"));
            NtStatus = Irp->IoStatus.Status = STATUS_SUCCESS;
            break;


        default:

            NtStatus = Irp->IoStatus.Status;                      
            USBLS120_KdPrint(1,("POWER IRP IRP_MN_[%d] not handled\n", irpStack->MinorFunction));
    }

    
    PoStartNextPowerIrp(Irp);

    USBLS120_DecrementIoCount(DeviceObject);

    USBLS120_KdPrint( DBGLVL_MEDIUM,  ( "Exit USBLS120_PdoProcessPowerIrp()  NtStatus = 0x%x\n", NtStatus ) );
    return NtStatus;
}



NTSTATUS
USBLS120_PdoSetPower(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
 /* ++
  *
  * Description:
  *
  *     Handles a IRP_MN_SET_POWER for our child PDO
  *
  * Arguments:
  *
  * Return:
  *
  * NTSTATUS
  *
  * -- */
{
    NTSTATUS ntStatus;
    PIO_STACK_LOCATION irpStack;
    PDEVICE_EXTENSION DeviceExtension;

    irpStack = IoGetCurrentIrpStackLocation(Irp);
    DeviceExtension = DeviceObject->DeviceExtension;

    USBLS120_KdPrint(1,("USBLS120_PdoSetPower pdo\n"));

    ntStatus = STATUS_SUCCESS;

    switch (irpStack->Parameters.Power.Type)
    {
        case SystemPowerState:
            USBLS120_KdPrint(1,("SystemPowerState pdo\n"));
            break;


        case DevicePowerState:
            USBLS120_KdPrint(1,("DevicePowerState pdo\n"));
            switch (irpStack->Parameters.Power.State.DeviceState)
            {
                case PowerDeviceD0:
                case PowerDeviceD1:
                case PowerDeviceD2:
                case PowerDeviceD3:
                    break;

                default:
                    USBLS120_KdPrint(1,("Bad Power State\n"));
                    break;
            }
            break;


        default:
            ntStatus = STATUS_INVALID_PARAMETER;
    }

    return ntStatus;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品久久人人爱| 国产三级精品三级| 在线视频欧美精品| 成人av午夜影院| 男女激情视频一区| 九九视频精品免费| 国产综合久久久久久久久久久久| 极品少妇xxxx精品少妇| 国产麻豆视频精品| 成人黄色小视频| 97精品视频在线观看自产线路二| 91年精品国产| 欧美日韩国产综合视频在线观看| 精品婷婷伊人一区三区三| 欧美日高清视频| 日韩一区二区在线观看视频 | 国产精品久久三| 中文字幕欧美一区| 亚洲欧美国产高清| 亚洲国产精品二十页| 樱桃国产成人精品视频| 免费成人av在线| 丁香婷婷综合激情五月色| 色综合中文字幕| 日韩限制级电影在线观看| 国产视频一区在线播放| 亚洲精品成人精品456| 日韩av一级电影| 成人国产免费视频| 欧美日韩成人综合| 精品国产亚洲一区二区三区在线观看| 中文字幕乱码亚洲精品一区| 亚洲综合一区二区精品导航| 国产一区 二区| 欧美中文字幕久久| 久久婷婷综合激情| 亚洲成人免费看| 丁香一区二区三区| 91精品国产一区二区| 亚洲国产精品激情在线观看| 性做久久久久久久久| 成人av免费观看| 精品国产一区a| 天天av天天翘天天综合网| 成人深夜福利app| 日韩情涩欧美日韩视频| 亚洲精品伦理在线| 成人午夜av影视| 欧美一区二区三区电影| 一区二区三区**美女毛片| 国产精品一区2区| 日韩一级黄色片| 亚洲成人免费观看| 91国产视频在线观看| 欧美高清在线一区| 久久69国产一区二区蜜臀| 这里只有精品99re| 一区二区成人在线视频| 91丨九色porny丨蝌蚪| 日本一区二区三区高清不卡| 免费的成人av| 欧美一级日韩免费不卡| 亚洲综合另类小说| 一本色道a无线码一区v| 欧美激情综合在线| 高清不卡一二三区| 欧美国产欧美亚州国产日韩mv天天看完整| 日本vs亚洲vs韩国一区三区二区 | 欧美伦理电影网| 亚洲女同一区二区| 99国产精品久久久久久久久久 | 成人免费精品视频| 久久久久国产精品厨房| 韩国av一区二区三区在线观看| 欧美成人精品3d动漫h| 裸体健美xxxx欧美裸体表演| 日韩视频不卡中文| 麻豆91免费看| 国产亚洲一区二区三区| 国产一区亚洲一区| 国产亚洲精品中文字幕| 成人激情av网| 亚洲精品免费视频| 7777精品伊人久久久大香线蕉最新版| 石原莉奈在线亚洲三区| 欧美一区二区人人喊爽| 国模一区二区三区白浆| 久久久精品黄色| 99re在线精品| 日韩精品一级中文字幕精品视频免费观看 | 久久精品国产99国产| 久久精品在线免费观看| 不卡av在线免费观看| 一二三区精品视频| 日韩视频永久免费| 顶级嫩模精品视频在线看| 亚洲码国产岛国毛片在线| 在线不卡一区二区| 激情文学综合丁香| 亚洲欧美日韩电影| 日韩免费高清av| 成人av网站免费观看| 日韩制服丝袜av| 国产婷婷色一区二区三区在线| 日本道色综合久久| 精品在线观看免费| 成人欧美一区二区三区在线播放| 欧美精品丝袜久久久中文字幕| 激情文学综合网| 亚洲综合男人的天堂| 亚洲精品在线免费观看视频| 91免费在线看| 九一九一国产精品| 亚洲狠狠爱一区二区三区| 久久影院午夜论| 91电影在线观看| 国产激情视频一区二区三区欧美| 一区二区三区中文在线| 久久精品一区二区三区av| 欧美私模裸体表演在线观看| 国产精品亚洲一区二区三区妖精| 亚洲一区二区三区四区五区中文| 国产日韩成人精品| 日韩精品自拍偷拍| 在线免费视频一区二区| 国产福利91精品| 久久国产人妖系列| 亚洲电影一级片| 亚洲精品第一国产综合野| 中文字幕va一区二区三区| 欧美一区二区观看视频| 欧美日本免费一区二区三区| av一本久道久久综合久久鬼色| 麻豆中文一区二区| 亚洲一区二区三区四区在线免费观看| 国产午夜一区二区三区| 日韩一区二区三区四区五区六区| 在线精品亚洲一区二区不卡| 99综合电影在线视频| 国产98色在线|日韩| 国产在线国偷精品免费看| 蜜臀av性久久久久蜜臀aⅴ| 亚洲777理论| 三级影片在线观看欧美日韩一区二区| 一区在线播放视频| 国产精品欧美经典| 日本一区二区不卡视频| 久久久亚洲高清| 久久久久亚洲蜜桃| 国产日韩高清在线| 国产精品女主播av| 亚洲色图都市小说| 亚洲精品国产精华液| 亚洲一区二区在线免费观看视频| 亚洲综合色婷婷| 五月激情综合婷婷| 青青草国产成人av片免费| 日韩精品色哟哟| 日韩成人午夜电影| 精品在线免费观看| 成人一二三区视频| 91视频com| 这里只有精品视频在线观看| 日韩亚洲欧美综合| 久久影院视频免费| 国产精品你懂的在线| 亚洲精品成人精品456| 天堂va蜜桃一区二区三区 | 色综合天天综合网国产成人综合天| 成人手机在线视频| 欧美午夜不卡视频| 日韩亚洲欧美综合| 日本一区二区三区国色天香 | 91麻豆免费在线观看| 欧美性色综合网| 精品噜噜噜噜久久久久久久久试看| 亚洲精品一区二区三区影院| 亚洲国产精品国自产拍av| 亚洲日穴在线视频| 日韩中文字幕一区二区三区| 国产一区二区三区在线观看免费视频 | 欧美日韩精品欧美日韩精品| 欧美一区二区三区公司| 国产精品日产欧美久久久久| 亚洲一区二区三区免费视频| 国产在线精品一区在线观看麻豆| av亚洲精华国产精华| 欧美一区二区黄色| 国产精品国产成人国产三级| 五月天激情小说综合| 成人午夜电影网站| 正在播放亚洲一区| 亚洲日本在线看| 精品一区二区在线播放| 日本高清免费不卡视频| 国产亚洲精久久久久久| 亚洲夂夂婷婷色拍ww47| 国产乱子伦视频一区二区三区| 欧美视频一区二区三区四区 | 精品女同一区二区|