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

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

?? motelist-win32.cpp

?? tinyos-2.x.rar
?? CPP
字號:
// $Id: motelist-win32.cpp,v 1.4 2006/12/12 18:23:01 vlahan Exp $

/* "Copyright (c) 2000-2003 The Regents of the University of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement
 * is hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY
 * OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 */

// @author Cory Sharp <cssharp@eecs.berkeley.edu>

#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
#include <list>

#include <windows.h>

namespace TelosList
{
using std::cout;
using std::endl;

typedef std::string String;
typedef const String& StringRef;
typedef std::vector<String> VecString;

struct RegValue
{
  typedef long long int_type;
  String name;
  String data;
  int_type data_int;
  int data_type;

  RegValue()
    : data_int(0), data_type(0)
  {
  }

  RegValue( StringRef _name, StringRef _data, int _type )
    : name(_name), data(_data), data_int(atoi(data.c_str())), data_type(_type)
  {
  }

  RegValue( StringRef _name, int_type _data, int _type )
    : name(_name), data(), data_int(_data), data_type(_type)
  {
    char buf[16];
    int nbuf = sprintf( buf, "%lld", data_int );
    data = String( buf, buf+nbuf );
  }

  RegValue( StringRef _name, const char* _data, DWORD _dlen, int _type )
    : name(_name), data_type(_type)
  {
    char buf[256];
    int nbuf = 0;

    switch( data_type )
    {
      case REG_BINARY:
      case REG_EXPAND_SZ:
      case REG_MULTI_SZ:
      case REG_SZ:
	data = String( _data, _dlen );
	data_int = atoi( _data );
	break;

      case REG_NONE:
	break;

      case REG_DWORD:
	data_int = *(DWORD*)_data;
	nbuf = sprintf( buf, "%d", *(DWORD*)_data );
	data = String( buf, buf+nbuf );
	break;

      case REG_QWORD:
	data_int = *(long long*)_data;
	nbuf = sprintf( buf, "%lld", *(long long*)_data );
	data = String( buf, buf+nbuf );
	break;

      default:
	throw std::runtime_error( "unsupported data type in " + name );
    }
  }
};


class RegKey;
typedef std::vector<RegKey> VecRegKey;
typedef std::vector<RegValue> VecRegValue;


class RegKey
{
  HKEY m_hkey;
  String m_name;

  void openKey( HKEY hkey, StringRef subkey )
  {
    LONG result = RegOpenKeyEx( hkey, subkey.c_str(), 0, (KEY_READ&~KEY_NOTIFY), &m_hkey );
    if( result != ERROR_SUCCESS )
      throw std::runtime_error( "could not open key " + m_name );
  }

  void prefixName( HKEY root )
  {
    if( root == HKEY_LOCAL_MACHINE )
      m_name = "HKLM\\" + m_name;
  }

public:

  ~RegKey()
  {
    RegCloseKey(m_hkey);
    m_hkey = (HKEY)INVALID_HANDLE_VALUE;
  }

  RegKey( HKEY hkey, StringRef subkey )
    : m_hkey((HKEY)INVALID_HANDLE_VALUE), m_name(subkey)
  {
    prefixName( hkey );
    openKey( hkey, subkey );
  }

  RegKey( const RegKey& key, StringRef subkey )
    : m_hkey((HKEY)INVALID_HANDLE_VALUE), m_name(key.m_name+"\\"+subkey)
  {
    openKey( key.m_hkey, subkey );
  }

  RegKey getSubkey( StringRef subkey ) const
  {
    return RegKey( m_hkey, subkey );
  }

  RegKey operator[]( StringRef subkey ) const
  {
    return getSubkey( subkey );
  }

  RegValue operator()( StringRef value ) const
  {
    return getValue( value );
  }

  RegValue getValue( StringRef value ) const;

