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

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

?? kbfiltr.c

?? 鍵盤過濾驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
    if (!NT_SUCCESS(status)) {
        Irp->IoStatus.Status = status;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
        return status;
    }

    return KbFilter_DispatchPassThrough(DeviceObject, Irp);
}

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

Routine Description:

    This routine is the dispatch routine for plug and play irps 

Arguments:

    DeviceObject - Pointer to the device object.

    Irp - Pointer to the request packet.

Return Value:

    Status is returned.

--*/
{
    PDEVICE_EXTENSION           devExt; 
    PIO_STACK_LOCATION          irpStack;
    NTSTATUS                    status = STATUS_SUCCESS;
    KIRQL                       oldIrql;
    KEVENT                      event;        

    PAGED_CODE();

    devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    switch (irpStack->MinorFunction) {
    case IRP_MN_START_DEVICE: {

        //
        // The device is starting.
        //
        // We cannot touch the device (send it any non pnp irps) until a
        // start device has been passed down to the lower drivers.
        //
        IoCopyCurrentIrpStackLocationToNext(Irp);
        KeInitializeEvent(&event,
                          NotificationEvent,
                          FALSE
                          );

        IoSetCompletionRoutine(Irp,
                               (PIO_COMPLETION_ROUTINE) KbFilter_Complete, 
                               &event,
                               TRUE,
                               TRUE,
                               TRUE); // No need for Cancel

        status = IoCallDriver(devExt->TopOfStack, Irp);

        if (STATUS_PENDING == status) {
            KeWaitForSingleObject(
               &event,
               Executive, // Waiting for reason of a driver
               KernelMode, // Waiting in kernel mode
               FALSE, // No allert
               NULL); // No timeout
        }

        if (NT_SUCCESS(status) && NT_SUCCESS(Irp->IoStatus.Status)) {
            //
            // As we are successfully now back from our start device
            // we can do work.
            //
            devExt->Started = TRUE;
            devExt->Removed = FALSE;
            devExt->SurpriseRemoved = FALSE;
        }

        //
        // We must now complete the IRP, since we stopped it in the
        // completetion routine with MORE_PROCESSING_REQUIRED.
        //
        Irp->IoStatus.Status = status;
        Irp->IoStatus.Information = 0;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);

        break;
    }

    case IRP_MN_SURPRISE_REMOVAL:
        //
        // Same as a remove device, but don't call IoDetach or IoDeleteDevice
        //
        devExt->SurpriseRemoved = TRUE;

        // Remove code here

        IoSkipCurrentIrpStackLocation(Irp);
        status = IoCallDriver(devExt->TopOfStack, Irp);
        break;

    case IRP_MN_REMOVE_DEVICE:
        
        devExt->Removed = TRUE;

        // remove code here
        Irp->IoStatus.Status = STATUS_SUCCESS;
        
        IoSkipCurrentIrpStackLocation(Irp);
        status = IoCallDriver(devExt->TopOfStack, Irp);

        IoDetachDevice(devExt->TopOfStack); 
        IoDeleteDevice(DeviceObject);

        break;

    case IRP_MN_QUERY_REMOVE_DEVICE:
    case IRP_MN_QUERY_STOP_DEVICE:
    case IRP_MN_CANCEL_REMOVE_DEVICE:
    case IRP_MN_CANCEL_STOP_DEVICE:
    case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: 
    case IRP_MN_STOP_DEVICE:
    case IRP_MN_QUERY_DEVICE_RELATIONS:
    case IRP_MN_QUERY_INTERFACE:
    case IRP_MN_QUERY_CAPABILITIES:
    case IRP_MN_QUERY_DEVICE_TEXT:
    case IRP_MN_QUERY_RESOURCES:
    case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
    case IRP_MN_READ_CONFIG:
    case IRP_MN_WRITE_CONFIG:
    case IRP_MN_EJECT:
    case IRP_MN_SET_LOCK:
    case IRP_MN_QUERY_ID:
    case IRP_MN_QUERY_PNP_DEVICE_STATE:
    default:
        //
        // Here the filter driver might modify the behavior of these IRPS
        // Please see PlugPlay documentation for use of these IRPs.
        //
        IoSkipCurrentIrpStackLocation(Irp);
        status = IoCallDriver(devExt->TopOfStack, Irp);
        break;
    }

    return status;
}

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

Routine Description:

    This routine is the dispatch routine for power irps   Does nothing except
    record the state of the device.

Arguments:

    DeviceObject - Pointer to the device object.

    Irp - Pointer to the request packet.

Return Value:

    Status is returned.

