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

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

?? bulkpwr.c

?? S3C2410X平臺(tái)下的USB驅(qū)動(dòng)程序
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
    deviceExtension =  DeviceObject->DeviceExtension;

    // This should have been reset in completion routine
    BULKUSB_ASSERT( !deviceExtension->SelfPowerIrp );

    if (  deviceExtension->CurrentDevicePowerState ==  PowerState.DeviceState )
        return STATUS_SUCCESS;  // nothing to do

    BULKUSB_KdPrint( DBGLVL_HIGH,("Enter BulkUsb_SelfRequestPowerIrp() will request power irp to state %s\n",
        BULKUSB_StringForDevState( PowerState.DeviceState )));

    BulkUsb_IncrementIoCount(DeviceObject);

        // flag we're handling a self-generated power irp
    deviceExtension->SelfPowerIrp = TRUE;

        // actually request the Irp
    ntStatus = PoRequestPowerIrp(deviceExtension->PhysicalDeviceObject,
                         IRP_MN_SET_POWER,
                         PowerState,
                         BulkUsb_PoSelfRequestCompletion,
                         DeviceObject,
                         NULL);


    if  ( ntStatus == STATUS_PENDING ) {
        // status pending is the return code we wanted

        // We only need to wait for completion if we're powering up
        if ( (ULONG) PowerState.DeviceState < deviceExtension->PowerDownLevel ) {

            NTSTATUS waitStatus;

            waitStatus = KeWaitForSingleObject(
                           &deviceExtension->SelfRequestedPowerIrpEvent,
                           Suspended,
                           KernelMode,
                           FALSE,
                           NULL);

        }

        ntStatus = STATUS_SUCCESS;

        deviceExtension->SelfPowerIrp = FALSE;

        BULKUSB_KdPrint( DBGLVL_HIGH, ("BulkUsb_SelfRequestPowerIrp() SUCCESS\n    IRP 0x%x to state %s\n",
            pIrp, BULKUSB_StringForDevState(PowerState.DeviceState) ));


    }
    else {
        // The return status was not STATUS_PENDING; any other codes must be considered in error here;
        //  i.e., it is not possible to get a STATUS_SUCCESS  or any other non-error return from this call;
        BULKUSB_KdPrint( DBGLVL_HIGH, ("BulkUsb_SelfRequestPowerIrp() to state %s FAILED, status = 0x%x\n",
            BULKUSB_StringForDevState( PowerState.DeviceState ),ntStatus));
    }

    return ntStatus;
}



NTSTATUS
BulkUsb_PoSelfRequestCompletion(
    IN PDEVICE_OBJECT       DeviceObject,
    IN UCHAR                MinorFunction,
    IN POWER_STATE          PowerState,
    IN PVOID                Context,
    IN PIO_STATUS_BLOCK     IoStatus
    )
/*++

Routine Description:

    This routine is called when the driver completes a self-originated power IRP
        that was generated by a call to BulkUsb_SelfSuspendOrActivate().
    We power down whenever the last pipe is closed and power up when the first pipe is opened.

    For power-up , we set an event in our FDO extension to signal this IRP done
    so the power request can be treated as a synchronous call.
    We need to know the device is powered up before opening the first pipe, for example.
    For power-down, we do not set the event, as no caller waits for powerdown complete.

Arguments:

    DeviceObject - Pointer to the device object for the class device. ( Physical Device Object )

    Context - Driver defined context, in this case our FDO ( functional device object )

Return Value:

    The function value is the final status from the operation.

--*/
{
    PDEVICE_OBJECT deviceObject = Context;
    PDEVICE_EXTENSION deviceExtension = deviceObject->DeviceExtension;
    NTSTATUS ntStatus = IoStatus->Status;

    // we should not be in the midst of handling a system-generated power irp
    BULKUSB_ASSERT( NULL == deviceExtension->PowerIrp );

    // We only need to set the event if we're powering up;
    // No caller waits on power down complete
    if ( (ULONG) PowerState.DeviceState < deviceExtension->PowerDownLevel ) {

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

    BulkUsb_DecrementIoCount(deviceObject);

    BULKUSB_KdPrintCond( DBGLVL_HIGH, !NT_SUCCESS(ntStatus),("Exit BulkUsb_PoSelfRequestCompletion() FAILED, ntStatus = 0x%x\n", ntStatus ));

    return ntStatus;
}


BOOLEAN
BulkUsb_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 BulkUsb_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 )
        //

        BULKUSB_KdPrint( DBGLVL_MEDIUM,("BulkUsb_SetDevicePowerState() PowerDeviceD3 (OFF)\n"));

        deviceExtension->CurrentDevicePowerState = DeviceState;
        break;

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

        BULKUSB_KdPrint( DBGLVL_MEDIUM,("BulkUsb_SetDevicePowerState()  %s\n",
            BULKUSB_StringForDevState(DeviceState) ));

        deviceExtension->CurrentDevicePowerState = DeviceState;
        break;

    case PowerDeviceD0:


        BULKUSB_KdPrint( DBGLVL_MEDIUM,("BulkUsb_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:

        BULKUSB_KdPrint( DBGLVL_MEDIUM,(" Bogus DeviceState = %x\n", DeviceState));
    }

    return fRes;
}