  VecString getSubkeyNames() const;
  VecRegValue getValues() const;
};


VecString RegKey::getSubkeyNames() const
{
  VecString v;
  DWORD i = 0;

  while(true)
  {
    DWORD len = 4096;
    char name[len];
    LONG result = RegEnumKeyEx( m_hkey, i++, name, &len, NULL, NULL, NULL, NULL );

    if( result == ERROR_NO_MORE_ITEMS )
      break;

    if( result != ERROR_SUCCESS )
      throw std::runtime_error( "error iterating keys in " + m_name );

    v.push_back( String(name, name+len) );
  }

  return v;
}


RegValue RegKey::getValue( StringRef value ) const
{
  DWORD dtype = 0;
  DWORD dlen = 4096;
  char data[dlen];
  LONG result = RegQueryValueEx( m_hkey, value.c_str(), NULL, &dtype, (BYTE*)data, &dlen );

  if( result != ERROR_SUCCESS )
    throw std::runtime_error( "error iterating values in " + m_name );

  return RegValue( value, data, dlen, dtype );
}


VecRegValue RegKey::getValues() const
{
  VecRegValue v;
  DWORD i = 0;

  while(true)
  {
    DWORD nlen = 4096;
    DWORD dlen = 4096;
    char name[nlen];
    char data[dlen];
    DWORD dtype = 0;
    LONG result = RegEnumValue( m_hkey, i++, name, &nlen, NULL, &dtype, (BYTE*)data, &dlen );
    dtype = REG_NONE;
    dlen = 0;

    if( result == ERROR_NO_MORE_ITEMS )
      break;

    if( result != ERROR_SUCCESS )
      throw std::runtime_error( "error iterating values in " + m_name );

    v.push_back( RegValue( String(name,name+nlen), data, dlen, dtype ) );
  }

  return v;
}


struct Device
{
  String id;
  String comm;
  String info;
  int sortnum;
  int refcount;

  Device(): sortnum(0), refcount(0) { }

  bool operator<( const Device& a ) const
  {
    if( sortnum < a.sortnum )
      return true;
    
    if( sortnum == a.sortnum )
      return (id < a.id);

    return false;
  }
};

typedef std::list<Device> ListDevice;

String join( StringRef sep, const VecString& vs )
{
  String j;
  VecString::const_iterator i = vs.begin();
  if( i != vs.end() ) j = *i++;
  while( i != vs.end() ) j += sep + *i++;
  return j;
}

String join( StringRef sep, const VecRegValue& vrv )
{
  String j;
  VecRegValue::const_iterator i = vrv.begin();
  if( i != vrv.end() ) { j = i->name+"="+i->data; i++; }
  while( i != vrv.end() ) { j = i->name+"="+i->data; i++; }
  return j;
}

VecString split( const char* chars, StringRef str )
{
  VecString vs;

  String::size_type n0 = 0;
  String::size_type n1 = str.find_first_of( chars, 0 );
  vs.push_back( str.substr( n0, n1 ) );

  while( n1 != String::npos )
  {
    n0 = n1+1;
    n1 = str.find_first_of( chars, n0 );
    if( n1 != String::npos ) vs.push_back( str.substr( n0, n1-n0 ) );
    else vs.push_back( str.substr( n0 ) );
  }

  return vs;
}

int getRefCount( const RegKey& dclass, const RegKey& key )
{
  int refcnt = 0;

  try
  {
    String symstr = key["Device Parameters"]("SymbolicName").data;
    VecString sym = split( "\\#", symstr );

    if( sym.size() >= 4 )
    {
      sym.erase( sym.begin(), sym.begin()+sym.size()-4 );
      String devstr = sym[3] +"\\##?#" + join("#",sym) + "\\Control";
      RegKey ctrl = dclass[devstr];
      refcnt = strtol( ctrl("ReferenceCount").data.c_str(), NULL, 0 );
    }
  }
  catch( std::runtime_error e ) { }

  return refcnt;
}

ListDevice getDevices()
{
  ListDevice devs;

  String ccs = "SYSTEM\\CurrentControlSet\\";
  RegKey dclass( HKEY_LOCAL_MACHINE, ccs+"Control\\DeviceClasses" );
  RegKey ftdibus( HKEY_LOCAL_MACHINE, ccs+"Enum\\FTDIBUS" );
  RegKey usb6001( HKEY_LOCAL_MACHINE, ccs+"Enum\\USB\\Vid_0403&Pid_6001" );

  VecString fdev = ftdibus.getSubkeyNames();
  for( VecString::const_iterator i=fdev.begin(); i!=fdev.end(); i++ )
  {
    if( i->substr(0,18) == String("VID_0403+PID_6001+") )
    {
      Device d;
      d.id = i->substr(18,8);

      try
      {
	RegKey devkey = ftdibus[*i];
	VecString devsub = devkey.getSubkeyNames();
	d.comm = devkey[devsub[0]+"\\Device Parameters"]("PortName").data;
      }
      catch( std::runtime_error e )
      {
	d.comm = "no_comm";
      }

      try { d.info = usb6001[d.id]("LocationInformation").data; }
      catch( std::runtime_error e ) { }

      try { d.refcount = getRefCount( dclass, usb6001[d.id] ); }
      catch( std::runtime_error e ) { }

      String::size_type ncomm = d.comm.find_first_of("0123456789");
      if( ncomm != String::npos )
	d.sortnum = atoi( d.comm.substr(ncomm).c_str() );

      devs.push_back(d);
    }
  }

  return devs;
}


void prettyPrintDevices( const ListDevice& devs )
{
  const char* fmt = "%-10s %-10s %s\n";
  printf( fmt, "Reference", "CommPort", "Description" );
  printf( "---------- ---------- ----------------------------------------\n" );

  for( ListDevice::const_iterator i=devs.begin(); i!=devs.end(); i++ )
  {
    String comm = i->comm;
    if( i->refcount == 0 )
    {
      char buf[256];
      int n = snprintf( buf, 255, " (%s)", i->comm.c_str() );
      comm = String( buf, buf+n );
    }
    printf( fmt, i->id.c_str(), comm.c_str(), i->info.c_str() );
  }
}

void printDevices( const ListDevice& devs )
{
  for( ListDevice::const_iterator i=devs.begin(); i!=devs.end(); i++ )
  {
    cout << i->id << "," << i->comm << ","
	 << i->refcount << "," << i->info << endl;
  }
}

ListDevice getActiveDevices( const ListDevice& devs )
{
  ListDevice active;
  for( ListDevice::const_iterator i=devs.begin(); i!=devs.end(); i++ )
  {
    if( i->refcount > 0 )
      active.push_back( *i );
  }
  return active;
}

void usage()
{
  cout << "usage: motelist [-l] [-c]\n"
       << "\n"
       << "  $Revision: 1.4 $ $Date: 2006/12/12 18:23:01 $\n"
       << "\n"
       << "options:\n"
       << "  -h  display this help\n"
       << "  -l  long format, also display disconnected devices\n"
       << "  -c  compact format, not pretty but easier for parsing\n"
       << std::endl;
}

int main( VecString args )
{
  bool showall = false;
  bool compact = false;
  //bool recovery = false;

  for( VecString::size_type n=1; n!=args.size(); n++ )
  {
    StringRef opt = args[n];
    if( opt == "-h" ) { usage(); return 0; }
    else if( opt == "-l" ) { showall = true; }
    else if( opt == "-c" ) { compact = true; }
    else if( opt == "-c" ) { compact = true; }
    else { usage(); throw std::runtime_error("unknown command line option "+opt); }
  }

  ListDevice devs = getDevices();

  if( showall == false )
    devs = getActiveDevices( devs );

  devs.sort();

  if( devs.empty() )
    { cout << "No devices found." << endl; return 2; }
  else if( compact )
    printDevices( devs );
  else
    prettyPrintDevices( devs );

  return 0;
}

}//namespace TelosList