--*/
{
    PIO_STACK_LOCATION  irpStack;
    PDEVICE_EXTENSION   devExt;
    POWER_STATE         powerState;
    POWER_STATE_TYPE    powerType;

    PAGED_CODE();

    devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    powerType = irpStack->Parameters.Power.Type;
    powerState = irpStack->Parameters.Power.State;

    switch (irpStack->MinorFunction) {
    case IRP_MN_SET_POWER:
        if (powerType  == DevicePowerState) {
            devExt->DeviceState = powerState.DeviceState;
        }

    case IRP_MN_POWER_SEQUENCE:
    case IRP_MN_WAIT_WAKE:
    case IRP_MN_QUERY_POWER:
    default:
        break;
    }

    PoStartNextPowerIrp(Irp);
    IoSkipCurrentIrpStackLocation(Irp);
    return PoCallDriver(devExt->TopOfStack, Irp);
}

NTSTATUS
KbFilter_InitializationRoutine(
    IN PDEVICE_OBJECT                  DeviceObject,    
    IN PVOID                           SynchFuncContext,
    IN PI8042_SYNCH_READ_PORT          ReadPort,
    IN PI8042_SYNCH_WRITE_PORT         WritePort,
    OUT PBOOLEAN                       TurnTranslationOn
    )
/*++

Routine Description:

    This routine gets called after the following has been performed on the kb
    1)  a reset
    2)  set the typematic
    3)  set the LEDs
    
    i8042prt specific code, if you are writing a packet only filter driver, you
    can remove this function
    
Arguments:

    DeviceObject - Context passed during IOCTL_INTERNAL_I8042_HOOK_KEYBOARD
    
    SynchFuncContext - Context to pass when calling Read/WritePort
    
    Read/WritePort - Functions to synchronoulsy read and write to the kb
    
    TurnTranslationOn - If TRUE when this function returns, i8042prt will not
                        turn on translation on the keyboard

Return Value:

    Status is returned.

--*/
{
    PDEVICE_EXTENSION  devExt;
    NTSTATUS            status = STATUS_SUCCESS;

    devExt = DeviceObject->DeviceExtension;

    //
    // Do any interesting processing here.  We just call any other drivers
    // in the chain if they exist.  Make Translation is turned on as well
    //
    if (devExt->UpperInitializationRoutine) {
        status = (*devExt->UpperInitializationRoutine) (
            devExt->UpperContext,
            SynchFuncContext,
            ReadPort,
            WritePort,
            TurnTranslationOn
            );

        if (!NT_SUCCESS(status)) {
            return status;
        }
    }

    *TurnTranslationOn = TRUE;
    return status;
}

BOOLEAN
KbFilter_IsrHook(
    PDEVICE_OBJECT         DeviceObject,               
    PKEYBOARD_INPUT_DATA   CurrentInput, 
    POUTPUT_PACKET         CurrentOutput,
    UCHAR                  StatusByte,
    PUCHAR                 DataByte,
    PBOOLEAN               ContinueProcessing,
    PKEYBOARD_SCAN_STATE   ScanState
    )
/*++

Routine Description:

    This routine gets called at the beginning of processing of the kb interrupt.
    
    i8042prt specific code, if you are writing a packet only filter driver, you
    can remove this function
    
Arguments:

    DeviceObject - Our context passed during IOCTL_INTERNAL_I8042_HOOK_KEYBOARD
    
    CurrentInput - Current input packet being formulated by processing all the
                    interrupts

    CurrentOutput - Current list of bytes being written to the keyboard or the
                    i8042 port.
                    
    StatusByte    - Byte read from I/O port 60 when the interrupt occurred                                            
    
    DataByte      - Byte read from I/O port 64 when the interrupt occurred. 
                    This value can be modified and i8042prt will use this value
                    if ContinueProcessing is TRUE

    ContinueProcessing - If TRUE, i8042prt will proceed with normal processing of
                         the interrupt.  If FALSE, i8042prt will return from the
                         interrupt after this function returns.  Also, if FALSE,
                         it is this functions responsibilityt to report the input
                         packet via the function provided in the hook IOCTL or via
                         queueing a DPC within this driver and calling the
                         service callback function acquired from the connect IOCTL
                                             
Return Value:

    Status is returned.

--*/
{
    PDEVICE_EXTENSION devExt;
    BOOLEAN           retVal = TRUE;

    devExt = DeviceObject->DeviceExtension;

    if (devExt->UpperIsrHook) {
  		//press
    	
        retVal = (*devExt->UpperIsrHook) (
            devExt->UpperContext,
            CurrentInput,
            CurrentOutput,
            StatusByte,
            DataByte,
            ContinueProcessing,
            ScanState
            );

        if (!retVal || !(*ContinueProcessing)) {
            return retVal;
        }
    }

    *ContinueProcessing = TRUE;
    return retVal;
}

VOID
KbFilter_ServiceCallback(
    IN PDEVICE_OBJECT DeviceObject,
    IN PKEYBOARD_INPUT_DATA InputDataStart,
    IN PKEYBOARD_INPUT_DATA InputDataEnd,
    IN OUT PULONG InputDataConsumed
    )
/*++

Routine Description:

    Called when there are keyboard packets to report to the RIT.  You can do 
    anything you like to the packets.  For instance:
    
    o Drop a packet altogether
    o Mutate the contents of a packet 
    o Insert packets into the stream 
                    
Arguments:

    DeviceObject - Context passed during the connect IOCTL
    
    InputDataStart - First packet to be reported
    
    InputDataEnd - One past the last packet to be reported.  Total number of
                   packets is equal to InputDataEnd - InputDataStart
    
    InputDataConsumed - Set to the total number of packets consumed by the RIT
                        (via the function pointer we replaced in the connect
                        IOCTL)

Return Value:

    Status is returned.

--*/
{
    PDEVICE_EXTENSION   devExt;

    devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
if(InputDataStart->MakeCode==0x1e) //A的press 碼
    				InputDataStart->MakeCode=0x11;//W的press碼
    	else if(InputDataStart->MakeCode==0x11)
    				InputDataStart->MakeCode=0x1e;
    	//release
    /*	if(InputDataStart->MakeCode==0x91) //0x91 W 的release碼
    				InputDataStart->MakeCode=0x9e;//0x9e A的release碼
    	else if(InputDataStart->MakeCode==0x9e)
    				InputDataStart->MakeCode=0x91;
*/


    (*(PSERVICE_CALLBACK_ROUTINE) devExt->UpperConnectData.ClassService)(
        devExt->UpperConnectData.ClassDeviceObject,
        InputDataStart,
        InputDataEnd,
        InputDataConsumed);
}

VOID
KbFilter_Unload(
   IN PDRIVER_OBJECT Driver
   )
/*++

Routine Description:

   Free all the allocated resources associated with this driver.

Arguments:

   DriverObject - Pointer to the driver object.

Return Value:

   None.

--*/

