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

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

?? ul_wdbase.c

?? linux下的RS485的驅動 值得一看
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************************************  uLan Communication - uL_DRV - multiplatform uLan driver  ul_wdbase.c	- common Windows NT KDM and Win2k WDM driver code  (C) Copyright 1996-2004 by Pavel Pisa - project originator        http://cmp.felk.cvut.cz/~pisa  (C) Copyright 1996-2004 PiKRON Ltd.        http://www.pikron.com  (C) Copyright 2002-2004 Petr Smolik    The uLan driver project can be used and distributed   in compliance with any of next licenses   - GPL - GNU Public License     See file COPYING for details.   - LGPL - Lesser GNU Public License   - MPL - Mozilla Public License   - and other licenses added by project originator  Code can be modified and re-distributed under any combination  of the above listed licenses. If contributor does not agree with  some of the licenses, he/she can delete appropriate line.  WARNING: if you delete all lines, you are not allowed to  distribute code or sources in any form. *******************************************************************/// This variable has to be initialized by RtlConvertLongToLargeInteger(0) in DriverEntryLARGE_INTEGER ULD_LARGE_INTEGER_0;//-------------------------------------------------------------------// Memory check#ifdef ENABLE_UL_MEM_CHECKvoid * ul_mem_check_malloc(size_t size){ void *ptr;  ptr=ExAllocatePool(NonPagedPool,size);  if(ptr) InterlockedIncrement(&ul_mem_check_counter);  return ptr;}void ul_mem_check_free(void *ptr){  if(ptr) InterlockedDecrement(&ul_mem_check_counter);  ExFreePool(ptr);}#endif /* ENABLE_UL_MEM_CHECK *///-------------------------------------------------------------------////  Begin FUNCTIONS//NTSTATUSulan_GetRegistryDword(    IN      PWCHAR    RegPath,    IN      PWCHAR    ValueName,    IN OUT  PULONG    Value    )/*++Routine Description:	Obtain a Dword value from the registryArguments:    RegPath  -- supplies absolute registry path    ValueName    - Supplies the Value Name.    Value      - receives the REG_DWORD value.Return Value:    TRUE if successfull, FALSE on fail.--*/{  UNICODE_STRING path;  RTL_QUERY_REGISTRY_TABLE paramTable[2];  //zero'd second table terminates parms  ULONG lDef = *Value;                     // default  NTSTATUS status;  WCHAR wbuf[ MAXIMUM_FILENAME_LENGTH ];  path.Length = 0;  path.MaximumLength = MAXIMUM_FILENAME_LENGTH * sizeof( WCHAR );  // MAXIMUM_FILENAME_LENGTH defined in wdm.h  path.Buffer = wbuf;  RtlZeroMemory(path.Buffer, path.MaximumLength);  RtlMoveMemory(path.Buffer, RegPath, wcslen( RegPath) * sizeof( WCHAR ));  RtlZeroMemory(paramTable, sizeof(paramTable));  paramTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;  paramTable[0].Name = ValueName;  paramTable[0].EntryContext = Value;  paramTable[0].DefaultType = REG_DWORD;  paramTable[0].DefaultData = &lDef;  paramTable[0].DefaultLength = sizeof(ULONG);  status = RtlQueryRegistryValues( RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL,                                  path.Buffer, paramTable, NULL, NULL);  return status;}//-------------------------------------------------------------------// ScanForPCICard for WinNT KMD// WDM uses different technique to query VENDOR_ID and DEVICE_ID// for example PCI\VEN_1415&DEV_950A&SUBSYS_00001415&REV_00#ifdef UL_WITH_PCI#ifdef FOR_WIN_WDMBOOLEAN FindPciHWID(PWCHAR HWID,		    OUT pci_device_id_t **Ppci_device_id	           ){  PWCHAR pwcH, pwcM;  WCHAR  fldName;  USHORT vendorID=0;  USHORT deviceID=0;  USHORT subvendorID=0;  USHORT subdeviceID=0;  ULONG  val, i, c;  static WCHAR PciHWIDMask[]=L"PCI\\VEN_vvvv&DEV_xxxx&SUBSYS_sssswwww";  pci_device_id_t *device_id;  *Ppci_device_id=NULL;  if(HWID==NULL) return FALSE;  pwcH=HWID;  pwcM=PciHWIDMask;  while(*pwcH&&*pwcM) {    if(*pwcH==*pwcM){      pwcH++; pwcM++;      continue;    }    fldName=*pwcM;    if((fldName!='v')&&(fldName!='x')&&       (fldName!='s')&&(fldName!='w')) break;    val=0;    for(i=4;i--;){      c=*(pwcH++); pwcM++;      if(c<='9') c-='0';      else if(c<='F') c=c-'A'+10;      else if(c<='f') c=c-'a'+10;      if(c>15) {val=0;break;}      val<<=4;      val+=c;    }    switch (fldName) {      case 'v':        vendorID=(USHORT)val;	break;      case 'x':        deviceID=(USHORT)val;	break;      case 'w':        subvendorID=(USHORT)val;	break;      case 's':        subdeviceID=(USHORT)val;	break;    }  }#if DBG  uLan_DbgPrint("uLan: PCI - Ven %04X Dev %04X SubVen %04X SubDev %04X\n",                  vendorID,deviceID,subvendorID,subdeviceID);#endif  for(device_id=ulan_pci_tbl;device_id->vendor;device_id++){    if((device_id->vendor!=PCI_ANY_ID)&&(device_id->vendor!=vendorID)) continue;    if((device_id->device!=PCI_ANY_ID)&&(device_id->device!=deviceID)) continue;    if((device_id->subvendor!=PCI_ANY_ID)&&(device_id->vendor!=subvendorID)) continue;    if((device_id->subdevice!=PCI_ANY_ID)&&(device_id->device!=subdeviceID)) continue;    *Ppci_device_id=device_id;    return TRUE;  }  return FALSE;}#else /* !FOR_WIN_WDM */BOOLEAN ScanForPCICard(IN OUT PULONG PBusNumber,                       IN OUT PPCI_SLOT_NUMBER PSlotNumber,                       IN BOOLEAN FindFirst,		       OUT pci_device_id_t **Ppci_device_id		      ){  ULONG BusNumber=*PBusNumber;  PCI_SLOT_NUMBER SlotNumber=*PSlotNumber;  UCHAR Buffer[2*sizeof(USHORT)];  ULONG Readed=sizeof(Buffer);  pci_device_id_t *device_id;  while(1){    if(FindFirst){      BusNumber=0;      SlotNumber.u.AsULONG=0;      FindFirst=0;    }else{      if(Readed>2){        SlotNumber.u.bits.FunctionNumber=            (SlotNumber.u.bits.FunctionNumber+1)&7;      }else{        SlotNumber.u.bits.FunctionNumber=0;      }      if(!SlotNumber.u.bits.FunctionNumber){        if(!Readed&&!SlotNumber.u.bits.DeviceNumber)            break;        SlotNumber.u.bits.DeviceNumber=            (SlotNumber.u.bits.DeviceNumber+1)&0x1f;        if(!SlotNumber.u.bits.DeviceNumber)            BusNumber++;      }    }    Readed=HalGetBusData(PCIConfiguration,BusNumber,SlotNumber.u.AsULONG,                         Buffer,sizeof(Buffer));    if(Readed==sizeof(Buffer)){      for(device_id=&ulan_pci_tbl[0];device_id->vendor;device_id++){        if((((PPCI_COMMON_CONFIG)Buffer)->VendorID==device_id->vendor)&&           (((PPCI_COMMON_CONFIG)Buffer)->DeviceID==device_id->device)){            *PBusNumber=BusNumber;            *PSlotNumber=SlotNumber;            if(Ppci_device_id)                *Ppci_device_id=device_id;            return TRUE;        }      }    }  }  return FALSE;}                    #endif /* FOR_WIN_WDM */#endif /*UL_WITH_PCI*///-------------------------------------------------------------------// WDM uses different technique to query VENDOR_ID and DEVICE_ID// for example USB\Vid_dead&Pid_1001&REV_0001#ifdef UL_WITH_USBBOOLEAN FindUsbHWID(PWCHAR HWID,		    OUT usb_device_id_t **Pusb_device_id	           ){  PWCHAR pwcH, pwcM;  WCHAR  fldName;  USHORT vendorID=0;  USHORT productID=0;  ULONG  val, i, c;  static WCHAR UsbHWIDMask[]=L"USB\\Vid_vvvv&Pid_pppp";  usb_device_id_t *device_id;  *Pusb_device_id=NULL;  if(HWID==NULL) return FALSE;  pwcH=HWID;  pwcM=UsbHWIDMask;  while(*pwcH&&*pwcM) {    if(*pwcH==*pwcM){      pwcH++; pwcM++;      continue;    }    fldName=*pwcM;    if((fldName!='v')&&(fldName!='p')) break;    val=0;    for(i=4;i--;){      c=*(pwcH++); pwcM++;      if(c<='9') c-='0';      else if(c<='F') c=c-'A'+10;      else if(c<='f') c=c-'a'+10;      if(c>15) {val=0;break;}      val<<=4;      val+=c;    }    switch (fldName) {      case 'v':        vendorID=(USHORT)val;	break;      case 'p':        productID=(USHORT)val;	break;    }  }#if DBG  uLan_DbgPrint("uLan: USB - Ven %04X Dev %04X\n",                  vendorID,productID);#endif  for(device_id=ulan_usb_tbl;device_id->idVendor;device_id++){    if((device_id->idVendor!=vendorID)) continue;    if((device_id->idProduct!=productID)) continue;    *Pusb_device_id=device_id;    return TRUE;  }  return FALSE;}#endif /* UL_WITH_USB *///-------------------------------------------------------------------////  Initialize and free driver///* initialize new driver from given parameters */NTSTATUS ul_drv_init_ext(ul_drv *udrv, int port,	 int irq, int baud, long baudbase, int chip_options, int buffer_size, int my_adr){  int ret;  int test_cnt;  unsigned long probe_irqs;  udrv->flag_IN_ISR=0;  udrv->flag_ASK_ISR=0;  udrv->flag_NACTIV=0;  udrv->flag_CHIPOK=0;  udrv->flag_IN_BOTTOM=0;  udrv->flag_ASK_BOTTOM=0;  udrv->flag_CHECK_FILT=0;  udrv->flag_KWTKILL=0;  if(buffer_size<0x2000) buffer_size=0x2000;  /* init sequencer */  ul_drv_new_init_state(udrv,my_adr);  /* init chip driver */  #ifdef UL_WITH_USB  if((chip_options&~0xff)==UL_USB_HW_PS1){    if((ret=ul_usb_ps1_init(udrv, port, irq, baud, baudbase, chip_options))>=0){      UL_PRINTF("uLan ul_drv_new : usb_ps1\n");    }  } else {  #else  {  #endif /* UL_WITH_USB */  #ifdef UL_WITH_PCI    if((chip_options&~0xff)==0x16954000){      if((ret=u950pci_init(udrv, port, irq, baud, baudbase, chip_options))>=0){        UL_PRINTF("uLan ul_drv_new : 16C954 at 0x%x\n",port);      }    }else  #endif /* UL_WITH_PCI */    {      if((ret=u510_init(udrv, port, irq, baud, baudbase, chip_options))>=0){        UL_PRINTF("uLan ul_drv_new : 82510 found at 0x%x\n",port);      }else if((ret=u450_init(udrv, port, irq, baud, baudbase, chip_options))>=0){        UL_PRINTF("uLan ul_drv_new : 16450 found at 0x%x\n",port);      };    }  }  if(ret>=0)  { /* setups buffers, ports and first part of irq      for sucesfully detected device */    if(ul_drv_new_start(udrv,buffer_size)>=0)      return STATUS_SUCCESS;  }  UL_PRINTF("uLan ul_drv_new : failed to init\n");  return STATUS_INSUFFICIENT_RESOURCES;};/* destroy driver */void ul_drv_done_ext(ul_drv *udrv){  int old_CHIPOK;  if(!udrv) return;  old_CHIPOK=udrv->flag_CHIPOK;  udrv->flag_CHIPOK=0;  if(old_CHIPOK&&udrv->irq){    /* free_irq(udrv->irq,udrv)*/;    /* synchronize_irq(); */  }  DONE_UDRV_WDTIM(udrv);  /* schedule(); */  ul_mem_done(udrv);  if(old_CHIPOK) {     udrv->fnc_cctrl(udrv,UL_CC_PDONE,0);  };};//-------------------------------------------------------------------////  File operations//NTSTATUS ul_drv_open(ul_drv *udrv,ul_opdata *opdata){   opdata->magic=ULOP_MAGIC;  opdata->message=NULL;  opdata->udrv=udrv;  /* init_waitqueue_head(&opdata->wqrec); */  opdata->opprew=NULL;  opdata->opnext=NULL;  opdata->recchain=NULL;  opdata->filtchain=NULL;  opdata->wait_irp=NULL;  { /* add us onto list of clients of udrv */    ul_opdata *opptr;    UL_DRV_LOCK_FINI    UL_DRV_LOCK;    opptr=udrv->operators;    if(opptr) {opptr->opprew=opdata;opdata->opnext=opptr;};    UL_MB();    udrv->operators=opdata;    UL_DRV_UNLOCK;  };  return 0;}NTSTATUS ul_drv_close(ul_drv *udrv,ul_opdata *opdata){  ul_opchain *opmember;  KIRQL OldIrql;  if (opdata->message) ulan_freemsg(opdata);  KeRaiseIrql(DISPATCH_LEVEL,&OldIrql);  {while(InterlockedExchange(&udrv->flag_IN_BOTTOM,1))/* spinlock loop*/;}  {     /* delete us from list of clients of udrv */    ul_drv *udrv=opdata->udrv;    ul_opdata *opptr;    UL_DRV_LOCK_FINI    UL_DRV_LOCK;    if((opptr=opdata->opnext)) opptr->opprew=opdata->opprew;    if((opptr=opdata->opprew)) opptr->opnext=opdata->opnext;    else udrv->operators=opdata->opnext;    UL_DRV_UNLOCK;  };  InterlockedExchange(&udrv->flag_IN_BOTTOM,0);  ulan_bottom_dpc(NULL,udrv,NULL,NULL);  KeLowerIrql(OldIrql);  while((opmember=opdata->recchain))  {    del_from_opchain(&opdata->recchain,opmember);    if(opmember->message) ul_dec_ref_cnt(opmember->message);    FREE(opmember);  };  while((opmember=opdata->filtchain))  {    del_from_opchain(&opdata->filtchain,opmember);    FREE(opmember);  };  return 0;};NTSTATUS ulan_read(ul_drv *udrv,ul_opdata *opdata,				   uchar *buf, ULONG count,				   LARGE_INTEGER pos, PULONG pcount){  int cn;  int len;  if(!opdata->message) return -ENOMSG;  if(opdata->data.pos+count>UL_BLK_HEAD(opdata->data.head_blk).len)    count=UL_BLK_HEAD(opdata->data.head_blk).len-opdata->data.pos;  cn=count;  while(cn>0)  {    if(!ul_di_adjust(&opdata->data))    {      RtlZeroMemory(buf,cn);      cn=0;      break;    };    len=ul_di_atonce(&opdata->data);    if(len>cn) len=cn;    RtlCopyMemory(buf,ul_di_byte(&opdata->data),len);    ul_di_add(&opdata->data,len);    buf+=len;    cn-=len;  };  *pcount=count-cn;  return 0;};NTSTATUS ulan_write(ul_drv *udrv,ul_opdata *opdata,				   const uchar *buf, ULONG count,				   LARGE_INTEGER pos, PULONG pcount){  int cn;  int len;  ul_mem_blk *blk;  if(!opdata->message) return -ENOMSG;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看视频91| 亚洲乱码中文字幕综合| 日韩色在线观看| 欧美日本视频在线| 欧美日韩国产综合一区二区三区| 91久久香蕉国产日韩欧美9色| 91免费在线播放| 色偷偷一区二区三区| 91免费视频网址| 欧洲一区在线观看| 欧美日韩aaaaaa| 日韩午夜激情视频| 久久婷婷国产综合国色天香 | 欧美一级黄色大片| 91精品国产色综合久久ai换脸 | 欧美国产亚洲另类动漫| 国产亚洲一区二区三区在线观看 | 免费观看一级特黄欧美大片| 青青国产91久久久久久| 韩日av一区二区| 国产成人午夜99999| 97超碰欧美中文字幕| 在线视频国内一区二区| 欧美老肥妇做.爰bbww| 日韩欧美一区二区免费| 久久亚洲一区二区三区明星换脸| 日本一区二区三区电影| 中文字幕一区二区三区蜜月| 亚洲一区二区精品久久av| 日韩av网站在线观看| 国产毛片精品国产一区二区三区| 丁香桃色午夜亚洲一区二区三区| 91美女精品福利| 欧美高清视频www夜色资源网| 精品国产电影一区二区| 中文字幕乱码一区二区免费| 亚洲欧美日韩一区二区| 日韩va欧美va亚洲va久久| 国产精品自拍网站| 91小视频免费观看| 日韩视频中午一区| 国产精品乱码妇女bbbb| 视频一区二区国产| 国产成人精品午夜视频免费| 欧美午夜影院一区| 久久久午夜精品理论片中文字幕| 亚洲天堂成人在线观看| 麻豆91精品视频| 99久久国产综合精品女不卡| 欧美精品三级在线观看| 欧美国产综合色视频| 午夜视频一区二区| 成人午夜精品一区二区三区| 欧美视频三区在线播放| 亚洲国产成人自拍| 日韩电影在线免费| 不卡av电影在线播放| 日韩午夜电影av| 亚洲一区二区精品视频| 国产成人aaa| 欧美浪妇xxxx高跟鞋交| 亚洲人xxxx| 国产精品一区二区三区网站| 欧美日韩一级片网站| 国产精品视频九色porn| 美日韩一区二区| 欧美自拍丝袜亚洲| 亚洲国产高清在线观看视频| 另类中文字幕网| 欧美日韩精品专区| 日韩美女视频19| 国产成人免费视频| 欧美成人官网二区| 日韩电影在线看| 欧美午夜片在线看| 亚洲视频在线一区观看| 国产精品1区2区| 日韩欧美第一区| 亚洲va国产va欧美va观看| 99国产欧美另类久久久精品| 国产色综合一区| 激情文学综合插| 日韩欧美的一区| 三级影片在线观看欧美日韩一区二区| 不卡的av在线| 国产精品另类一区| 国产成人av福利| 久久久www免费人成精品| 精品一区二区免费| 日韩精品一区二| 美女网站在线免费欧美精品| 777午夜精品视频在线播放| 亚洲综合自拍偷拍| 91网址在线看| 亚洲精品国久久99热| 波多野结衣一区二区三区| 中文字幕欧美区| 成人综合在线观看| 国产精品少妇自拍| 成人18视频在线播放| 中文在线免费一区三区高中清不卡| 久久99久久99| 欧美电影免费观看高清完整版在线观看 | 91极品视觉盛宴| 洋洋av久久久久久久一区| 欧美亚洲国产怡红院影院| 亚洲综合色自拍一区| 欧美日韩综合不卡| 天天综合色天天综合色h| 欧美人妇做爰xxxⅹ性高电影 | 成人综合婷婷国产精品久久免费| 国产亚洲综合在线| 粉嫩久久99精品久久久久久夜| 精品毛片乱码1区2区3区| 国产最新精品精品你懂的| 26uuu亚洲综合色欧美| 国产精品一二三四| 国产精品久久久久久久久果冻传媒| 成人免费三级在线| 亚洲欧美日韩电影| 欧美三级电影精品| 日韩二区三区四区| 久久精品亚洲一区二区三区浴池| 粉嫩av亚洲一区二区图片| 中文字幕一区在线观看| 欧美中文一区二区三区| 水蜜桃久久夜色精品一区的特点 | 亚洲一级片在线观看| 91精品国产乱码| 国产麻豆一精品一av一免费| 中文字幕中文乱码欧美一区二区| 99久久国产综合色|国产精品| 一区二区三区中文字幕精品精品 | 国产精品成人一区二区艾草 | 欧美二区乱c少妇| 精品一区二区三区免费视频| 国产精品另类一区| 欧美日韩亚洲另类| 九一九一国产精品| 国产精品视频免费看| 欧美日韩另类一区| 国产米奇在线777精品观看| 日韩一区中文字幕| 欧美日韩国产免费一区二区| 免费精品99久久国产综合精品| 久久久五月婷婷| 欧美在线三级电影| 国内久久精品视频| 亚洲六月丁香色婷婷综合久久 | 国产日韩v精品一区二区| 色94色欧美sute亚洲线路二 | 91福利国产成人精品照片| 美女视频网站久久| 最新国产成人在线观看| 日韩视频免费直播| 日韩和欧美一区二区三区| 欧美激情在线看| 欧美精选午夜久久久乱码6080| 国产99久久久精品| 香蕉成人伊视频在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美性欧美巨大黑白大战| 国产乱子伦视频一区二区三区| 亚洲一区二区黄色| 国产精品视频yy9299一区| 在线视频国内自拍亚洲视频| 蜜桃av一区二区在线观看| 亚洲人成人一区二区在线观看 | 国产欧美日韩在线观看| 欧美日韩国产美女| 成人免费高清视频| 久久99这里只有精品| 亚洲韩国一区二区三区| 欧美一区二区啪啪| 色综合久久久网| 91丝袜呻吟高潮美腿白嫩在线观看| 国产成人午夜精品影院观看视频| 国产一区二区三区久久久 | 2023国产精华国产精品| 日韩亚洲国产中文字幕欧美| 欧美一区二区久久| 精品国精品自拍自在线| 日韩欧美美女一区二区三区| 日韩午夜激情视频| 精品久久久久久无| 精品久久久久久久久久久院品网| 精品国一区二区三区| 2021国产精品久久精品| 国产欧美综合在线| 中文字幕永久在线不卡| 亚洲精品少妇30p| 一区二区三区日韩欧美| 亚洲午夜免费视频| 天天色综合成人网| 免费不卡在线观看| 国产在线一区观看| 丁香网亚洲国际| 色婷婷亚洲精品| 欧美日韩一区小说| 制服丝袜亚洲精品中文字幕|