int main( int argc, char* argv[] )
{
  try
  {
    return TelosList::main( TelosList::VecString(argv,argv+argc) );
  }
  catch( std::runtime_error e )
  {
    std::cerr << "error, " << e.what() << std::endl;
  }
  return 1;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区国产麻豆| 久久久精品tv| 成年人国产精品| 麻豆国产一区二区| 一级女性全黄久久生活片免费| 精品国产污污免费网站入口 | 国产成人8x视频一区二区| 亚洲成人av资源| 最新国产精品久久精品| 精品欧美一区二区三区精品久久| 色视频欧美一区二区三区| 国产成人综合精品三级| 青青草91视频| 亚洲小说欧美激情另类| 国产精品伦理在线| 91精品国产色综合久久不卡蜜臀| 成人福利电影精品一区二区在线观看| 日本午夜精品视频在线观看 | 成人av网在线| 国产一区二区三区免费看| 蜜臀av一区二区三区| 亚洲国产综合91精品麻豆| 亚洲柠檬福利资源导航| 国产精品国产三级国产普通话蜜臀 | 91久久国产最好的精华液| 成人午夜免费电影| 久久99在线观看| 亚洲图片一区二区| 一区二区三区高清在线| 亚洲精品乱码久久久久久日本蜜臀| 欧美高清在线一区二区| 国产精品丝袜黑色高跟| 亚洲免费在线观看视频| 成人欧美一区二区三区1314| 欧美国产综合一区二区| 国产午夜精品一区二区三区四区| 精品免费国产二区三区| xnxx国产精品| 国产午夜亚洲精品羞羞网站| 欧美国产日韩a欧美在线观看| 国产日韩欧美在线一区| 中文子幕无线码一区tr| 国产精品不卡一区| 中文字幕字幕中文在线中不卡视频| 亚洲三级理论片| 一区二区三区鲁丝不卡| 亚洲大片精品永久免费| 亚洲超碰精品一区二区| 免费欧美日韩国产三级电影| 久久成人羞羞网站| 丰满少妇在线播放bd日韩电影| 97se亚洲国产综合自在线| 色婷婷综合久久久久中文一区二区 | 99久久精品国产一区二区三区| 色综合久久久久久久久久久| 欧美色老头old∨ideo| 91麻豆精品国产91久久久久久久久| 日韩一级在线观看| 国产女人aaa级久久久级| 日韩美女视频一区二区| 午夜国产精品一区| 国内精品在线播放| aaa欧美大片| 欧美日韩在线精品一区二区三区激情| 欧美一级片免费看| 欧美经典一区二区| 一区二区国产视频| 精品在线亚洲视频| 不卡在线观看av| 精品视频1区2区3区| 久久伊人蜜桃av一区二区| 国产精品免费丝袜| 亚洲不卡av一区二区三区| 国产一区999| 欧美性xxxxxx少妇| 国产无遮挡一区二区三区毛片日本| 亚洲男女一区二区三区| 免费观看日韩av| 色综合久久天天| 精品国产99国产精品| 亚洲美腿欧美偷拍| 国产一区二区三区不卡在线观看| 色综合亚洲欧洲| 欧美xxxxx牲另类人与| 亚洲女女做受ⅹxx高潮| 国产一区二区三区黄视频| 欧美无人高清视频在线观看| 国产色婷婷亚洲99精品小说| 亚洲综合一区二区精品导航| 国产一区二区三区黄视频 | 亚洲成人第一页| 成人午夜碰碰视频| 日韩午夜在线影院| 亚洲免费色视频| 国产精品888| 欧美一区二区三区男人的天堂| 亚洲日本在线天堂| 国产一区美女在线| 91精品国产综合久久久蜜臀图片| 亚洲欧美偷拍三级| 国产乱国产乱300精品| 欧美久久一二区| 亚洲色图都市小说| 国产91精品入口| 欧美大度的电影原声| 一二三区精品福利视频| 成人在线综合网| 久久精品水蜜桃av综合天堂| 蜜桃av一区二区三区| 欧美日韩情趣电影| 一区二区成人在线| 99久久久久久99| 欧美激情在线一区二区| 精品亚洲aⅴ乱码一区二区三区| 欧美精品1区2区| 亚洲小说欧美激情另类| 91视频观看视频| 亚洲三级小视频| 一本大道久久a久久综合婷婷| 中文在线一区二区| 成人性生交大合| 日本一区二区三区在线不卡| 国产不卡视频一区| 日本一区二区视频在线| 国产98色在线|日韩| 欧美激情在线观看视频免费| 国产成人免费高清| 国产亚洲午夜高清国产拍精品| 精品一区二区三区在线视频| 欧美一区二区三区啪啪| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩大陆在线| 日本成人在线不卡视频| 欧美一区二区久久久| 美女脱光内衣内裤视频久久影院| 日韩一区二区电影在线| 久久不见久久见免费视频1| 精品国产乱码久久久久久老虎| 狠狠久久亚洲欧美| 久久精品一区二区| proumb性欧美在线观看| 亚洲品质自拍视频| 一本色道综合亚洲| 亚洲成在人线在线播放| 欧美福利视频导航| 久久精品国产77777蜜臀| 日韩午夜激情免费电影| 日日夜夜精品免费视频| 欧美一区二区三区免费| 久久99国产精品成人| 久久久久国产精品厨房| www.亚洲色图| 亚洲一二三四久久| 欧美一级片在线| 国产黄色91视频| 亚洲精品免费在线观看| 欧美日韩高清在线| 国产在线播放一区二区三区 | 一区二区三区欧美日| 欧美亚洲免费在线一区| 蜜臀a∨国产成人精品| 久久久一区二区三区| 99精品偷自拍| 日韩成人精品视频| 国产视频一区二区在线观看| 91性感美女视频| 日韩黄色在线观看| 日本一区二区在线不卡| 91搞黄在线观看| 麻豆高清免费国产一区| 国产精品女主播在线观看| 欧美午夜免费电影| 国产一区不卡视频| 亚洲激情图片一区| 337p日本欧洲亚洲大胆色噜噜| gogo大胆日本视频一区| 日韩中文字幕亚洲一区二区va在线 | 国产香蕉久久精品综合网| 91成人免费在线视频| 国产一区二区看久久| 亚洲综合一区二区| 久久精品免视看| 久久久综合视频| 色8久久人人97超碰香蕉987| 激情小说欧美图片| 一区二区成人在线观看| 国产午夜精品福利| 4438x亚洲最大成人网| 99视频精品全部免费在线| 蜜桃视频在线观看一区二区| 日韩伦理电影网| 26uuu久久综合| 欧美日韩国产区一| 91丝袜呻吟高潮美腿白嫩在线观看| 免费看欧美美女黄的网站| 亚洲女厕所小便bbb| 国产精品午夜免费| 精品国产免费一区二区三区香蕉| 欧美亚洲综合网| 91香蕉视频mp4|