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

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

?? d12xp.c

?? 該軟件代碼示范了如何用WINDOWS DDK 及VC++開發(fā)環(huán)境 進(jìn)行windows USB 驅(qū)動程序編寫
?? C
?? 第 1 頁 / 共 5 頁
字號:
        deviceExtension->PowerDownLevel = deviceExtension->DeviceCapabilities.DeviceWake;


        if  ( ( PowerDeviceD0 == deviceExtension->CurrentDevicePowerState )  ||
              ( deviceExtension->DeviceCapabilities.DeviceWake > deviceExtension->CurrentDevicePowerState ) ) {
                        

            //  If a driver fails this IRP, it should complete the IRP immediately without
            //  passing the IRP to the next-lower driver.
            ntStatus = STATUS_INVALID_DEVICE_STATE;
            Irp->IoStatus.Status = ntStatus;
            IoCompleteRequest (Irp,IO_NO_INCREMENT );
            DbgPrint("Exit D12_ProcessPowerIrp(), ntStatus STATUS_INVALID_DEVICE_STATE\n" ) ;
            D12_DecrementIoCount(DeviceObject);
            return ntStatus;
        }

        // flag we're enabled for wakeup
        deviceExtension->EnabledForWakeup = TRUE;

        // init an event for our completion routine to signal when PDO is done with this Irp
        KeInitializeEvent(&event, NotificationEvent, FALSE);

       // If not failing outright, pass this on to our PDO for further handling
        IoCopyCurrentIrpStackLocationToNext(Irp);

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

        PoStartNextPowerIrp(Irp);
        ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                Irp);

         // if PDO is not done yet, wait for the event to be set in our completion routine
        if (ntStatus == STATUS_PENDING) {
             // wait for irp to complete

            NTSTATUS waitStatus = KeWaitForSingleObject(
                &event,
                Suspended,
                KernelMode,
                FALSE,
                NULL);

            DbgPrint("D12_ProcessPowerIrp() done waiting for PDO to finish IRP_MN_WAIT_WAKE\n");
        }

                // now tell the device to actually wake up
                D12_SelfSuspendOrActivate( DeviceObject, FALSE );

        // flag we're done with wakeup irp
        deviceExtension->EnabledForWakeup = FALSE;

        D12_DecrementIoCount(DeviceObject);

        DbgPrint("D12_ProcessPowerIrp() Exit IRP_MN_WAIT_WAKE\n");
        break;

 /*   case IRP_MN_WAIT_WAKE:
        D12_KdPrint(("D12TEST.SYS:  IRP_MN_WAIT_WAKE\n"));

        //
        // someone is enabling us for wakeup
        //
        TRAP();  // never seen this before?
        // pass this on to our PDO
        break;*/

    case IRP_MN_SET_POWER:
        {

		if(deviceExtension->PendingIoCount>0)
			{

				IoCopyCurrentIrpStackLocationToNext(Irp);
				D12_KdPrint(("Test Point .....................\n")); 
                
                PoStartNextPowerIrp(Irp);
			/*	ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                Irp);*/
			    D12_DecrementIoCount(DeviceObject);
				break;
			}
		else{
        switch (irpStack->Parameters.Power.Type) {
        case SystemPowerState:
            //
            // find the device power state equivalent to the given system state
            //
        
            {
            POWER_STATE powerState;

            D12_KdPrint(("D12TEST.SYS:  Set Power, SystemPowerState (%d)\n", 
                irpStack->Parameters.Power.State.SystemState));                    

            if (irpStack->Parameters.Power.State.SystemState == 
                PowerSystemWorking) {
                                
                powerState.DeviceState = PowerDeviceD0;
            } else if (/* deviceExtension->EnabledForWakeup*/FALSE) {
            
                // BUGBUG for now act as if we are always enabled for wakeup
                D12_KdPrint(("D12TEST.SYS:  D12 always enabled for wakeup\n"));

                powerState.DeviceState =
                    deviceExtension->DeviceCapabilities.DeviceState[
                        irpStack->Parameters.Power.State.SystemState];

            } else {
                //
                // wakeup not enabled, just go in to the 'OFF' state.
                //
                powerState.DeviceState = PowerDeviceD3;
            } //irpStack->Parameters.Power.State.SystemState
            
            //
            // are we already in this state?
            //
            
            if (powerState.DeviceState != 
                deviceExtension->CurrentDevicePowerState) {
                
                // No,
                // request that we be put into this state
                deviceExtension->PowerIrp = Irp;
                ntStatus = PoRequestPowerIrp(deviceExtension->PhysicalDeviceObject,
                                           IRP_MN_SET_POWER,
                                           powerState,
                                           D12_PoRequestCompletion,
                                           DeviceObject,
                                           NULL);

            } else {
                // Yes,
                // just pass it on
                IoCopyCurrentIrpStackLocationToNext(Irp);
                PoStartNextPowerIrp(Irp);
                ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                        Irp);

                D12_DecrementIoCount(DeviceObject);                                        

            }

            } 
            break;

        case DevicePowerState:

            ntStatus = D12_SetDevicePowerState(DeviceObject,
                                                  irpStack->Parameters.Power.State.DeviceState,
                                                  &hookIt);

            IoCopyCurrentIrpStackLocationToNext(Irp);
            
            if (hookIt) {
                D12_KdPrint(("D12TEST.SYS:  Set PowerIrp Completion Routine\n"));
                IoSetCompletionRoutine(Irp,
                       D12_PowerIrp_Complete,
                       // always pass FDO to completion routine
                       DeviceObject,
                       hookIt,
                       hookIt,
                       hookIt);
            }

            PoStartNextPowerIrp(Irp);
            ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                    Irp);

            D12_DecrementIoCount(DeviceObject);
            
            break;
        } /* case irpStack->Parameters.Power.Type */
		}

        } 
        break; /* IRP_MN_SET_POWER */

    case IRP_MN_QUERY_POWER:
    
        D12_KdPrint(("D12TEST.SYS:  IRP_MN_QUERY_POWER\n"));  

        IoCopyCurrentIrpStackLocationToNext(Irp);
        PoStartNextPowerIrp(Irp);
        ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                Irp);


        D12_DecrementIoCount(DeviceObject);

        break; /* IRP_MN_QUERY_POWER */            
    
    default:
    
        D12_KdPrint(("D12TEST.SYS:  UNKNOWN POWER MESSAGE (%x)\n", irpStack->MinorFunction));

        //
        // All unahndled PnP messages are passed on to the PDO
        //

        IoCopyCurrentIrpStackLocationToNext(Irp);

        //
        // All PNP_POWER POWER messages get passed to
        // TopOfStackDeviceObject and some are handled in the completion routine
        //

        // pass on to our PDO
        PoStartNextPowerIrp(Irp);
        ntStatus = PoCallDriver(deviceExtension->TopOfStackDeviceObject,
                                Irp);

        D12_DecrementIoCount(DeviceObject);                                

    } /* irpStack->MinorFunction */

    return ntStatus;
}


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

