⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 registry.c

📁 USB开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
      return TRUE;    }  return FALSE;}void usb_registry_stop_libusb_devices(void){  HDEVINFO dev_info;  SP_DEVINFO_DATA dev_info_data;  int dev_index = 0;    dev_info_data.cbSize = sizeof(SP_DEVINFO_DATA);  dev_index = 0;  dev_info = SetupDiGetClassDevs(NULL, "USB", NULL,                                 DIGCF_ALLCLASSES | DIGCF_PRESENT);    if(dev_info == INVALID_HANDLE_VALUE)    {      usb_error("usb_registry_stop_libusb_devices(): getting "                "device info set failed");      return;    }    while(SetupDiEnumDeviceInfo(dev_info, dev_index, &dev_info_data))    {      if(usb_registry_is_service_libusb(dev_info, &dev_info_data))        {          usb_registry_stop_device(dev_info, &dev_info_data);        }      dev_index++;    }    SetupDiDestroyDeviceInfoList(dev_info);}void usb_registry_start_libusb_devices(void){  HDEVINFO dev_info;  SP_DEVINFO_DATA dev_info_data;  int dev_index = 0;    dev_info_data.cbSize = sizeof(SP_DEVINFO_DATA);  dev_index = 0;  dev_info = SetupDiGetClassDevs(NULL, "USB", NULL,                                 DIGCF_ALLCLASSES | DIGCF_PRESENT);    if(dev_info == INVALID_HANDLE_VALUE)    {      usb_error("usb_registry_stop_libusb_devices(): getting "                "device info set failed");      return;    }    while(SetupDiEnumDeviceInfo(dev_info, dev_index, &dev_info_data))    {      if(usb_registry_is_service_libusb(dev_info, &dev_info_data))        {          usb_registry_start_device(dev_info, &dev_info_data);        }      dev_index++;    }    SetupDiDestroyDeviceInfoList(dev_info);}bool_t usb_registry_match(HDEVINFO dev_info,                           SP_DEVINFO_DATA *dev_info_data){  char tmp[MAX_PATH];    if(!usb_registry_get_property(SPDRP_HARDWAREID, dev_info, dev_info_data,                                tmp, sizeof(tmp)))    {      usb_error("usb_registry_match_no_hubs(): getting hardware id "                "failed");      return FALSE;    }  usb_registry_mz_string_lower(tmp);  /* search for USB devices, skip root hubs and interfaces of composite */  /* devices */  if(usb_registry_mz_string_find_sub(tmp, "&mi_")     || usb_registry_mz_string_find_sub(tmp, "root_hub"))    {      return FALSE;    }  return TRUE;}bool_t usb_registry_get_mz_value(const char *key, const char *value,                                  char *buf, int size){  HKEY reg_key = NULL;  DWORD reg_type;  DWORD reg_length = size;  bool_t ret = FALSE;  char *p;  memset(buf, 0, size);        if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_ALL_ACCESS, &reg_key)     == ERROR_SUCCESS)    {      if(RegQueryValueEx(reg_key, value, NULL, &reg_type,                          buf, &reg_length) == ERROR_SUCCESS)        {          if(reg_type == REG_SZ)            {              p = buf;              while(*p)                {                  if(*p == ',')                    {                      *p = 0;                    }                  p++;                }            }          ret = TRUE;        }    }  if(reg_key)    {      RegCloseKey(reg_key);    }  return ret;}bool_t usb_registry_set_mz_value(const char *key, const char *value,                                  char *buf, int size){  HKEY reg_key = NULL;  bool_t ret = FALSE;  char *p;  /* convert REG_MULTI_SZ to REG_SZ */  if(!usb_registry_is_nt())    {      p = buf;            while(*p && *(p + 1))        {          if(*p == 0)            {              *p = ',';            }          p++;        }    }  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_ALL_ACCESS, &reg_key)     == ERROR_SUCCESS)    {      if(size > 2)        {          if(usb_registry_is_nt())            {              if(RegSetValueEx(reg_key, value, 0, REG_MULTI_SZ, buf, size)                 == ERROR_SUCCESS)                {                  ret = TRUE;                }            }          else            {              if(RegSetValueEx(reg_key, value, 0, REG_SZ, buf, size)                 == ERROR_SUCCESS)                {                  ret = TRUE;                }            }        }      else        {          if(RegDeleteValue(reg_key, value) == ERROR_SUCCESS)            {              ret = TRUE;            }        }    }    if(reg_key)    {      RegCloseKey(reg_key);    }  return ret;}int usb_registry_mz_string_size(const char *src){  char *p = (char *)src;    if(!src)    {      return 0;    }  while(*p)    {      p += (strlen(p) + 1);    }    return (int)(p - src) + 1;}char *usb_registry_mz_string_find_sub(const char *src, const char *str){  while(*src)    {      if(strstr(src, str))        {          return (char *)src;        }      src += (strlen(src) + 1);    }  return NULL;}char *usb_registry_mz_string_find(const char *src, const char *str){  while(*src)    {      if(!strcmp(src, str))        {          return (char *)src;        }      src += strlen(src) + 1;    }  return NULL;}bool_t usb_registry_mz_string_insert(char *src, const char *str){  while(*src)    {      src += (strlen(src) + 1);    }  memcpy(src, str, strlen(str));  src += strlen(str);  *src = 0;  *(src + 1) = 0;  return TRUE;}bool_t usb_registry_mz_string_remove(char *src, const char *str){  char *p;  bool_t ret = FALSE;  int size;  do {    src = usb_registry_mz_string_find(src, str);        if(!src)      {        break;      }    else      {        ret = TRUE;      }        p = src;    size = 0;    while(*p)      {        p += strlen(p) + 1;        size += strlen(p) + 1;      }        memmove(src, src + strlen(src) + 1, size);  } while(1);  return TRUE;}void usb_registry_mz_string_lower(char *src){  while(*src)    {      strlwr(src);      src += (strlen(src) + 1);    }}bool_t usb_registry_restart_all_devices(void){  HDEVINFO dev_info;  SP_DEVINFO_DATA dev_info_data;  int dev_index;  char id[MAX_PATH];  dev_index = 0;  dev_info_data.cbSize = sizeof(SP_DEVINFO_DATA);    dev_info = SetupDiGetClassDevs(NULL, "USB", NULL,                                 DIGCF_ALLCLASSES | DIGCF_PRESENT);    if(dev_info == INVALID_HANDLE_VALUE)    {      usb_error("usb_registry_restart_all_devices(): getting "                "device info set failed");      return FALSE;    }      while(SetupDiEnumDeviceInfo(dev_info, dev_index, &dev_info_data))    {      if(!usb_registry_get_property(SPDRP_HARDWAREID, dev_info,                                     &dev_info_data, id, sizeof(id)))        {          usb_error("usb_registry_restart_all_devices(): getting hardware "                    "id failed");          dev_index++;          continue;        }              usb_registry_mz_string_lower(id);              /* restart root hubs */      if(usb_registry_mz_string_find_sub(id, "root_hub"))        {          usb_registry_restart_device(dev_info, &dev_info_data);        }      dev_index++;    }      SetupDiDestroyDeviceInfoList(dev_info);  return TRUE;}usb_class_key_t *usb_registry_get_usb_class_keys(void){  HDEVINFO dev_info;  SP_DEVINFO_DATA dev_info_data;  int dev_index = 0;  int i;  char class[MAX_PATH];  char tmp[MAX_PATH];  usb_class_key_t *keys = NULL;  DWORD class_property;  const char *class_path;  const char **default_class_keys;  if(usb_registry_is_nt())    {      class_property = SPDRP_CLASSGUID;      class_path = CLASS_KEY_PATH_NT;      default_class_keys = default_class_keys_nt;    }  else    {      class_property = SPDRP_CLASS;      class_path = CLASS_KEY_PATH_9X;      default_class_keys = default_class_keys_9x;    }  i = 0;  while(default_class_keys[i])    {      if((strlen(class_path) + strlen(default_class_keys[i])) < sizeof(tmp))        {          sprintf(tmp, "%s%s", class_path, default_class_keys[i]);          usb_registry_add_class_key(&keys, tmp);        }      i++;    }  dev_info_data.cbSize = sizeof(SP_DEVINFO_DATA);  dev_info = SetupDiGetClassDevs(NULL, "USB", NULL,                                 DIGCF_ALLCLASSES);    if(dev_info == INVALID_HANDLE_VALUE)    {      usb_error("usb_registry_get_class_keys(): getting "                "device info set failed");      return NULL;    }    while(SetupDiEnumDeviceInfo(dev_info, dev_index, &dev_info_data))    {      if(!usb_registry_is_service_libusb(dev_info, &dev_info_data))        {          if(!usb_registry_get_property(SPDRP_CLASSGUID, dev_info,                                         &dev_info_data,                                        class, sizeof(class)))            {              usb_error("usb_registry_get_class_keys(): getting "                        "hardware id failed");              dev_index++;              continue;            }                    strlwr(class);                    if((strlen(class_path) + strlen(class)) < sizeof(tmp))            {              sprintf(tmp, "%s%s", class_path, class);              usb_registry_add_class_key(&keys, tmp);            }        }      dev_index++;    }    SetupDiDestroyDeviceInfoList(dev_info);  return keys;}static usb_class_key_t *usb_registry_get_all_class_keys(void){  const char *class_path;  usb_class_key_t *keys = NULL;  HKEY reg_key;  char class[MAX_PATH];  char tmp[MAX_PATH];  if(usb_registry_is_nt())    {      class_path = CLASS_KEY_PATH_NT;    }  else    {      class_path = CLASS_KEY_PATH_9X;    }  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, class_path, 0, KEY_ALL_ACCESS,                   &reg_key) == ERROR_SUCCESS)    {      DWORD i = 0;      DWORD size = sizeof(class);      FILETIME junk;      memset(class, 0, sizeof(class));      while(RegEnumKeyEx(reg_key, i, class, &size, 0, NULL, NULL, &junk)             == ERROR_SUCCESS)        {          strlwr(class);          if((strlen(class_path) + strlen(class)) < sizeof(tmp))            {              sprintf(tmp, "%s%s", class_path, class);              usb_registry_add_class_key(&keys, tmp);            }                    memset(class, 0, sizeof(class));          size = sizeof(class);          i++;        }       RegCloseKey(reg_key);    }  return keys;}static bool_t usb_registry_add_class_key(usb_class_key_t **head,                                         const char *key){  usb_class_key_t *p = *head;  if(key)    {      if(strlen(key) >= MAX_PATH)        return FALSE;      while(p)        {          if(!strcmp(p->name, key))            {              return FALSE;            }          p = p->next;        }      p = malloc(sizeof(usb_class_key_t));            if(!p)        return FALSE;      memset(p, 0, sizeof(usb_class_key_t));      strcpy(p->name, key);      p->next = *head;      *head = p;      return TRUE;    }  return FALSE;}static bool_t usb_registry_free_class_keys(usb_class_key_t **head){  usb_class_key_t *p = *head;  usb_class_key_t *q;  while(p)    {      q = p->next;      free(p);      p = q;    }  *head = NULL;  return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -