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

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

?? wrapper.c

?? This is a serial mouse driver, which is compliant with Plug and Play, supports dynamic detection (vi
?? C
字號(hào):
/*++


Copyright (c) 1997-1998 Microsoft Corporation, All Rights Reserved

Module Name:

    wrapper.c

Abstract:

    Wraps all IOCTL based requests into nice self contained functions

Environment:

    Kernel mode only.

Notes:

Revision History:

--*/

#include "mouser.h"
#include "debug.h"

#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE,SerialMouseSetFifo)
#pragma alloc_text(PAGE,SerialMouseGetLineCtrl)
#pragma alloc_text(PAGE,SerialMouseSetLineCtrl)
#pragma alloc_text(PAGE,SerialMouseGetModemCtrl)
#pragma alloc_text(PAGE,SerialMouseSetModemCtrl)
#pragma alloc_text(PAGE,SerialMouseGetBaudRate)
#pragma alloc_text(PAGE,SerialMouseSetBaudRate)
#pragma alloc_text(PAGE,SerialMouseReadChar)
#pragma alloc_text(PAGE,SerialMouseWriteChar)
#pragma alloc_text(PAGE,SerialMouseWriteString)
#endif // ALLOC_PRAGMA

//
// Constants
//

//
// unknown
//
NTSTATUS
SerialMouseSetFifo(
    PDEVICE_EXTENSION DeviceExtension,
    UCHAR             Value
    )
/*++

Routine Description:

    Set the FIFO register.

Arguments:

    Port - Pointer to the serial port.

    Value - The FIFO control mask.

Return Value:

    None.

--*/
{
    ULONG               fifo = Value; 
    IO_STATUS_BLOCK     iosb;
    KEVENT              event;
    NTSTATUS            status;

    Print(DeviceExtension, DBG_UART_TRACE, ("Fifo, enter\n"));

    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_SET_FIFO_CONTROL,
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        &fifo,
        sizeof(ULONG),
        NULL,
        0);

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
       Print(DeviceExtension, DBG_UART_ERROR, ("Fifo failed (%x)\n", status));
    }

    return status;
}

NTSTATUS
SerialMouseGetLineCtrl(
    PDEVICE_EXTENSION       DeviceExtension,
    PSERIAL_LINE_CONTROL    SerialLineControl
    )
/*++

Routine Description:

    Get the serial port line control register.

Arguments:

    Port - Pointer to the serial port.

Return Value:

    Serial port line control value.

--*/
{
    IO_STATUS_BLOCK     iosb;
    KEVENT              event;
    NTSTATUS            status;

    Print(DeviceExtension, DBG_UART_TRACE, ("GetLineCtrl enter\n"));

    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_GET_LINE_CONTROL,
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        NULL,
        0,
        SerialLineControl,
        sizeof(SERIAL_LINE_CONTROL));

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("GetLineCtrl failed! (%x)\n", status));
    }

    Print(DeviceExtension, DBG_UART_TRACE,
          ("GetLineCtrl exit (%x)\n", status));

    return status;
}

NTSTATUS
SerialMouseSetLineCtrl(
    PDEVICE_EXTENSION       DeviceExtension, 
    PSERIAL_LINE_CONTROL    SerialLineControl
    )
/*++

Routine Description:

    Set the serial port line control register.

Arguments:

    Port - Pointer to the serial port.

    Value - New line control value.

Return Value:

    Previous serial line control register value.

--*/
{
    IO_STATUS_BLOCK     iosb;
    KEVENT              event;
    NTSTATUS            status;

    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_SET_LINE_CONTROL,
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        SerialLineControl,
        sizeof(SERIAL_LINE_CONTROL),
        NULL,
        0);

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("SetLineCtrl failed (%x)\n", status));
    }

    Print(DeviceExtension, DBG_UART_TRACE,
          ("SetLineCtrl exit (%x)\n", status));

    return status;
}

NTSTATUS
SerialMouseGetModemCtrl(
    PDEVICE_EXTENSION   DeviceExtension,
    PULONG              ModemCtrl
    )
/*++

Routine Description:

    Get the serial port modem control register.

Arguments:

    Port - Pointer to the serial port.

Return Value:

    Serial port modem control register value.

--*/
{
    IO_STATUS_BLOCK     iosb;
    KEVENT              event;
    NTSTATUS            status;

    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_GET_MODEM_CONTROL,
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        NULL,
        0,
        ModemCtrl,
        sizeof(ULONG));

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("GetModemCtrl failed! (%x)\n", status));
    }

    Print(DeviceExtension, DBG_UART_TRACE,
          ("GetModemCtrl exit (%x)\n", status));

    return status; 
}

//
// unknown
//
NTSTATUS
SerialMouseSetModemCtrl(
    PDEVICE_EXTENSION DeviceExtension,
    ULONG             Value,
    PULONG            OldValue          OPTIONAL
    )
/*++

Routine Description:

    Set the serial port modem control register.

Arguments:

    Port - Pointer to the serial port.

Return Value:

    Previous modem control register value.

--*/
{
    IO_STATUS_BLOCK     iosb;
    KEVENT              event;
    NTSTATUS            status;

    Print(DeviceExtension, DBG_UART_TRACE, ("SetModemCtrl enter\n"));

    if (ARGUMENT_PRESENT(OldValue)) {
        SerialMouseGetModemCtrl(DeviceExtension, OldValue);
    }

    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_SET_MODEM_CONTROL,
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        &Value,
        sizeof(ULONG),
        NULL,
        0);

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("SetModemCtrl failed!  (%x)\n", status));
    }

    Print(DeviceExtension, DBG_UART_TRACE,
          ("SetModemCtrl exit (%x)\n", status));

    return status; 
}

NTSTATUS
SerialMouseGetBaudRate(
    PDEVICE_EXTENSION DeviceExtension,
    PULONG            BaudRate
    )
/*++

Routine Description:

    Get the serial port baud rate setting.

Arguments:

    Port - Pointer to the serial port.

    BaudClock - The external frequency driving the serial chip.

Return Value:

    Serial port baud rate.

--*/
{
    SERIAL_BAUD_RATE    sbr;
    IO_STATUS_BLOCK     iosb;
    KEVENT              event;
    NTSTATUS            status;

    Print(DeviceExtension, DBG_UART_TRACE, ("GetBaud enter\n"));
    
    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_GET_BAUD_RATE,
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        NULL,
        0,
        &sbr,
        sizeof(SERIAL_BAUD_RATE));

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("GetBaud failed (%x)\n", status));
    }
    else {
        *BaudRate = sbr.BaudRate;
    }

    Print(DeviceExtension, DBG_UART_TRACE,
          ("GetBaud exit (%x)\n", status));
    return status;
}

NTSTATUS
SerialMouseSetBaudRate(
    PDEVICE_EXTENSION   DeviceExtension,
    ULONG               BaudRate
    )
/*++

Routine Description:

    Set the serial port baud rate.

Arguments:

    Port - Pointer to the serial port.

    BaudRate - New serial port baud rate.

    BaudClock - The external frequency driving the serial chip.

Return Value:

    None.

--*/
{
    SERIAL_BAUD_RATE    sbr;
    IO_STATUS_BLOCK     iosb;
    KEVENT              event;
    NTSTATUS            status;

    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    sbr.BaudRate = BaudRate;
    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_SET_BAUD_RATE,
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        &sbr,
        sizeof(SERIAL_BAUD_RATE),
        NULL,
        0);

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("SetBaud failed! (%x)\n", status));
    }
    else {
        Print(DeviceExtension, DBG_UART_INFO, ("BaudRate: %d\n", BaudRate));
    }

    return status;
}

NTSTATUS
SerialMouseReadChar(
    PDEVICE_EXTENSION DeviceExtension, 
    PUCHAR            Value
    )
/*++

Routine Description:

    Read a character from the serial port.  Waits until a character has 
    been read or the timeout value is reached.

Arguments:

    Port - Pointer to the serial port.

    Value  - The character read from the serial port input buffer.

    Timeout - The timeout value in milliseconds for the read.

Return Value:

    TRUE if a character has been read, FALSE if a timeout occured.

--*/
{
    NTSTATUS            status;
    USHORT              actual;

    Print(DeviceExtension, DBG_UART_TRACE, ("ReadChar enter\n"));

    status =
        SerialMouseReadSerialPort(DeviceExtension, Value, 1, &actual);

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("ReadChar failed! (%x)\n", status));
    }
    else if (actual != 1) {
        status  = STATUS_UNSUCCESSFUL;
    }
    else {
        Print(DeviceExtension, DBG_UART_NOISE,
              ("ReadChar read %x (actual = %d)\n", (ULONG) *Value, actual));
    }

    Print(DeviceExtension, DBG_UART_TRACE, ("ReadChar exit (%x)\n", status));

    return status;
}

NTSTATUS
SerialMouseFlushReadBuffer(
    PDEVICE_EXTENSION   DeviceExtension
    )