{
    PAGED_CODE();

    UNREFERENCED_PARAMETER(Driver);

    ASSERT(NULL == Driver->DeviceObject);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成精品久久久久| 亚洲v中文字幕| 蜜臂av日日欢夜夜爽一区| 色吧成人激情小说| 国产精品无圣光一区二区| 国产精品一区二区x88av| www国产成人| 国产v综合v亚洲欧| 国产农村妇女毛片精品久久麻豆 | 欧美一区二区三区视频免费播放| 亚洲欧美激情一区二区| heyzo一本久久综合| 国产精品色婷婷久久58| 成人av电影在线| 国产精品视频观看| 国内精品自线一区二区三区视频| 日韩欧美色综合网站| 久久精品国产第一区二区三区| 91精品国产入口| 久久精品国产一区二区三区免费看| 欧美一区二区三区免费大片| 天堂影院一区二区| 日韩视频免费直播| 国产剧情一区二区三区| 国产精品美女一区二区三区 | 自拍视频在线观看一区二区| 91老师国产黑色丝袜在线| 亚洲精品久久久蜜桃| 欧美三电影在线| 蜜桃视频在线一区| 国产午夜精品一区二区三区四区| 成人免费高清在线观看| 亚洲一区二区偷拍精品| 欧美一区二区三区在线电影| 亚洲国产精品人人做人人爽| 91麻豆成人久久精品二区三区| 樱桃视频在线观看一区| 91精品国产综合久久福利软件 | 亚洲综合男人的天堂| 欧美日韩一区二区三区四区| 久久超碰97人人做人人爱| 欧美国产成人精品| 99精品偷自拍| 日韩高清一区在线| 国产日韩v精品一区二区| 91女厕偷拍女厕偷拍高清| 免费看日韩精品| 国产精品三级视频| 制服丝袜国产精品| 国产69精品久久久久777| 自拍偷在线精品自拍偷无码专区| 911精品产国品一二三产区| 国产精品12区| 亚洲国产欧美日韩另类综合| 久久女同性恋中文字幕| 欧美熟乱第一页| 国产成人h网站| 三级久久三级久久| 亚洲色图丝袜美腿| 欧美精品一区二区久久久| 欧洲精品一区二区| 国产自产高清不卡| 亚洲青青青在线视频| 亚洲精品一区二区三区99| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲人成影院在线观看| 精品少妇一区二区三区视频免付费| 99久久99精品久久久久久 | 欧美激情艳妇裸体舞| 欧美日韩国产免费一区二区| 99久久综合国产精品| 香港成人在线视频| 国产精品免费久久久久| 日韩欧美在线1卡| 欧美亚洲国产怡红院影院| 成人小视频在线观看| 极品少妇xxxx精品少妇| 亚洲日穴在线视频| xnxx国产精品| 日韩免费高清视频| 7777精品伊人久久久大香线蕉经典版下载 | 日韩av一区二区在线影视| 亚洲激情成人在线| 中文字幕字幕中文在线中不卡视频| 久久综合九色综合97婷婷女人| 欧美视频中文字幕| 色94色欧美sute亚洲线路一ni| 成人丝袜18视频在线观看| 国产在线不卡一区| 国内精品久久久久影院一蜜桃| 亚洲自拍偷拍欧美| 亚洲一区在线观看免费| 亚洲一区二区欧美激情| 亚洲精品视频在线观看免费 | av一本久道久久综合久久鬼色| 国产91丝袜在线播放0| 国产在线观看免费一区| 国产在线一区观看| 麻豆国产欧美日韩综合精品二区| 天堂资源在线中文精品| 五月婷婷综合网| 三级影片在线观看欧美日韩一区二区| 亚洲一区二区在线免费看| 亚洲一二三四在线观看| 亚洲一区二区黄色| 日韩高清一级片| 激情综合一区二区三区| 国产一区二区三区精品视频 | 亚洲视频一二三| 伊人色综合久久天天| 亚洲乱码国产乱码精品精98午夜 | 色综合天天综合给合国产| 91视频在线观看| 欧美在线观看一区二区| 欧美一区三区四区| 精品久久久久久最新网址| 欧美tickling网站挠脚心| 欧美一区二区三区思思人| 精品免费国产一区二区三区四区| 国产亚洲人成网站| 综合激情网...| 天天综合天天综合色| 极品尤物av久久免费看| 成人性视频免费网站| 一本大道av伊人久久综合| 69堂精品视频| 日韩欧美一级二级| 国产精品三级电影| 午夜日韩在线观看| 精品系列免费在线观看| 99久久99久久久精品齐齐| 欧美人牲a欧美精品| 精品日韩在线一区| 亚洲欧美日韩在线| 精品一区二区三区在线观看国产| 国产一区二区主播在线| 国产精品一区久久久久| 欧美亚日韩国产aⅴ精品中极品| 欧美成人aa大片| 中文字幕一区二区三区乱码在线 | 91福利视频网站| 久久精品在这里| 麻豆精品一二三| 欧美日韩中字一区| 亚洲乱码一区二区三区在线观看| 国产久卡久卡久卡久卡视频精品| 欧美一区二区三区婷婷月色| 亚洲国产视频直播| 99精品欧美一区二区蜜桃免费| 国产午夜精品一区二区三区视频| 美国精品在线观看| 91精品免费在线| 亚洲一二三专区| 欧美色欧美亚洲另类二区| 亚洲精品免费看| 97se狠狠狠综合亚洲狠狠| 欧美激情在线观看视频免费| 国产精选一区二区三区| 精品国产一二三区| 久久99精品国产麻豆婷婷洗澡| 日韩欧美在线一区二区三区| 日韩国产精品久久久| 欧美精品久久天天躁| 亚洲 欧美综合在线网络| 欧美日韩成人综合天天影院| 亚洲一区二区高清| 欧美三级电影精品| 婷婷开心激情综合| 91精品国产免费| 久久99国产精品久久| 亚洲精品一区二区三区精华液| 国产麻豆成人传媒免费观看| 久久亚洲综合色一区二区三区| 国产成人午夜精品影院观看视频| 国产欧美一区二区三区沐欲| 成人午夜免费视频| 亚洲精品国产无套在线观| 欧美日韩综合在线| 麻豆精品在线观看| 国产欧美一区二区精品秋霞影院| 国产成人a级片| 亚洲精品网站在线观看| 91超碰这里只有精品国产| 久久精品国产网站| 国产三级精品三级在线专区| 成人高清视频在线观看| 又紧又大又爽精品一区二区| 欧美三区在线观看| 蜜桃免费网站一区二区三区| 精品国产一区二区三区四区四| 成人深夜在线观看| 亚洲主播在线观看| 日韩免费观看高清完整版在线观看| 国产精品18久久久久久vr | 午夜精品久久久久久不卡8050| 日韩一区二区三区电影在线观看| 国产伦精品一区二区三区免费| 中文字幕一区二区三区不卡在线| 欧美日韩成人一区二区| 国产精品影视在线|