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

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

?? bulkpwr.c

?? USB驅(qū)動程序文件
?? C
?? 第 1 頁 / 共 3 頁
字號:
    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;
}








?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线观看| 久久精品在这里| 亚洲一二三四在线观看| 色综合久久六月婷婷中文字幕| 国产精品不卡一区| 91猫先生在线| 午夜影院在线观看欧美| 在线播放/欧美激情| 日韩av电影天堂| 欧美大片拔萝卜| 国产不卡在线播放| 亚洲精品免费一二三区| 欧美日韩久久不卡| 日本vs亚洲vs韩国一区三区二区 | 中文字幕亚洲一区二区va在线| av一区二区三区在线| 依依成人综合视频| 欧美一区二区三区播放老司机| 九色porny丨国产精品| 国产日韩在线不卡| 国产欧美精品日韩区二区麻豆天美| 国产精品123| 亚洲最大的成人av| 欧美日韩高清一区二区| 国产福利视频一区二区三区| 亚洲精品久久久蜜桃| 91精品福利在线一区二区三区 | 国产成a人亚洲| 亚洲精品高清在线| 日韩一级完整毛片| 成人三级伦理片| 天天综合日日夜夜精品| 久久精品人人做人人综合| 色综合久久精品| 久久99日本精品| 亚洲美女免费在线| 久久综合av免费| 欧美伊人久久大香线蕉综合69| 九九在线精品视频| 亚洲一二三四久久| 久久久国产一区二区三区四区小说 | 久久久国产精品麻豆| 欧美日韩aaaaaa| 99久久99久久精品国产片果冻| 麻豆久久久久久久| 一区二区三区四区视频精品免费| 久久综合久久99| 在线不卡的av| 91同城在线观看| 国产精品456露脸| 日日夜夜精品免费视频| 亚洲欧美综合在线精品| 26uuu国产电影一区二区| 欧美久久久久中文字幕| 色综合色综合色综合色综合色综合| 精品一区二区在线免费观看| 亚洲成人免费在线观看| 亚洲天堂精品视频| 国产亚洲欧美在线| 精品久久久久久久久久久久久久久久久 | 樱桃视频在线观看一区| 欧美国产精品中文字幕| 2欧美一区二区三区在线观看视频| 精品视频一区 二区 三区| 色综合色狠狠天天综合色| av一区二区不卡| 成人av电影免费在线播放| 国产99久久久国产精品潘金网站| 老司机精品视频在线| 美洲天堂一区二卡三卡四卡视频| 欧美日韩亚洲综合在线| 久久久久久久国产精品影院| 欧美日本国产一区| 欧美在线观看视频在线| 一本到高清视频免费精品| 国产成人一区在线| 国产99久久久久| 成人免费视频免费观看| 国产99久久久精品| 99久久99久久精品国产片果冻| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 在线看日本不卡| 欧美日韩亚洲丝袜制服| 欧美视频第二页| 日本韩国欧美一区二区三区| 91老师国产黑色丝袜在线| 色偷偷88欧美精品久久久| 99精品偷自拍| 欧美日韩精品专区| 欧美一级日韩不卡播放免费| 精品久久久久久综合日本欧美| 精品国产91乱码一区二区三区| 久久夜色精品一区| 国产精品午夜电影| 亚洲精品欧美二区三区中文字幕| 亚洲一区二区高清| 日本aⅴ亚洲精品中文乱码| 久久99国产精品免费网站| 国产一区日韩二区欧美三区| 成人午夜又粗又硬又大| 色综合久久精品| 3d成人h动漫网站入口| 久久女同性恋中文字幕| 国产精品久久久久永久免费观看 | 另类专区欧美蜜桃臀第一页| 午夜精品一区二区三区三上悠亚| 亚洲欧美另类小说| 婷婷丁香久久五月婷婷| 日本不卡在线视频| 国产91在线|亚洲| 不卡一区二区在线| 欧美精品第1页| 精品久久久久99| 亚洲特黄一级片| 亚洲国产成人porn| 国产乱码精品一区二区三区五月婷 | 日韩一本二本av| 欧美国产综合一区二区| 亚洲欧美视频一区| 久久97超碰国产精品超碰| 国产在线精品不卡| 欧美在线一二三四区| 欧美一级欧美三级| 亚洲欧美日韩中文字幕一区二区三区| 亚洲私人黄色宅男| 日韩激情av在线| 99精品久久久久久| 9191久久久久久久久久久| 国产三级精品视频| 亚洲精品高清视频在线观看| 韩国一区二区三区| 色婷婷精品大在线视频| 精品盗摄一区二区三区| 亚洲欧美视频在线观看| 国产成人在线看| 欧美精品粉嫩高潮一区二区| 亚洲色图一区二区三区| 亚洲精品国产第一综合99久久 | 色综合久久中文字幕综合网| 91精品国产日韩91久久久久久| 国产日产亚洲精品系列| 亚洲美女一区二区三区| 久久精品国产色蜜蜜麻豆| 色综合久久99| 欧美精品99久久久**| 国产精品午夜免费| 精品在线你懂的| 在线观看国产精品网站| 自拍偷在线精品自拍偷无码专区| 美女在线一区二区| 欧美久久久久久蜜桃| 国产精品国产三级国产a| 天天射综合影视| 91丝袜呻吟高潮美腿白嫩在线观看| 精品三级在线看| 国产精品久久精品日日| 精品一区二区免费| 日韩欧美在线观看一区二区三区| 亚洲女性喷水在线观看一区| 972aa.com艺术欧美| 国产色爱av资源综合区| 韩国中文字幕2020精品| 欧美一区日韩一区| 视频一区欧美精品| 欧美精品xxxxbbbb| 亚洲中国最大av网站| 欧美性受极品xxxx喷水| 亚洲日本欧美天堂| 一本色道久久加勒比精品| 国产亚洲精久久久久久| 国产91精品一区二区| 欧美一区二区视频在线观看| 天天免费综合色| 欧美一区二区精品久久911| 亚洲综合在线观看视频| 欧美日本不卡视频| 亚洲综合免费观看高清完整版| 欧美性猛片aaaaaaa做受| av福利精品导航| 久久久久久黄色| 久久国产精品区| 久久精品综合网| 波多野结衣中文字幕一区二区三区| 精品乱人伦小说| 粉嫩av一区二区三区| 26uuuu精品一区二区| 成人妖精视频yjsp地址| 国产清纯在线一区二区www| 成人激情动漫在线观看| 国产精品日韩成人| 色综合视频一区二区三区高清| 亚洲国产精品久久久久婷婷884 | 成人一区二区三区中文字幕| 26uuu欧美日本| www.色精品| 亚洲欧美日韩国产另类专区| 欧美日高清视频| 日本中文字幕一区| 国产欧美日韩另类视频免费观看| av网站一区二区三区|