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

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

?? ioctl.c

?? 微軟的point of sale的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
        case IOCTL_SERIAL_GET_TIMEOUTS: {

            if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(SERIAL_TIMEOUTS)) {
                status = STATUS_BUFFER_TOO_SMALL; 
                break;
            }

            irp->IoStatus.Information = sizeof(SERIAL_TIMEOUTS);
            irp->IoStatus.Status = STATUS_SUCCESS;

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            *(PSERIAL_TIMEOUTS)irp->AssociatedIrp.SystemBuffer = pdoExt->fakeTimeouts;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_SET_TIMEOUTS: {

            if (irpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(SERIAL_TIMEOUTS)) {
                status = STATUS_BUFFER_TOO_SMALL; 
                break;
            }

            irp->IoStatus.Status = STATUS_SUCCESS;

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            pdoExt->fakeTimeouts = *(PSERIAL_TIMEOUTS)irp->AssociatedIrp.SystemBuffer;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_SET_DTR: {

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            pdoExt->fakeDTRRTS |= SERIAL_DTR_STATE;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_CLR_DTR: {

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            pdoExt->fakeDTRRTS &= ~SERIAL_DTR_STATE;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_SET_RTS: {

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            pdoExt->fakeDTRRTS |= SERIAL_RTS_STATE;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_CLR_RTS: {

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            pdoExt->fakeDTRRTS &= ~SERIAL_RTS_STATE;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_GET_DTRRTS: {

            if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG)) {
                status = STATUS_BUFFER_TOO_SMALL;
                break;
            }

            irp->IoStatus.Information = sizeof(ULONG);
            irp->IoStatus.Status = STATUS_SUCCESS;

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            *(PULONG)irp->AssociatedIrp.SystemBuffer = pdoExt->fakeDTRRTS;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_GET_WAIT_MASK: {

            if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG)) {
                status = STATUS_BUFFER_TOO_SMALL; 
                break;
            }

            irp->IoStatus.Information = sizeof(ULONG);
            irp->IoStatus.Status = STATUS_SUCCESS;

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            *(PULONG)irp->AssociatedIrp.SystemBuffer = pdoExt->waitMask;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_SET_WAIT_MASK: {

            ULONG mask = *(PULONG)irp->AssociatedIrp.SystemBuffer;

            if (irpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ULONG)) {
                status = STATUS_BUFFER_TOO_SMALL; 
                break;
            }

            if (mask & ~(SERIAL_EV_RXCHAR | SERIAL_EV_RXFLAG | SERIAL_EV_TXEMPTY  | SERIAL_EV_CTS
                       | SERIAL_EV_DSR    | SERIAL_EV_RLSD   | SERIAL_EV_BREAK    | SERIAL_EV_ERR
                       | SERIAL_EV_RING   | SERIAL_EV_PERR   | SERIAL_EV_RX80FULL | SERIAL_EV_EVENT1
                       | SERIAL_EV_EVENT2)) {
                status = STATUS_INVALID_PARAMETER;
                break;
            }

            CompletePendingWaitIrps(pdoExt, 0);

            irp->IoStatus.Status = STATUS_SUCCESS;

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            pdoExt->waitMask = mask;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_WAIT_ON_MASK: {

            if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG)) {
                status = STATUS_BUFFER_TOO_SMALL; 
                break;
            }

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            if(pdoExt->currentMask || !pdoExt->waitMask) {
                irp->IoStatus.Information = sizeof(ULONG);
                irp->IoStatus.Status = STATUS_SUCCESS;

                *(PULONG)irp->AssociatedIrp.SystemBuffer = pdoExt->currentMask;
                pdoExt->currentMask = 0;
                KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
                return status;
            }
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);

            status = EnqueueWaitIrp(pdoExt, irp);
            break;
        }

        case IOCTL_SERIAL_GET_CHARS: {

            if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(SERIAL_CHARS)) {
                status = STATUS_BUFFER_TOO_SMALL; 
                break;
            }

            irp->IoStatus.Information = sizeof(SERIAL_CHARS);
            irp->IoStatus.Status = STATUS_SUCCESS;

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            *(PSERIAL_CHARS)irp->AssociatedIrp.SystemBuffer = pdoExt->specialChars;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        case IOCTL_SERIAL_SET_CHARS: {

            if (irpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(SERIAL_CHARS)) {
                status = STATUS_BUFFER_TOO_SMALL; 
                break;
            }

            irp->IoStatus.Status = STATUS_SUCCESS;

            KeAcquireSpinLock(&pdoExt->devExtSpinLock, &oldIrql);
            pdoExt->specialChars = *(PSERIAL_CHARS)irp->AssociatedIrp.SystemBuffer;
            KeReleaseSpinLock(&pdoExt->devExtSpinLock, oldIrql);
            break;
        }

        default:
            DBGVERBOSE(("Ioctl: ??? (%xh)", (ULONG)irpSp->Parameters.DeviceIoControl.IoControlCode));
            status = irp->IoStatus.Status;
            break;
    }

    return status;
}


