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

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

?? delay.c

?? 這個(gè)是一個(gè)開源項(xiàng)目, 有能力的人可以一起來寫
?? C
字號(hào):
/*
 * $Id: delay.c,v 1.4 2006/06/23 11:44:52 vfrolov Exp $
 *
 * Copyright (c) 2005-2006 Vyacheslav Frolov
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *
 * $Log: delay.c,v $
 * Revision 1.4  2006/06/23 11:44:52  vfrolov
 * Mass replacement pDevExt by pIoPort
 *
 * Revision 1.3  2006/06/21 16:23:57  vfrolov
 * Fixed possible BSOD after one port of pair removal
 *
 * Revision 1.2  2006/01/10 10:17:23  vfrolov
 * Implemented flow control and handshaking
 * Implemented IOCTL_SERIAL_SET_XON and IOCTL_SERIAL_SET_XOFF
 * Added setting of HoldReasons, WaitForImmediate and AmountInOutQueue
 *   fields of SERIAL_STATUS for IOCTL_SERIAL_GET_COMMSTATUS
 *
 * Revision 1.1  2005/08/23 15:30:22  vfrolov
 * Initial revision
 *
 *
 */

#include "precomp.h"
#include "delay.h"

/*
 * FILE_ID used by HALT_UNLESS to put it on BSOD
 */
#define FILE_ID 7

VOID WriteDelayRoutine(
    IN PKDPC pDpc,
    IN PVOID deferredContext,
    IN PVOID systemArgument1,
    IN PVOID systemArgument2)
{
  PC0C_IO_PORT pIoPort;
  PC0C_ADAPTIVE_DELAY pWriteDelay;

  UNREFERENCED_PARAMETER(pDpc);
  UNREFERENCED_PARAMETER(systemArgument1);
  UNREFERENCED_PARAMETER(systemArgument2);

  pIoPort = (PC0C_IO_PORT)deferredContext;
  pWriteDelay = pIoPort->pWriteDelay;

  if (pWriteDelay) {
    LIST_ENTRY queueToComplete;
    KIRQL oldIrql;

    InitializeListHead(&queueToComplete);

    KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);

    if (pWriteDelay->started) {
      NTSTATUS status;

      status = ReadWrite(
          pIoPort->pIoPortRemote, FALSE,
          pIoPort, FALSE,
          &queueToComplete);

      if (status != STATUS_PENDING)
        StopWriteDelayTimer(pWriteDelay);
    }

    KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);

    FdoPortCompleteQueue(&queueToComplete);
  }
}

SIZE_T GetWriteLimit(PC0C_ADAPTIVE_DELAY pWriteDelay)
{
  ULONGLONG curTime;
  ULONGLONG maxFrames;

  HALT_UNLESS(pWriteDelay);

  curTime = KeQueryInterruptTime();

  HALT_UNLESS(pWriteDelay->params.decibits_per_frame);

  maxFrames = ((curTime - pWriteDelay->startTime) * pWriteDelay->params.baudRate)/
          (pWriteDelay->params.decibits_per_frame * 1000000L);

  if (maxFrames < pWriteDelay->sentFrames)
    return 0;

  return (SIZE_T)(maxFrames - pWriteDelay->sentFrames);
}

NTSTATUS AllocWriteDelay(PC0C_IO_PORT pIoPort)
{
  PC0C_ADAPTIVE_DELAY pWriteDelay;

  pWriteDelay = (PC0C_ADAPTIVE_DELAY)ExAllocatePool(NonPagedPool, sizeof(*pWriteDelay));

  if (!pWriteDelay)
    return STATUS_INSUFFICIENT_RESOURCES;

  RtlZeroMemory(pWriteDelay, sizeof(*pWriteDelay));

  KeInitializeTimer(&pWriteDelay->timer);
  KeInitializeDpc(&pWriteDelay->timerDpc, WriteDelayRoutine, pIoPort);

  pIoPort->pWriteDelay = pWriteDelay;

  return STATUS_SUCCESS;
}

VOID FreeWriteDelay(PC0C_IO_PORT pIoPort)
{
  PC0C_ADAPTIVE_DELAY pWriteDelay;

  pWriteDelay = pIoPort->pWriteDelay;

  if (pWriteDelay) {
    pIoPort->pWriteDelay = NULL;
    StopWriteDelayTimer(pWriteDelay);
    ExFreePool(pWriteDelay);
  }
}