/*++

Routine Description:

    Flush the serial port input buffer.

Arguments:

    Port - Pointer to the serial port.

Return Value:

    TRUE.

--*/
{
    ULONG           bits = SERIAL_PURGE_RXCLEAR;
    NTSTATUS 		status;
	KEVENT			event;
    IO_STATUS_BLOCK iosb;

    Print(DeviceExtension, DBG_UART_TRACE, ("FlushReadBuffer enter\n"));

    KeInitializeEvent(&event,
                      NotificationEvent,
                      FALSE);

    status = SerialMouseIoSyncIoctlEx(
        IOCTL_SERIAL_PURGE, 
        DeviceExtension->TopOfStack, 
        &event,
        &iosb,
        &bits,
        sizeof(ULONG),
        NULL,
        0);

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
       Print(DeviceExtension, DBG_UART_ERROR,
             ("FlushReadBuffer failed! (%x)\n", status));
    }

    Print(DeviceExtension, DBG_UART_TRACE,
          ("FlushReadBuffer exit (%x)\n", status));

    return status;
}

NTSTATUS
SerialMouseWriteChar(
    PDEVICE_EXTENSION   DeviceExtension,
    UCHAR               Value
    )
/*++

Routine Description:

     Write a character to a serial port. Make sure the transmit buffer 
     is empty before we write there.

Arguments:

    Port - Pointer to the serial port.

    Value - Value to write to the serial port.

Return Value:

    TRUE.

--*/
{
    IO_STATUS_BLOCK iosb;
    NTSTATUS        status;

    Print(DeviceExtension, DBG_UART_TRACE, ("WriteChar enter\n"));

    status = SerialMouseWriteSerialPort(
                DeviceExtension,
                &Value,
                1,
                &iosb);

    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("WriteChar failed! (%x)\n", status));
    }

    Print(DeviceExtension, DBG_UART_TRACE, ("WriteChar exit\n"));

    return status;
}

NTSTATUS
SerialMouseWriteString(
    PDEVICE_EXTENSION   DeviceExtension,
    PSZ                 Buffer
    )
