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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usblspwr.c

?? microsoft usb開發(fā)包,能夠給大家一個(gè)很好的參考.
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):

        // 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;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久夜色精品一区| 久久色在线观看| 亚洲一区二区黄色| 欧美性高清videossexo| 亚洲一区在线观看网站| 欧美日韩美少妇| 蜜桃视频第一区免费观看| 日韩区在线观看| 狠狠色丁香九九婷婷综合五月| 精品国产伦理网| 高清不卡一二三区| 综合久久久久久久| 欧美剧在线免费观看网站| 日韩激情av在线| 久久人人97超碰com| 成人激情开心网| 亚洲无人区一区| 精品国产乱码久久久久久浪潮| 国产成人啪免费观看软件| 亚洲视频资源在线| 337p亚洲精品色噜噜| 国产在线不卡一卡二卡三卡四卡| 国产精品卡一卡二卡三| 在线国产电影不卡| 国产美女一区二区三区| 亚洲色图清纯唯美| 91精品国产手机| av成人动漫在线观看| 无码av免费一区二区三区试看 | 日韩不卡手机在线v区| 精品99一区二区三区| 日本久久精品电影| 精品在线播放免费| 亚洲毛片av在线| 精品国产百合女同互慰| 在线观看日韩av先锋影音电影院| 精品影院一区二区久久久| 亚洲人成亚洲人成在线观看图片| 欧美一级片免费看| 91影视在线播放| 国产一区二区三区不卡在线观看| 一区二区三区四区不卡视频 | 欧洲av一区二区嗯嗯嗯啊| 日韩精品91亚洲二区在线观看| 国产精品毛片a∨一区二区三区| 欧美影片第一页| av在线综合网| 韩国在线一区二区| 天天综合网天天综合色| 综合久久综合久久| 国产亚洲精品中文字幕| 日韩欧美一区二区三区在线| 欧洲日韩一区二区三区| 不卡的看片网站| 国产伦精品一区二区三区在线观看| 水野朝阳av一区二区三区| 亚洲精品乱码久久久久久久久 | 韩国av一区二区三区| 亚洲成年人影院| 亚洲综合成人在线| 国产精品国模大尺度视频| 久久久综合九色合综国产精品| 欧美一区日韩一区| 欧美日韩一二区| 欧美性色aⅴ视频一区日韩精品| 国产91丝袜在线播放0| 久久精品国产一区二区三区免费看| 亚洲成a人v欧美综合天堂下载| 一区二区三区在线不卡| 亚洲欧美在线视频观看| 国产喂奶挤奶一区二区三区| 欧美成人国产一区二区| 日韩欧美电影一区| 日韩一区二区三区视频| 88在线观看91蜜桃国自产| 欧美日免费三级在线| 91久久国产最好的精华液| 91丝袜呻吟高潮美腿白嫩在线观看| 国产成人亚洲综合色影视| 国产一区二区在线免费观看| 久久精品国产**网站演员| 日本中文字幕一区二区有限公司| 日韩高清一区在线| 蜜桃免费网站一区二区三区 | 国产成a人亚洲精品| 国产91综合一区在线观看| 成人精品免费看| 99久久久久久99| 在线观看国产91| 欧美一级理论片| 欧美成人女星排行榜| 国产午夜精品久久| 亚洲欧美在线观看| 亚洲一级二级三级在线免费观看| 亚洲小说春色综合另类电影| 日韩精品1区2区3区| 国产一区二区导航在线播放| 成人精品免费视频| 欧美三级电影在线看| 欧美电影精品一区二区| 日本一区二区三区高清不卡| 亚洲人xxxx| 日日摸夜夜添夜夜添精品视频 | 国产成人综合网| www.在线欧美| 欧美喷水一区二区| 欧美激情在线一区二区三区| 一区二区三区不卡视频| 精品在线观看免费| 91视频免费观看| 91麻豆精品国产| 国产色产综合产在线视频| 亚洲日本免费电影| 日韩在线播放一区二区| 国产精品一级二级三级| 在线观看中文字幕不卡| 精品国产乱码久久久久久图片 | 欧美日韩亚洲不卡| 精品成人一区二区三区四区| 亚洲精品一卡二卡| 狠狠狠色丁香婷婷综合激情 | 国产精品欧美一区喷水| 日韩av在线发布| 99久久久无码国产精品| 欧美xxxxx牲另类人与| 一区视频在线播放| 久久国产成人午夜av影院| 色综合夜色一区| 怡红院av一区二区三区| 另类小说视频一区二区| 91福利国产成人精品照片| 久久婷婷一区二区三区| 亚洲va欧美va人人爽| 成人激情综合网站| 精品国产亚洲在线| 午夜精品在线视频一区| 色哟哟在线观看一区二区三区| 精品国产伦一区二区三区免费| 亚洲一区精品在线| a美女胸又www黄视频久久| 欧美变态tickling挠脚心| 午夜成人免费视频| 色网综合在线观看| 国产精品无码永久免费888| 国内外成人在线| 777a∨成人精品桃花网| 亚洲一区二区三区在线看| 99视频超级精品| 欧美韩国日本综合| 国产精品白丝jk黑袜喷水| 欧美一区二区三区四区五区| 亚洲一区二区三区视频在线播放| 99精品热视频| 国产精品无遮挡| 国产suv精品一区二区6| 精品福利av导航| 国产在线播放一区二区三区| 欧美va亚洲va香蕉在线| 日本成人在线一区| 欧美一区二区三区视频在线| 视频一区视频二区中文| 欧美日韩一区在线观看| 亚洲一二三四在线观看| 在线观看国产91| 亚洲国产欧美日韩另类综合| 欧美色综合久久| 亚洲成人av一区二区| 在线看国产一区二区| 亚洲国产中文字幕| 欧美日韩成人一区| 日韩在线观看一区二区| 日韩视频在线你懂得| 精一区二区三区| 久久久亚洲综合| 福利一区二区在线观看| 国产喷白浆一区二区三区| 成人激情小说网站| 亚洲美女视频在线| 欧美最猛黑人xxxxx猛交| 午夜精品一区二区三区免费视频 | 国产老肥熟一区二区三区| wwwwxxxxx欧美| 成人深夜福利app| 亚洲另类春色校园小说| 欧美午夜免费电影| 日韩精品免费专区| 精品免费日韩av| 成人精品免费看| 亚洲一区二区三区国产| 91精品国产全国免费观看 | 午夜一区二区三区在线观看| 91精品国产品国语在线不卡| 国内精品在线播放| 国产精品久久久久久久久快鸭| 色吊一区二区三区| 免费人成精品欧美精品| 国产日韩视频一区二区三区| 91小宝寻花一区二区三区| 日韩中文字幕麻豆| 国产欧美精品日韩区二区麻豆天美|