VOID SetWriteDelay(PC0C_IO_PORT pIoPort)
{
  PC0C_ADAPTIVE_DELAY pWriteDelay;
  KIRQL oldIrql;
  C0C_DELAY_PARAMS params;
  SERIAL_LINE_CONTROL lineControl;
  PC0C_FDOPORT_EXTENSION pDevExt;

  pWriteDelay = pIoPort->pWriteDelay;

  if (!pWriteDelay)
    return;

  KeAcquireSpinLock(pIoPort->pIoLock, &oldIrql);

  pDevExt = pIoPort->pDevExt;
  HALT_UNLESS(pDevExt);

  KeAcquireSpinLockAtDpcLevel(&pDevExt->controlLock);
  lineControl = pDevExt->lineControl;
  params.baudRate = pDevExt->baudRate.BaudRate;
  KeReleaseSpinLockFromDpcLevel(&pDevExt->controlLock);

  /* Startbit + WordLength */
  params.decibits_per_frame = (1 + lineControl.WordLength) * 10;

  switch (lineControl.Parity) {
  case NO_PARITY:
    break;
  default:
  case ODD_PARITY:
  case EVEN_PARITY:
  case MARK_PARITY:
  case SPACE_PARITY:
    params.decibits_per_frame += 10;
    break;
  }

  switch (lineControl.StopBits) {
  default:
  case STOP_BIT_1:
    params.decibits_per_frame += 10;
    break;
  case STOP_BITS_1_5:
    params.decibits_per_frame += 15;
    break;
  case STOP_BITS_2:
    params.decibits_per_frame += 30;
    break;
  }

  if (pWriteDelay->params.baudRate != params.baudRate ||
      pWriteDelay->params.decibits_per_frame != params.decibits_per_frame)
  {
    pWriteDelay->params = params;
    if (pWriteDelay->started) {
      StopWriteDelayTimer(pWriteDelay);
      StartWriteDelayTimer(pWriteDelay);
    }
  }

  KeReleaseSpinLock(pIoPort->pIoLock, oldIrql);
}

VOID StartWriteDelayTimer(PC0C_ADAPTIVE_DELAY pWriteDelay)
{
  LARGE_INTEGER dueTime;
  ULONG period;
  ULONG intervals_100ns;

  if (pWriteDelay->started)
    return;

  if (!pWriteDelay->params.baudRate)
    return;

  pWriteDelay->startTime = KeQueryInterruptTime();
  pWriteDelay->sentFrames = 0;

  /* 100-nanosecond intervals per frame */
  intervals_100ns = (pWriteDelay->params.decibits_per_frame * 1000000L)/pWriteDelay->params.baudRate;

  if (!intervals_100ns)
    intervals_100ns = 1;

  period = intervals_100ns/10000;  /* 1-millisecond intervals per frame */

  dueTime.QuadPart = -(LONGLONG)intervals_100ns;

  if (!period)
    period = 1;

  KeSetTimerEx(
      &pWriteDelay->timer,
      dueTime, period,
      &pWriteDelay->timerDpc);

  pWriteDelay->started = TRUE;
}