/*++

Routine Description:

    Write a zero-terminated string to the serial port.

Arguments:

    Port - Pointer to the serial port.

    Buffer - Pointer to a zero terminated string to write to 
        the serial port.

Return Value:

    TRUE.

--*/
{
    IO_STATUS_BLOCK iosb;
    NTSTATUS        status;

    Print(DeviceExtension, DBG_UART_TRACE, ("WriteString enter\n"));

    status = SerialMouseWriteSerialPort(
                DeviceExtension,
                Buffer,
                strlen(Buffer),
                &iosb);
    if (!NT_SUCCESS(iosb.Status)) {
        status = iosb.Status;
    }

    if (!NT_SUCCESS(status)) {
        Print(DeviceExtension, DBG_UART_ERROR,
              ("WriteString failed! (%x)\n", status));
    }

    Print(DeviceExtension, DBG_UART_TRACE,
          ("WriteString exit (%x)\n", status));

    return status;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲精品在线观看| 欧美一级午夜免费电影| 日本不卡在线视频| 国产精品色婷婷| 在线播放中文一区| 99久久国产综合精品女不卡| 麻豆一区二区99久久久久| 亚洲综合av网| 国产精品网曝门| 精品美女一区二区三区| 欧美日韩国产美女| 91在线视频官网| 国产福利一区二区三区视频| 日韩av电影免费观看高清完整版 | 国产欧美一区二区三区在线看蜜臀| 欧洲在线/亚洲| 成人18精品视频| 久久99精品国产.久久久久久| 亚洲午夜一二三区视频| 亚洲精品一卡二卡| 久久精品亚洲乱码伦伦中文| 日韩一区二区三区在线| 欧美三级中文字幕在线观看| 99视频超级精品| 成人性生交大片免费看中文 | 欧美日韩一二三| 91视频精品在这里| 成人午夜av影视| 国产成人精品免费看| 国产一区 二区| 国产又黄又大久久| 精品亚洲国产成人av制服丝袜| 日韩在线a电影| 亚洲成人自拍一区| 亚洲国产乱码最新视频 | 精品成人在线观看| 日韩免费一区二区| 欧美r级在线观看| 精品对白一区国产伦| 精品欧美一区二区久久| 精品国产免费一区二区三区香蕉| 欧美一区二区三区四区视频| 555www色欧美视频| 欧美一级日韩免费不卡| 日韩欧美一区在线| 精品欧美黑人一区二区三区| 欧美精品一区二区三区很污很色的 | 久久网站最新地址| 精品国产欧美一区二区| 国产女主播一区| 中文字幕亚洲成人| 一区二区视频在线看| 亚洲一区二区三区四区不卡| 性做久久久久久免费观看欧美| 天天操天天色综合| 美女视频免费一区| 国产激情一区二区三区桃花岛亚洲| 国产在线一区观看| 成人avav影音| 欧美午夜精品久久久久久超碰 | 欧美精品一区视频| 中文成人av在线| 亚洲精品一二三| 三级不卡在线观看| 韩国中文字幕2020精品| 成人激情综合网站| 欧美色中文字幕| 欧美电影精品一区二区| 中文字幕在线观看一区二区| 亚洲自拍偷拍图区| 精品一二三四区| 91麻豆成人久久精品二区三区| 欧美性极品少妇| 精品国产免费久久| 亚洲色图.com| 美腿丝袜亚洲一区| 99视频精品免费视频| 这里只有精品免费| 国产精品久久久久久久久免费桃花| 一级中文字幕一区二区| 美女网站在线免费欧美精品| 成人免费看的视频| 91麻豆精品国产综合久久久久久| 精品久久久久香蕉网| 亚洲视频综合在线| 免费xxxx性欧美18vr| jizzjizzjizz欧美| 日韩欧美一卡二卡| 亚洲视频在线一区| 国产一区二区在线影院| 欧美性猛片xxxx免费看久爱| 久久久久国产精品麻豆| 亚洲电影在线播放| 顶级嫩模精品视频在线看| 91精品国产日韩91久久久久久| 国产精品女主播在线观看| 奇米四色…亚洲| 色婷婷av一区| 国产日韩欧美激情| 美女视频黄a大片欧美| 色婷婷激情综合| 国产精品全国免费观看高清 | 91亚洲资源网| 精品国产91乱码一区二区三区| 亚洲国产精品尤物yw在线观看| 国产成人在线看| 日韩午夜在线影院| 亚洲午夜免费视频| 91啪亚洲精品| 国产人久久人人人人爽| 麻豆精品一区二区综合av| 欧美亚洲国产bt| 亚洲精品国产品国语在线app| 国产成人精品亚洲日本在线桃色| 日韩一区二区在线观看| 天天综合色天天综合| 色噜噜偷拍精品综合在线| 国产欧美精品在线观看| 麻豆久久一区二区| 欧美一区二区三区思思人| 亚洲狠狠爱一区二区三区| 色婷婷综合中文久久一本| 日本一区二区三区免费乱视频 | 在线观看91精品国产入口| 最新成人av在线| 丰满少妇久久久久久久| 久久久久久免费毛片精品| 狂野欧美性猛交blacked| 3d成人h动漫网站入口| 五月开心婷婷久久| 欧美日韩国产免费| 亚洲bt欧美bt精品777| 欧美体内she精视频| 亚洲午夜成aⅴ人片| 欧美天堂一区二区三区| 亚洲二区视频在线| 欧美精品电影在线播放| 婷婷综合五月天| 555www色欧美视频| 免费观看日韩电影| 久久综合国产精品| 国产精品538一区二区在线| 国产亚洲精品aa| aaa欧美日韩| 亚洲美女屁股眼交3| 欧美综合一区二区| 三级欧美韩日大片在线看| 日韩亚洲欧美高清| 国产一区视频在线看| 中文字幕va一区二区三区| 波多野结衣精品在线| 亚洲精品国产成人久久av盗摄 | 日韩区在线观看| 韩国v欧美v亚洲v日本v| 26uuu久久综合| 成人性生交大片| 亚洲最快最全在线视频| 在线播放91灌醉迷j高跟美女 | 91精品久久久久久久久99蜜臂| 青青草91视频| 国产日产欧美一区| 色综合久久综合| 青青青爽久久午夜综合久久午夜 | 亚洲国产中文字幕在线视频综合 | 亚洲欧美日韩国产成人精品影院 | 国产麻豆欧美日韩一区| 国产精品理论片| 欧美少妇bbb| 国产一区二区在线观看免费| 中文字幕欧美一| 欧美绝品在线观看成人午夜影视| 久久爱www久久做| 综合网在线视频| 日韩欧美电影一二三| 成人国产精品免费观看动漫| 亚洲国产精品视频| 欧美成人高清电影在线| av色综合久久天堂av综合| 偷拍亚洲欧洲综合| 欧美激情综合网| 欧美日本视频在线| 国产一本一道久久香蕉| 亚洲一区二区av电影| 久久麻豆一区二区| 日本韩国欧美一区| 国产一区高清在线| 亚洲国产精品一区二区久久恐怖片| 久久久久久夜精品精品免费| 欧美在线视频你懂得| 国产裸体歌舞团一区二区| 亚洲国产一区二区a毛片| 久久人人97超碰com| 欧美三电影在线| a级精品国产片在线观看| 美女国产一区二区| 亚洲电影在线免费观看| 中文字幕第一区二区| 日韩视频免费观看高清完整版在线观看| 99精品黄色片免费大全| 久国产精品韩国三级视频|