NTSTATUS
BulkUsb_QueryCapabilities(
    IN PDEVICE_OBJECT       LowerDeviceObject,
    IN PDEVICE_CAPABILITIES DeviceCapabilities
    )

/*++

Routine Description:

    This routine generates an internal IRP from this driver to the lower portion
    of the driver stack to obtain information on the 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:

    LowerDeviceObject        - DeviceObject beneath this driver in the stack.

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(LowerDeviceObject->StackSize, FALSE);

    if (!irp) {
        return STATUS_INSUFFICIENT_RESOURCES;
    }

    //
    // Preinit the device capability structures appropriately.
    //
    RtlZeroMemory( DeviceCapabilities, sizeof(DEVICE_CAPABILITIES) );
    DeviceCapabilities->Size = sizeof(DEVICE_CAPABILITIES);
    DeviceCapabilities->Version = 1;
    DeviceCapabilities->Address = -1;
    DeviceCapabilities->UINumber = -1;
    
    //purnnamu:11/23/2001
    //DeviceCapabilities->Removable =1;
    //DeviceCapabilities->SurpriseRemovalOK=1;  
    

    // 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);
    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,
                           BulkUsb_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;

    // preset the irp to report not supported
    irp->IoStatus.Status = STATUS_NOT_SUPPORTED;

    ntStatus = IoCallDriver(LowerDeviceObject,
                            irp);

    BULKUSB_KdPrint( DBGLVL_MEDIUM,(" BulkUsb_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);

       ntStatus = irp->IoStatus.Status;
    }

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

    IoFreeIrp(irp);

    return ntStatus;
}








?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影中文字幕在线观看| 久久久久久亚洲综合| 51久久夜色精品国产麻豆| 日韩丝袜情趣美女图片| 欧美国产成人精品| 一区二区三区四区五区视频在线观看| 亚洲午夜久久久久中文字幕久| 天堂va蜜桃一区二区三区| 韩国av一区二区| av动漫一区二区| 欧美日韩国产大片| 国产日本欧美一区二区| 亚洲aaa精品| 国产成人精品一区二区三区四区| 色婷婷亚洲婷婷| 日韩久久精品一区| 亚洲色图视频免费播放| 日本三级亚洲精品| 波多野结衣视频一区| 欧美精品久久一区| 国产精品久久久久影院| 免费看精品久久片| 91丨porny丨国产| 精品播放一区二区| 亚洲午夜在线观看视频在线| 国产在线精品一区二区不卡了| 在线亚洲欧美专区二区| 亚洲精品一线二线三线| 亚洲高清免费观看高清完整版在线观看| 国内精品第一页| 欧美丰满少妇xxxbbb| 国产精品久久久久永久免费观看 | 福利一区二区在线观看| 精品视频在线免费| 最新日韩av在线| 国产精品自在在线| 欧美日本国产一区| 最新国产成人在线观看| 韩国三级中文字幕hd久久精品| 91福利国产精品| 中文字幕巨乱亚洲| 国产综合久久久久影院| 欧美日韩三级一区| 亚洲蜜桃精久久久久久久| 国产精品456| 日韩精品一区二| 午夜精品成人在线视频| 色先锋资源久久综合| 日本一区二区三区在线观看| 青椒成人免费视频| 欧美日韩免费观看一区二区三区| 中文字幕一区二区在线观看| 国产一区二区三区黄视频 | 美腿丝袜亚洲综合| 欧美性受极品xxxx喷水| 中文字幕一区二区三区蜜月| 国产成人av电影在线| 亚洲精品一区在线观看| 麻豆国产精品视频| 欧美一级片免费看| 日韩精品五月天| 777a∨成人精品桃花网| 亚洲电影在线播放| 欧美午夜电影网| 亚洲国产一区二区视频| 在线精品视频免费播放| 亚洲美女视频在线观看| 91论坛在线播放| 亚洲婷婷综合久久一本伊一区| 成人av在线网站| 中文字幕免费不卡在线| 成人午夜激情影院| 国产精品黄色在线观看| 91蜜桃传媒精品久久久一区二区| 亚洲欧洲成人自拍| 91免费小视频| 一区二区三区欧美亚洲| 欧美美女直播网站| 日韩电影在线一区二区三区| 91精品久久久久久久久99蜜臂| 日韩av二区在线播放| 欧美不卡一区二区三区| 国产盗摄视频一区二区三区| 国产精品乱人伦一区二区| 99久久久久久| 一区二区三国产精华液| 欧美日本在线一区| 日本aⅴ免费视频一区二区三区| 欧美一区二区三区视频在线| 久久精品999| 国产日韩欧美精品在线| 99视频一区二区三区| 亚洲一区二区偷拍精品| 在线电影国产精品| 精品在线视频一区| 欧美精彩视频一区二区三区| 99国产麻豆精品| 五月婷婷欧美视频| 亚洲精品一区二区三区在线观看| 国产福利91精品一区| 亚洲卡通欧美制服中文| 在线不卡免费欧美| 国产伦精品一区二区三区视频青涩| 久久九九影视网| 色综合久久99| 蜜臀av一区二区在线观看| 久久免费国产精品| 在线一区二区三区做爰视频网站| 视频一区二区三区在线| 久久久精品人体av艺术| 日本久久电影网| 六月婷婷色综合| 中文字幕中文字幕一区二区| 欧美日韩在线观看一区二区| 精品一区二区三区日韩| 亚洲男女一区二区三区| 日韩一级大片在线| 成人av电影在线| 蜜臀av国产精品久久久久| 国产精品第一页第二页第三页| 在线电影一区二区三区| 不卡欧美aaaaa| 天天综合色天天综合色h| 欧美国产日韩a欧美在线观看| 欧美日韩一区二区三区高清| 国产中文一区二区三区| 一区二区视频免费在线观看| 久久久久久影视| 欧美人xxxx| yourporn久久国产精品| 免费不卡在线视频| 亚洲欧美成人一区二区三区| 精品日韩一区二区| 欧美日韩一级片网站| 岛国av在线一区| 免费精品99久久国产综合精品| 亚洲欧洲在线观看av| 欧美成人三级在线| 欧美偷拍一区二区| www.在线欧美| 国产剧情一区二区| 三级成人在线视频| 亚洲欧美日韩国产综合| 久久久精品免费免费| 欧美精品在欧美一区二区少妇| 不卡av免费在线观看| 国产一级精品在线| 日本视频在线一区| 亚洲国产视频在线| 1024成人网| 中文子幕无线码一区tr| 精品999久久久| 欧美一区二区三区婷婷月色| 91农村精品一区二区在线| 成人午夜电影小说| 韩国成人精品a∨在线观看| 日韩中文字幕1| 亚洲一级在线观看| 亚洲男帅同性gay1069| 国产视频一区在线播放| 精品成人免费观看| 欧美不卡激情三级在线观看| 宅男在线国产精品| 欧美日本免费一区二区三区| 欧美系列一区二区| 日本丶国产丶欧美色综合| 国产成人8x视频一区二区| 国产另类ts人妖一区二区| 久久99精品一区二区三区| 蜜臀国产一区二区三区在线播放 | 欧美精品一二三| 色综合婷婷久久| 91亚洲精品久久久蜜桃| 91视视频在线观看入口直接观看www | 色综合婷婷久久| 91浏览器在线视频| 色婷婷综合久色| 色一情一乱一乱一91av| 色噜噜狠狠成人网p站| 91在线无精精品入口| 99视频国产精品| 99re这里只有精品视频首页| www..com久久爱| 99re免费视频精品全部| 91热门视频在线观看| 91久久一区二区| 欧美午夜视频网站| 欧美伦理电影网| 日韩一区二区精品| 精品少妇一区二区三区视频免付费| 欧美日韩免费一区二区三区| 欧美三区在线观看| 欧美精品 国产精品| 欧美一区二区三区色| 精品国产一区二区三区不卡 | 男人操女人的视频在线观看欧美| 日本视频在线一区| 国产一区二区久久| 成人免费视频网站在线观看| 91视频www|