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

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

?? usblspwr.c

?? 參考著寫其他的驅動程序就可以了。
?? 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| 亚洲午夜久久久| 婷婷国产在线综合| 久久国产精品72免费观看| 免费高清在线一区| 国产电影精品久久禁18| 国产99久久久国产精品潘金网站| 国产做a爰片久久毛片| 国产福利精品导航| 日本久久电影网| 69久久99精品久久久久婷婷| 久久久国际精品| 一区在线中文字幕| 午夜视频在线观看一区| 久久成人羞羞网站| 99综合影院在线| 欧美日韩国产影片| 久久亚洲综合av| 亚洲欧美日韩国产另类专区| 亚洲高清视频在线| 国产福利91精品一区二区三区| 99久久精品99国产精品| 欧美一级午夜免费电影| 国产欧美日韩精品在线| 午夜精品爽啪视频| 丰满少妇久久久久久久| 欧美日韩一区高清| 中文欧美字幕免费| 日韩国产高清在线| 成人午夜又粗又硬又大| 欧美日本在线看| 国产欧美日韩在线观看| 亚洲成av人片在线观看| 国产91精品一区二区麻豆亚洲| 欧美这里有精品| 国产欧美一区二区三区在线看蜜臀| 国产精品的网站| 麻豆精品一区二区av白丝在线| 成人一级片在线观看| 日韩亚洲欧美在线观看| 亚洲免费观看高清完整版在线| 久久精品久久久精品美女| 欧美一级精品在线| 自拍偷拍国产精品| 国产精品中文字幕一区二区三区| 在线中文字幕一区| 国产午夜精品久久久久久久 | 日韩一区二区三区在线观看| 国产精品美女www爽爽爽| 老司机免费视频一区二区| 99v久久综合狠狠综合久久| 欧美大白屁股肥臀xxxxxx| 一区二区三区四区精品在线视频| 国产精品一卡二卡在线观看| 欧美一级欧美三级在线观看| 亚洲最新视频在线播放| av在线不卡免费看| 中文字幕在线免费不卡| 国产自产v一区二区三区c| 欧美日韩国产系列| 亚洲成av人片在线| 欧美区在线观看| 午夜精品一区二区三区三上悠亚| 欧洲中文字幕精品| 日日夜夜免费精品| 欧美日韩国产成人在线免费| 亚洲综合av网| 欧美三级日本三级少妇99| 亚洲国产成人av网| 欧美精品第1页| 免费精品视频在线| 久久综合资源网| 国产一区二区美女诱惑| 久久精品一区四区| 处破女av一区二区| 亚洲天堂福利av| 在线观看欧美黄色| 爽爽淫人综合网网站 | 美女视频一区在线观看| 日韩一区二区在线播放| 国产自产高清不卡| 中文在线资源观看网站视频免费不卡| 成人中文字幕合集| 亚洲欧美另类图片小说| 欧美高清精品3d| 国产一区中文字幕| 国产精品免费aⅴ片在线观看| 成人三级伦理片| 亚洲二区在线观看| 这里只有精品99re| 久久99精品一区二区三区| 日本一区二区三区四区在线视频| 成人av第一页| 婷婷丁香久久五月婷婷| 久久久五月婷婷| 91精品福利视频| 蜜桃视频一区二区三区| 国产欧美一区二区精品性| 日韩一级大片在线观看| 国产91精品露脸国语对白| 一区二区三区精品视频在线| 日韩欧美一级二级三级| av在线免费不卡| 日本vs亚洲vs韩国一区三区| 国产精品天美传媒| 欧美二区乱c少妇| 不卡一区二区在线| 日韩av中文在线观看| 国产精品国产三级国产aⅴ入口| 欧美日韩日日骚| 99这里都是精品| 国内精品自线一区二区三区视频| 一区二区三区精品| 久久免费视频一区| 欧美高清视频一二三区| 99久久伊人久久99| 久久精品99国产精品日本| 一区二区三区四区不卡视频| 精品国产伦一区二区三区免费| 成年人网站91| 国产美女精品在线| 日韩国产欧美在线观看| 中文字幕一区二区在线观看| 久久午夜羞羞影院免费观看| 欧美伊人久久久久久久久影院| 国产乱码字幕精品高清av | 色狠狠色狠狠综合| 久久成人麻豆午夜电影| 亚洲成人免费av| 亚洲人精品午夜| 国产精品美女久久久久高潮| 日韩欧美一级片| 欧美一区二区三区成人| 欧美色爱综合网| 日本精品裸体写真集在线观看| 国产成人在线色| 精品一区二区国语对白| 蜜桃av一区二区三区电影| 亚洲v日本v欧美v久久精品| 一区二区高清免费观看影视大全| 亚洲同性同志一二三专区| 亚洲欧洲av在线| 亚洲欧洲av一区二区三区久久| 欧美国产一区二区| 国产精品亲子乱子伦xxxx裸| 日本一区二区三区四区| 国产精品无码永久免费888| 国产片一区二区| 国产精品丝袜一区| 国产蜜臀97一区二区三区| 中文字幕成人在线观看| 亚洲欧洲国产日本综合| 亚洲精选视频在线| 亚洲一区二区中文在线| 天天操天天综合网| 毛片av一区二区| 国产一区二区三区在线观看精品 | 久久久青草青青国产亚洲免观| 精品国产亚洲在线| 欧美国产1区2区| 亚洲欧洲精品一区二区精品久久久| 亚洲色图另类专区| 一区二区三区在线观看国产| 亚洲一区二区在线免费观看视频| 日日摸夜夜添夜夜添国产精品| 偷拍亚洲欧洲综合| 蜜桃视频在线观看一区二区| 国产风韵犹存在线视精品| 91视频xxxx| 日韩片之四级片| 欧美激情中文字幕| 亚洲资源在线观看| 国内精品免费在线观看| 99久久婷婷国产综合精品| 在线观看91精品国产麻豆| 久久久精品tv| 亚洲成av人片www| 国产在线不卡一卡二卡三卡四卡| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩精品一区二区天天拍小说| 日韩欧美一二区| 亚洲精品网站在线观看| 日韩精品免费视频人成| 91在线视频18| 日韩精品一区二区三区蜜臀| 国产精品免费av| 国产综合色在线| 3d动漫精品啪啪一区二区竹菊 | jizzjizzjizz欧美| 日韩午夜中文字幕| 亚洲蜜桃精久久久久久久| 精品一区二区三区视频在线观看| 一道本成人在线| 久久久精品中文字幕麻豆发布|