VOID StopWriteDelayTimer(PC0C_ADAPTIVE_DELAY pWriteDelay)
{
  pWriteDelay->started = FALSE;
  KeCancelTimer(&pWriteDelay->timer);
  KeRemoveQueueDpc(&pWriteDelay->timerDpc);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久久久黄色| 欧美日韩性生活| 中文字幕精品在线不卡| 国产成人精品综合在线观看| 久久久亚洲国产美女国产盗摄| 国产精品影视天天线| 久久久www成人免费毛片麻豆| 久久99精品久久久| 久久久精品国产免大香伊| 国产69精品久久久久777| 国产精品亲子伦对白| 91久久精品一区二区| 日韩精品久久久久久| www国产成人| 成人av动漫网站| 亚洲国产精品一区二区久久恐怖片| 5566中文字幕一区二区电影| 精品一区二区免费在线观看| 国产精品对白交换视频| 欧美视频在线一区| 精品一区二区三区在线观看国产| 欧美激情一区二区三区在线| 在线看一区二区| 久久精品国产网站| 国产精品三级在线观看| 欧美日韩国产综合视频在线观看 | 在线日韩一区二区| 日日噜噜夜夜狠狠视频欧美人| 精品国产制服丝袜高跟| 色欧美88888久久久久久影院| 免费成人在线播放| 亚洲人成网站在线| 欧美电视剧免费全集观看| 91玉足脚交白嫩脚丫在线播放| 日韩精品每日更新| 天天操天天综合网| 国产亚洲美州欧州综合国| 色激情天天射综合网| 国产毛片精品一区| 偷拍亚洲欧洲综合| 中文字幕一区二区三区在线观看| 欧美一二三四区在线| 在线视频欧美精品| 99国内精品久久| 国产美女主播视频一区| 污片在线观看一区二区| 亚洲精品中文在线| 国产日韩视频一区二区三区| 91精品国产aⅴ一区二区| 色婷婷精品大视频在线蜜桃视频| 国产二区国产一区在线观看| 日本午夜一区二区| 亚洲二区在线视频| 亚洲日本免费电影| 国产清纯在线一区二区www| 91精品国产综合久久婷婷香蕉 | 欧美日韩美少妇| 99免费精品在线| 国产成人自拍高清视频在线免费播放| 手机精品视频在线观看| 亚洲一区二区影院| 亚洲精品免费播放| 自拍视频在线观看一区二区| 日本最新不卡在线| 午夜精品久久久久久久蜜桃app| 亚洲视频一二区| 久久精品在这里| 久久久久九九视频| 国产日韩欧美麻豆| 国产欧美一区二区三区鸳鸯浴| 精品国产青草久久久久福利| 欧美一区二区日韩| 日韩欧美久久久| 日韩免费视频线观看| 日韩免费看网站| 精品少妇一区二区三区免费观看| 欧美一区2区视频在线观看| 欧美日韩一区二区三区高清| 欧美色爱综合网| 欧美久久婷婷综合色| 欧美日韩精品一区二区| 7777精品伊人久久久大香线蕉完整版 | ...av二区三区久久精品| 亚洲国产岛国毛片在线| 中文字幕中文乱码欧美一区二区| 国产精品情趣视频| 亚洲精品日韩一| 五月天中文字幕一区二区| 日本亚洲最大的色成网站www| 日本视频一区二区三区| 狠狠色丁香久久婷婷综合_中 | 色综合久久久久久久久| 欧美中文字幕一区二区三区亚洲| 欧美日韩成人综合在线一区二区| 91精品福利在线一区二区三区| 欧美一级在线免费| 久久久久久久性| 亚洲精品国产a| 麻豆精品视频在线观看视频| 国产一区二区主播在线| 99久久婷婷国产综合精品电影| 亚洲日本在线a| 国产不卡免费视频| 成人一区在线看| 色综合久久久久久久久久久| 欧美日本在线一区| 一区二区三区欧美亚洲| 国产精品自拍毛片| 国产成人av一区二区三区在线| 国产农村妇女毛片精品久久麻豆| 3atv一区二区三区| 26uuu久久天堂性欧美| 成人欧美一区二区三区黑人麻豆 | 日韩电影免费一区| 精品视频在线看| 久久久久久久综合色一本| 亚洲欧美国产高清| 蓝色福利精品导航| 91丝袜高跟美女视频| 日韩一区二区高清| 亚洲人午夜精品天堂一二香蕉| 日韩在线一区二区| eeuss鲁片一区二区三区 | 色婷婷av一区二区| 久久亚洲精华国产精华液| 一区二区三区欧美视频| 国产乱人伦偷精品视频免下载| 色老汉一区二区三区| www亚洲一区| 日韩福利电影在线| 色综合咪咪久久| 欧美激情一区二区三区不卡| 亚洲国产成人av| 色综合天天做天天爱| 久久久精品国产免大香伊| 日韩高清国产一区在线| 在线视频国产一区| 亚洲欧洲精品一区二区三区| 精品一区二区三区在线播放 | 国产精品丝袜黑色高跟| 亚洲人成伊人成综合网小说| 国产精品自在欧美一区| 欧美一区2区视频在线观看| 亚洲一区二区三区免费视频| 国产麻豆成人精品| 欧美性xxxxxxxx| 中文幕一区二区三区久久蜜桃| 亚洲一区在线观看视频| 国产麻豆精品95视频| 777久久久精品| 亚洲欧美欧美一区二区三区| 狠狠色2019综合网| 日韩亚洲欧美一区| 秋霞午夜av一区二区三区| 欧美日韩一区二区电影| 成人av在线看| 欧美视频中文字幕| 亚洲综合在线五月| 色婷婷久久99综合精品jk白丝| 国产精品色哟哟| 99视频热这里只有精品免费| 国产欧美精品一区二区色综合朱莉| 久草这里只有精品视频| 日韩一区二区精品葵司在线| 日本美女一区二区三区视频| 欧美一级一区二区| 久久国产尿小便嘘嘘| 日韩精品一区二区三区中文不卡| 日韩和欧美一区二区三区| 欧美日韩亚洲综合在线| 日韩激情视频在线观看| 91精品在线免费观看| 蜜臀av在线播放一区二区三区| 日韩视频一区二区| 黄网站免费久久| 日本一区二区三区在线观看| thepron国产精品| 一区二区在线电影| 欧美日韩aaaaaa| 黑人巨大精品欧美黑白配亚洲| 精品国产一区二区在线观看| 国产精品系列在线播放| 国产精品美女一区二区| 欧美做爰猛烈大尺度电影无法无天| 一区二区三区不卡视频| 91麻豆精品国产91久久久久久久久| 麻豆精品一区二区三区| 久久午夜羞羞影院免费观看| 麻豆91在线观看| 欧美国产日韩一二三区| 色婷婷综合久久久中文字幕| 伊人性伊人情综合网| 欧美午夜片在线看| 亚洲成国产人片在线观看| 高清不卡一区二区| 国产欧美一区二区在线观看| 9久草视频在线视频精品| 亚洲女女做受ⅹxx高潮| 国产午夜精品理论片a级大结局| 国产91精品免费|