NTSTATUS QueryDeviceName(POSPDOEXT *pdoExt, PIRP irp)
{
    NTSTATUS status;
    PIO_STACK_LOCATION irpSp;
    HANDLE hRegDevice;

    irp->IoStatus.Information = 0;
    irpSp = IoGetCurrentIrpStackLocation(irp);

    status = IoOpenDeviceRegistryKey(pdoExt->parentFdoExt->physicalDevObj, 
                                     PLUGPLAY_REGKEY_DRIVER, 
                                     KEY_READ, 
                                     &hRegDevice);
    if (NT_SUCCESS(status)) {

        UNICODE_STRING keyName;
        PKEY_VALUE_FULL_INFORMATION keyValueInfo;
        ULONG keyValueTotalSize, actualLength;
        PWCHAR valueData;

        WCHAR deviceKeyName[] = L"DriverDesc";
        RtlInitUnicodeString(&keyName, deviceKeyName); 

        keyValueTotalSize = sizeof(KEY_VALUE_FULL_INFORMATION) + (keyName.Length + MAX_BUFFER)*sizeof(WCHAR);

        keyValueInfo = ALLOCPOOL(PagedPool, keyValueTotalSize);
        if (keyValueInfo) {
            status = ZwQueryValueKey(hRegDevice,
                                     &keyName,
                                     KeyValueFullInformation,
                                     keyValueInfo,
                                     keyValueTotalSize,
                                     &actualLength); 
            if (NT_SUCCESS(status)) {
                ASSERT(keyValueInfo->Type == REG_SZ);

                valueData = (PWCHAR)((PCHAR)keyValueInfo + keyValueInfo->DataOffset);

                DBGVERBOSE(("Device Name is of Length: %xh.", keyValueInfo->DataLength));               

                if (irpSp->Parameters.DeviceIoControl.OutputBufferLength < keyValueInfo->DataLength)
                    status = STATUS_BUFFER_TOO_SMALL; 
                else {
                    irp->IoStatus.Information = keyValueInfo->DataLength;
                    wcscpy((PWCHAR)irp->AssociatedIrp.SystemBuffer, valueData);
                }
            }
            else
                DBGVERBOSE(("QueryDeviceName: Device Name not found. ZwQueryValueKey failed with %xh.", status));

            FREEPOOL(keyValueInfo);
        }
        else 
            ASSERT(keyValueInfo);

        ZwClose(hRegDevice);
    }
    else 
        DBGERR(("QueryDeviceName: IoOpenDeviceRegistryKey failed with %xh.", status));

    return status;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区在线不卡| 国产精品福利电影一区二区三区四区| 欧美一区二区三区思思人| 欧美电影一区二区| 日韩女优av电影| 中文字幕不卡三区| 亚洲成a人片综合在线| 美腿丝袜亚洲一区| 国产风韵犹存在线视精品| 色哦色哦哦色天天综合| 91精品欧美久久久久久动漫 | 色婷婷综合久久久中文一区二区| 在线精品亚洲一区二区不卡| 91精品欧美福利在线观看| 国产日韩精品一区| 天天av天天翘天天综合网| 国产乱国产乱300精品| 欧美综合久久久| 久久久亚洲精品石原莉奈| 亚洲最大色网站| 国产毛片精品视频| 欧美丰满高潮xxxx喷水动漫| 国产欧美精品在线观看| 日韩精品电影在线观看| 99re6这里只有精品视频在线观看| 日韩亚洲欧美在线观看| 亚洲日本va午夜在线影院| 久久成人精品无人区| 色综合久久久久久久久| 国产丝袜美腿一区二区三区| 日韩专区欧美专区| 色一区在线观看| 精品国产91洋老外米糕| 天天影视网天天综合色在线播放| 成人三级在线视频| 精品国产伦一区二区三区观看方式| 夜色激情一区二区| 成人国产精品视频| www国产亚洲精品久久麻豆| 性欧美大战久久久久久久久| 成人美女视频在线看| 精品国产乱码久久久久久久久| 亚洲福利视频导航| 色噜噜狠狠一区二区三区果冻| 久久久五月婷婷| 亚洲一区在线视频| 人禽交欧美网站| 欧美中文字幕一区二区三区亚洲| 欧美国产成人在线| 国产在线精品免费| 日韩女优电影在线观看| 天天色天天爱天天射综合| 91久久久免费一区二区| 自拍偷在线精品自拍偷无码专区 | 久久婷婷一区二区三区| 免费欧美日韩国产三级电影| 欧美日韩卡一卡二| 亚洲成人你懂的| 91豆麻精品91久久久久久| 成人免费一区二区三区在线观看| 国产.欧美.日韩| 欧美经典一区二区三区| 风间由美性色一区二区三区| 久久网这里都是精品| 韩国理伦片一区二区三区在线播放| 欧美日韩的一区二区| 五月天激情综合网| 欧美麻豆精品久久久久久| 亚洲成av人片在线| 精品视频123区在线观看| 亚洲一区二区欧美| 欧美在线一二三四区| 一区二区三区.www| 欧美色成人综合| 亚洲国产视频在线| 欧美精品乱码久久久久久| 亚洲大片精品永久免费| 欧美日韩黄色影视| 午夜欧美在线一二页| 欧美日韩国产精品成人| 日本不卡在线视频| 欧美电影免费观看高清完整版| 久久国产精品第一页| 久久午夜羞羞影院免费观看| 懂色av一区二区夜夜嗨| 亚洲欧洲日产国码二区| 日本乱人伦一区| 亚洲一区在线观看视频| 91精品国产福利在线观看| 美女一区二区三区在线观看| 欧美不卡视频一区| 国产.欧美.日韩| 樱桃视频在线观看一区| 欧美久久一二三四区| 美女国产一区二区三区| 久久久久久免费| 色综合天天视频在线观看 | 91精品国产麻豆| 国产一区二区毛片| 亚洲色图视频网站| 777午夜精品免费视频| 激情图片小说一区| 国产精品久久久久久久裸模| 欧美无人高清视频在线观看| 秋霞电影网一区二区| 久久先锋影音av| 色婷婷亚洲精品| 美女性感视频久久| 国产精品久久久久影视| 欧美日韩激情在线| 国产成人丝袜美腿| 亚洲已满18点击进入久久| 亚洲精品在线一区二区| 91久久免费观看| 精油按摩中文字幕久久| 亚洲少妇30p| 日韩欧美国产三级| 91一区一区三区| 久久99精品久久久| 日本少妇一区二区| 成人免费高清在线| 日韩不卡手机在线v区| 2023国产一二三区日本精品2022| 91一区二区三区在线播放| 免费成人性网站| 亚洲欧美日韩国产一区二区三区| 日韩限制级电影在线观看| 国产精品乱人伦| 国产精品情趣视频| 亚洲欧美日本在线| 视频一区二区中文字幕| 激情六月婷婷综合| 欧美日韩一区二区三区不卡| 在线综合亚洲欧美在线视频| 粉嫩av亚洲一区二区图片| 色婷婷香蕉在线一区二区| 欧美视频一区二区三区在线观看| 6080午夜不卡| 日本一区二区不卡视频| 一区二区三区中文字幕电影| 亚洲国产一区二区a毛片| 蜜桃一区二区三区在线| av亚洲精华国产精华精| 在线播放日韩导航| 久久精品人人做人人爽97| 最新不卡av在线| 9人人澡人人爽人人精品| 欧洲人成人精品| 亚洲免费伊人电影| 91影视在线播放| 国产欧美日韩精品在线| 中文字幕在线观看不卡| 欧美激情一区三区| 日韩国产欧美三级| 一本高清dvd不卡在线观看| 日韩欧美卡一卡二| 成人高清免费观看| 国产一区二区免费在线| 天天色 色综合| 精品久久久久久久久久久久久久久 | 国产精品乱人伦| 欧美大尺度电影在线| 欧美色电影在线| 在线视频欧美精品| 色综合久久久久久久久| 91精品国产色综合久久不卡电影 | 92国产精品观看| 精品久久久久久久久久久久久久久| 一区二区三区av电影| 91美女视频网站| 一区二区三区产品免费精品久久75| 欧美成人video| 日韩一级二级三级精品视频| 精品三级在线观看| 欧美日韩精品高清| 欧美日韩久久不卡| 精品视频一区二区三区免费| 在线观看一区二区视频| 色爱区综合激月婷婷| 欧美艳星brazzers| 欧美日韩视频在线一区二区| 欧美日韩一区国产| 欧美精品一卡两卡| 日韩一区二区精品| 欧美成人精品1314www| 精品国产网站在线观看| 久久嫩草精品久久久久| 久久久久久久精| 亚洲国产精品精华液ab| 中文字幕五月欧美| 一区二区理论电影在线观看| 亚洲图片自拍偷拍| 无吗不卡中文字幕| 免费久久99精品国产| 国产一区二区三区四区五区美女| 国产福利91精品一区| 91丨九色丨国产丨porny| 色av一区二区| 91精品国产一区二区人妖| 亚洲精品在线网站|