Routine Description:

    Process the IRPs sent to this device.

Arguments:

    DeviceObject - pointer to a device object

    Irp          - pointer to an I/O Request Packet

Return Value:


--*/
{

    PIO_STACK_LOCATION irpStack;
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PDEVICE_OBJECT stackDeviceObject;

    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;

    //
    // Get a pointer to the current location in the Irp. This is where
    //     the function codes and parameters are located.
    //

    irpStack = IoGetCurrentIrpStackLocation (Irp);

    //
    // Get a pointer to the device extension
    //

    deviceExtension = DeviceObject->DeviceExtension;
    stackDeviceObject = deviceExtension->TopOfStackDeviceObject;

    D12_IncrementIoCount(DeviceObject);

    switch (irpStack->MajorFunction) {
    case IRP_MJ_SYSTEM_CONTROL: 
    
        D12_KdPrint (("D12TEST.SYS: IRP_MJ_SYSTEM_CONTROL\n"));
        IoCopyCurrentIrpStackLocationToNext(Irp);

        D12_KdPrint (("D12TEST.SYS: Passing SysCtrl Irp down\n"));

        D12_DecrementIoCount(DeviceObject);
        
        ntStatus = IoCallDriver(stackDeviceObject,
                                Irp);
        goto D12_Dispatch_Done;                                
        break;        

    case IRP_MJ_PNP:

        D12_KdPrint (("D12TEST.SYS: IRP_MJ_PNP\n"));

        switch (irpStack->MinorFunction) {
        case IRP_MN_START_DEVICE:

            {
            KEVENT event;
            D12_KdPrint (("D12TEST.SYS: IRP_MN_START_DEVICE\n"));
            
            KeInitializeEvent(&event, NotificationEvent, FALSE);

            IoCopyCurrentIrpStackLocationToNext(Irp);  
            IoSetCompletionRoutine(Irp,
                                   D12_DeferIrpCompletion,
                                   &event,
                                   TRUE,
                                   TRUE,
                                   TRUE);


            ntStatus = IoCallDriver(stackDeviceObject,
                                    Irp);
                
            if (ntStatus == STATUS_PENDING) {
                 // wait for irp to complete
           
                TRAP(); // first time we hit this
                       
                KeWaitForSingleObject(
                    &event,
                    Suspended,
                    KernelMode,
                    FALSE,
                    NULL);
            }

            ntStatus = D12_StartDevice(DeviceObject);
            Irp->IoStatus.Status = ntStatus;

            goto D12_Dispatch_CompleteRequest;
            }
            break;

        case IRP_MN_STOP_DEVICE:

            D12_KdPrint (("D12TEST.SYS: IRP_MN_STOP_DEVICE\n"));

            ntStatus = D12_StopDevice(DeviceObject);

            break;

        case IRP_MN_REMOVE_DEVICE:

            D12_KdPrint (("D12TEST.SYS: IRP_MN_REMOVE_DEVICE\n"));

            // match the inc at the begining of the dispatch
            // routine
            D12_DecrementIoCount(DeviceObject);

            //
            // ounce this flag is set no irps will be pased 
            // down the stack to lower drivers
            //
            deviceExtension->AcceptingRequests = FALSE;

            if (deviceExtension->UserEvent != NULL) {
                KeSetEvent(deviceExtension->UserEvent,
                           1,
                           FALSE);
            }

            if (NT_SUCCESS(ntStatus)) {
                LONG pendingIoCount;

                IoCopyCurrentIrpStackLocationToNext(Irp);  

                ntStatus = IoCallDriver(stackDeviceObject,
                                        Irp);

                //
                // final decrement will trigger the remove
                //
                pendingIoCount = D12_DecrementIoCount(DeviceObject);

                {
                    NTSTATUS status;

                    // wait for any io request pending in our driver to
                    // complete for finishing the remove

                    status = KeWaitForSingleObject(
                                &deviceExtension->RemoveEvent,
                                Suspended,
                                KernelMode,
                                FALSE,
                                NULL);

//                    TRAP();
                }
                //
                // Delete the link and FDO we created
                //

                D12_RemoveDevice(DeviceObject);

                D12_KdPrint (("D12TEST.SYS: Detaching from %08X\n",
                                 deviceExtension->TopOfStackDeviceObject));

                IoDetachDevice(deviceExtension->TopOfStackDeviceObject);

                D12_KdPrint (("D12TEST.SYS: Deleting %08X\n",
                                 DeviceObject));

                IoDeleteDevice (DeviceObject);

                goto D12_Dispatch_Done;
            }
            break;

        case IRP_MN_QUERY_STOP_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_QUERY_STOP_DEVICE\n"));
            break;
        case IRP_MN_QUERY_REMOVE_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_QUERY_REMOVE_DEVICE\n"));
            break;
        case IRP_MN_CANCEL_STOP_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_CANCEL_STOP_DEVICE\n"));
            break;
        case IRP_MN_CANCEL_REMOVE_DEVICE:
            D12_KdPrint (("D12TEST.SYS: IRP_MN_CANCEL_REMOVE_DEVICE\n"));
            break;
        default:
            D12_KdPrint (("D12TEST.SYS: PnP IOCTL not handled\n"));
        } /* case MinorFunction, MajorFunction == IRP_MJ_PNP_POWER  */


        if (!NT_SUCCESS(ntStatus)) {
            Irp->IoStatus.Status = ntStatus;
            goto D12_Dispatch_CompleteRequest;
        }

        IoCopyCurrentIrpStackLocationToNext(Irp);

        //
        // All PNP_POWER messages get passed to the TopOfStackDeviceObject
        // we were given in PnPAddDevice
        //

        D12_KdPrint (("D12TEST.SYS: Passing PnP Irp down, status = %x\n", ntStatus));

        ntStatus = IoCallDriver(stackDeviceObject,
                                Irp);

        D12_DecrementIoCount(DeviceObject);

        goto D12_Dispatch_Done;
        break; // IRP_MJ_PNP

    default:
        D12_KdPrint (("D12TEST.SYS: MAJOR IOCTL not handled\n"));
        Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;

    } /* case MajorFunction */


    ntStatus = Irp->IoStatus.Status;

D12_Dispatch_CompleteRequest:

    IoCompleteRequest (Irp,
                       IO_NO_INCREMENT
                       );

    D12_DecrementIoCount(DeviceObject);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品原创巨作av| 亚洲欧美一区二区三区极速播放 | 日韩av高清在线观看| 精品婷婷伊人一区三区三| 一区二区三区高清在线| 欧美中文字幕一区| 日本 国产 欧美色综合| 精品av综合导航| 丁香激情综合国产| 亚洲精品免费看| 51精品久久久久久久蜜臀| 麻豆91在线观看| 欧美激情在线免费观看| 日本道在线观看一区二区| 日韩国产一区二| 欧美高清在线一区二区| 在线免费亚洲电影| 国产一区二区影院| 亚洲激情在线激情| 日韩一区二区免费在线电影| 激情五月播播久久久精品| 国产精品久久久99| 宅男噜噜噜66一区二区66| 国产资源精品在线观看| 亚洲日穴在线视频| 91精品一区二区三区在线观看| 经典一区二区三区| 亚洲免费在线播放| 26uuu精品一区二区在线观看| 波多野洁衣一区| 免费久久精品视频| 中文字幕一区二区三区不卡在线| 777a∨成人精品桃花网| a在线欧美一区| 免费成人在线影院| 亚洲欧美另类久久久精品| 日韩一区二区在线看| 91亚洲永久精品| 黄色精品一二区| 亚洲在线中文字幕| 国产欧美一区二区精品性色超碰 | 亚洲18色成人| 国产精品美女久久久久久久久久久| 欧美性高清videossexo| 国产一区二区毛片| 秋霞电影一区二区| 一区二区在线观看免费| 国产欧美日韩精品一区| 欧美www视频| 欧美日韩一区在线观看| 成人福利视频在线| 韩国成人在线视频| 美日韩一区二区三区| 一区二区三区四区乱视频| 国产亚洲精品久| 日韩欧美精品三级| 欧美精品乱人伦久久久久久| 不卡一区二区中文字幕| 韩国欧美国产1区| 久久精品国产亚洲一区二区三区 | 日韩一区二区视频| 欧美视频精品在线| 91麻豆福利精品推荐| 色婷婷狠狠综合| eeuss鲁片一区二区三区在线看| 精品一区二区三区久久| 久久av资源网| 极品销魂美女一区二区三区| 亚洲成av人片www| 一区二区三区精密机械公司| 亚洲精品一二三| 成人免费在线视频| 国产精品不卡在线观看| 国产精品欧美一级免费| 中文字幕免费不卡| 国产精品乱码久久久久久| 久久精品亚洲精品国产欧美kt∨| 欧美xxxxxxxxx| 精品电影一区二区| 国产性天天综合网| 国产午夜精品久久久久久久| 久久噜噜亚洲综合| 久久久99久久精品欧美| xvideos.蜜桃一区二区| 久久久久久电影| 国产日韩欧美a| 亚洲视频 欧洲视频| 亚洲美女精品一区| 亚洲自拍偷拍麻豆| 丝袜a∨在线一区二区三区不卡| 亚洲成a人片在线不卡一二三区| 一区二区三区精密机械公司| 亚洲成人综合在线| 精品一区二区日韩| 国产一区二区导航在线播放| 国产精品亚洲专一区二区三区 | 国产日韩欧美一区二区三区乱码 | 亚洲乱码国产乱码精品精98午夜| 亚洲三级电影网站| 午夜欧美电影在线观看| 无吗不卡中文字幕| 精品一区二区三区影院在线午夜| 国产大陆亚洲精品国产| 成人免费高清在线观看| 91麻豆产精品久久久久久| 在线亚洲一区观看| 日韩亚洲欧美一区二区三区| 精品少妇一区二区三区视频免付费 | 国产原创一区二区| 99久久免费国产| 欧美精品在线观看一区二区| 欧美一级一区二区| 亚洲国产高清在线| 性久久久久久久久| 国产馆精品极品| 欧美三片在线视频观看| 久久噜噜亚洲综合| 亚洲成人动漫av| 国产乱一区二区| 欧洲亚洲精品在线| 久久久久久久综合色一本| 中文字幕日韩精品一区| 日韩精品乱码免费| av电影天堂一区二区在线观看| 精品婷婷伊人一区三区三| 久久久久久日产精品| 亚洲国产人成综合网站| 国产成人激情av| 欧美精品一卡二卡| 国产精品毛片久久久久久久| 蜜臀久久久99精品久久久久久| 99精品国产99久久久久久白柏| 欧美日韩视频在线一区二区| 国产精品狼人久久影院观看方式| 日韩综合一区二区| 91在线观看地址| 久久奇米777| 日韩成人午夜精品| 在线亚洲一区二区| 国产精品进线69影院| 国产在线精品一区二区夜色| 欧美午夜理伦三级在线观看| 五月天视频一区| 欧美午夜精品久久久久久孕妇| 中文字幕精品—区二区四季| 精品无人码麻豆乱码1区2区| 欧美日本精品一区二区三区| 国产精品免费aⅴ片在线观看| 激情综合网av| 欧美精品乱码久久久久久| 亚洲欧美日韩久久精品| 成人aa视频在线观看| 久久精子c满五个校花| 久久精品国产网站| 欧美va在线播放| 青草国产精品久久久久久| 欧美美女黄视频| 亚洲午夜免费福利视频| 日本电影欧美片| 一区二区三区在线免费播放| 91在线视频网址| 亚洲视频在线一区二区| 成人av集中营| 国产精品成人免费在线| 成人免费高清在线观看| 久久久久免费观看| 国产一区不卡视频| 久久久99精品久久| 国产成人三级在线观看| 久久久国际精品| 国产成人av网站| 国产精品美女视频| 色先锋资源久久综合| 亚洲乱码国产乱码精品精小说| 欧美综合视频在线观看| 亚洲第一主播视频| 欧美一区二区三区婷婷月色| 男人操女人的视频在线观看欧美| 欧美一区二区三区公司| 麻豆freexxxx性91精品| 久久久久久久国产精品影院| 成人蜜臀av电影| 亚洲日韩欧美一区二区在线| 欧美伊人久久大香线蕉综合69| 亚洲综合成人网| 日韩一二在线观看| 国模大尺度一区二区三区| 国产精品人成在线观看免费 | 精品99久久久久久| 顶级嫩模精品视频在线看| 亚洲人午夜精品天堂一二香蕉| 色综合色狠狠综合色| 日韩电影在线看| 精品黑人一区二区三区久久| 国产ts人妖一区二区| 亚洲欧美日韩国产中文在线| 91精品久久久久久蜜臀| 激情综合五月婷婷| 亚洲免费看黄网站| 日韩精品中文字幕一区二区三区 |