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

📄 cygcheck.cc

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 CC
📖 第 1 页 / 共 3 页
字号:
	  if (SetFilePointer (fh, expbase, 0, FILE_BEGIN) ==	      INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR)	    keyeprint ("dll_info: SetFilePointer()");	  unsigned char *exp = (unsigned char *) malloc (expsz);	  if (!ReadFile (fh, exp, expsz, &junk, 0))	    keyeprint ("dll_info: Readfile()");	  ExpDirectory *ed = (ExpDirectory *) exp;	  int ofs = ed->name_rva - export_rva;	  struct tm *tm = localtime ((const time_t *) &(ed->timestamp));	  if (tm->tm_year < 60)	    tm->tm_year += 2000;	  if (tm->tm_year < 200)	    tm->tm_year += 1900;	  printf ("%*c", lvl + 2, ' ');	  printf ("\"%s\" v%d.%d ts=", exp + ofs,		  ed->major_ver, ed->minor_ver);	  printf ("%d/%d/%d %d:%02d\n",		  tm->tm_year, tm->tm_mon + 1, tm->tm_mday,		  tm->tm_hour, tm->tm_min);	}    }  if (num_entries >= 2 && import_size > 0 && recurse)    {      int impsz;      int impbase = rva_to_offset (import_rva, sections, nsections, &impsz);      if (impbase)	{	  if (SetFilePointer (fh, impbase, 0, FILE_BEGIN) ==	      INVALID_SET_FILE_POINTER && GetLastError () != NO_ERROR)	    keyeprint ("dll_info: SetFilePointer()");	  unsigned char *imp = (unsigned char *) malloc (impsz);	  if (imp == NULL)	    {	      keyeprint ("dll_info: malloc()");	      return;	    }	  if (!ReadFile (fh, imp, impsz, &junk, 0))	    keyeprint ("dll_info: Readfile()");	  ImpDirectory *id = (ImpDirectory *) imp;	  for (i = 0; id[i].name_rva; i++)	    {	      /* int ofs = id[i].name_rva - import_rva; */	      track_down ((char *) imp + id[i].name_rva - import_rva,			  (char *) ".dll", lvl + 2);	    }	}    }  if (strstr (path, "\\cygwin1.dll"))    cygwin_info (fh);}static voidtrack_down (char *file, char *suffix, int lvl){  if (file == NULL)    {      keyeprint ("track_down: malloc()");      return;    }  if (suffix == NULL)    {      keyeprint ("track_down: malloc()");      return;    }  char *path = find_on_path (file, suffix, 0, 1);  if (!path)    {      printf ("Error: could not find %s\n", file);      return;    }  Did *d = already_did (file);  switch (d->state)    {    case DID_NEW:      break;    case DID_ACTIVE:      if (verbose)	{	  if (lvl)	    printf ("%*c", lvl, ' ');	  printf ("%s", path);	  printf (" (recursive)\n");	}      return;    case DID_INACTIVE:      if (verbose)	{	  if (lvl)	    printf ("%*c", lvl, ' ');	  printf ("%s", path);	  printf (" (already done)\n");	}      return;    default:      break;    }  if (lvl)    printf ("%*c", lvl, ' ');  if (!path)    {      printf ("%s not found\n", file);      return;    }  printf ("%s", path);  HANDLE fh =    CreateFile (path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);  if (fh == INVALID_HANDLE_VALUE)    {      printf (" - Cannot open\n");      return;    }  d->state = DID_ACTIVE;  dll_info (path, fh, lvl, 1);  d->state = DID_INACTIVE;  if (!CloseHandle (fh))    keyeprint ("track_down: CloseHandle()");}static voidls (char *f){  HANDLE h = CreateFile (f, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,			 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);  BY_HANDLE_FILE_INFORMATION info;  if (!GetFileInformationByHandle (h, &info))    keyeprint ("ls: GetFileInformationByHandle()");  SYSTEMTIME systime;  if (!FileTimeToSystemTime (&info.ftLastWriteTime, &systime))    keyeprint ("ls: FileTimeToSystemTime()");  printf ("%5dk %04d/%02d/%02d %s",	  (((int) info.nFileSizeLow) + 512) / 1024,	  systime.wYear, systime.wMonth, systime.wDay, f);  dll_info (f, h, 16, 0);  if (!CloseHandle (h))    keyeprint ("ls: CloseHandle()");}static voidcygcheck (char *app){  char *papp = find_on_path (app, (char *) ".exe", 1, 0);  if (!papp)    {      printf ("Error: could not find %s\n", app);      return;    }  char *s = strdup (papp);  char *sl = 0, *t;  for (t = s; *t; t++)    if (*t == '/' || *t == '\\' || *t == ':')      sl = t;  if (sl == 0)    paths[0] = (char *) ".";  else    {      *sl = 0;      paths[0] = s;    }  did = 0;  track_down (papp, (char *) ".exe", 0);}extern char **environ;struct RegInfo{  RegInfo *prev;  char *name;  HKEY key;};static voidshow_reg (RegInfo * ri, int nest){  if (!ri)    return;  show_reg (ri->prev, 1);  if (nest)    printf ("%s\\", ri->name);  else    printf ("%s\n", ri->name);}static voidscan_registry (RegInfo * prev, HKEY hKey, char *name, int cygnus){  RegInfo ri;  ri.prev = prev;  ri.name = name;  ri.key = hKey;  char *cp;  for (cp = name; *cp; cp++)    if (strncasecmp (cp, "cygnus", 6) == 0)      cygnus = 1;  DWORD num_subkeys, max_subkey_len, num_values;  DWORD max_value_len, max_valdata_len, i;  if (RegQueryInfoKey (hKey, 0, 0, 0, &num_subkeys, &max_subkey_len, 0,		       &num_values, &max_value_len, &max_valdata_len, 0, 0)      != ERROR_SUCCESS)    {#if 0      char tmp[400];      FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError (),		     MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), tmp, 400, 0);      printf ("RegQueryInfoKey: %s\n", tmp);#endif      return;    }  if (cygnus)    {      show_reg (&ri, 0);      char *value_name = (char *) malloc (max_value_len + 1);      if (value_name == NULL)	{	  keyeprint ("scan_registry: malloc()");	  return;	}      char *value_data = (char *) malloc (max_valdata_len + 1);      if (value_data == NULL)	{	  keyeprint ("scan_registry: malloc()");	  return;	}      for (i = 0; i < num_values; i++)	{	  DWORD dlen = max_valdata_len + 1;	  DWORD nlen = max_value_len + 1;	  DWORD type;	  RegEnumValue (hKey, i, value_name, &nlen, 0,			&type, (BYTE *) value_data, &dlen);	  {	    printf ("  %s = ", i ? value_name : "(default)");	    switch (type)	      {	      case REG_DWORD:		printf ("0x%08x\n", *(unsigned *) value_data);		break;	      case REG_EXPAND_SZ:	      case REG_SZ:		printf ("`%s'\n", value_data);		break;	      default:		printf ("(unsupported type)\n");		break;	      }	  }	}      free (value_name);      free (value_data);    }  char *subkey_name = (char *) malloc (max_subkey_len + 1);  for (i = 0; i < num_subkeys; i++)    {      if (RegEnumKey (hKey, i, subkey_name, max_subkey_len + 1) ==	  ERROR_SUCCESS)	{	  HKEY sKey;	  if (RegOpenKeyEx (hKey, subkey_name, 0, KEY_READ, &sKey)	      == ERROR_SUCCESS)	    {	      scan_registry (&ri, sKey, subkey_name, cygnus);	      if (RegCloseKey (sKey) != ERROR_SUCCESS)		keyeprint ("scan_registry: RegCloseKey()");	    }	}    }  free (subkey_name);}static voiddump_sysinfo (){  int i, j;  char tmp[4000];  time_t now;  char *found_cygwin_dll;  printf ("\nCygwin Win95/NT Configuration Diagnostics\n");  time (&now);  printf ("Current System Time: %s\n", ctime (&now));  OSVERSIONINFO osversion;  osversion.dwOSVersionInfoSize = sizeof (osversion);  if (!GetVersionEx (&osversion))    keyeprint ("dump_sysinfo: GetVersionEx()");  char *osname = (char *) "unknown OS";  switch (osversion.dwPlatformId)    {    case VER_PLATFORM_WIN32s:      osname = (char *) "32s";      break;    case VER_PLATFORM_WIN32_WINDOWS:      switch (osversion.dwMinorVersion)	{	case 0:	  if (strchr (osversion.szCSDVersion, 'C'))	    osname = (char *) "95 OSR2";	  else	    osname = (char *) "95";	  break;	case 10:	  if (strchr (osversion.szCSDVersion, 'A'))	    osname = (char *) "98 SE";	  else	    osname = (char *) "98";	  break;	case 90:	  osname = (char *) "ME";	  break;	default:	  osname = (char *) "9X";	  break;	}      break;    case VER_PLATFORM_WIN32_NT:      if (osversion.dwMajorVersion == 5)	{	  BOOL more_info = FALSE;	  OSVERSIONINFOEX osversionex;	  osversionex.dwOSVersionInfoSize = sizeof (osversionex);	  if (GetVersionEx ((OSVERSIONINFO *) &osversionex))	    more_info = TRUE;	  if (osversion.dwMinorVersion == 0)	    {	      if (!more_info)		osname = (char *) "2000";	      else if (osversionex.wProductType == VER_NT_SERVER		       || osversionex.wProductType ==		       VER_NT_DOMAIN_CONTROLLER)		{		  if (osversionex.wSuiteMask &VER_SUITE_DATACENTER)		    osname = (char *) "2000 Datacenter Server";		  else if (osversionex.wSuiteMask & VER_SUITE_ENTERPRISE)		    osname = (char *) "2000 Advanced Server";		  else		    osname = (char *) "2000 Server";		}	      else		osname = (char *) "2000 Professional";	    }	  else	    {	      if (!more_info)		osname = (char *) "XP";	      else if (osversionex.wProductType == VER_NT_SERVER		       || osversionex.wProductType ==		       VER_NT_DOMAIN_CONTROLLER)		{		  if (osversionex.wSuiteMask & VER_SUITE_ENTERPRISE)		    osname = (char *) ".NET Enterprise Server";		  else		    osname = (char *) ".NET Server";		}	      else if (osversionex.wSuiteMask & VER_SUITE_PERSONAL)		osname = (char *) "XP Home Edition";	      else		osname = (char *) "XP Professional";	    }	}      else	osname = (char *) "NT";      break;    default:      osname = (char *) "??";      break;    }  printf ("Windows %s Ver %lu.%lu Build %lu %s\n\n", osname,	  osversion.dwMajorVersion, osversion.dwMinorVersion,	  osversion.dwPlatformId == VER_PLATFORM_WIN32_NT ?	  osversion.dwBuildNumber : (osversion.dwBuildNumber & 0xffff),	  osversion.dwPlatformId == VER_PLATFORM_WIN32_NT ?	  osversion.szCSDVersion : "");  printf ("Path:");  char *s = getenv ("PATH"), *e;  char sep = strchr (s, ';') ? ';' : ':';  int count_path_items = 0;  while (1)    {      for (e = s; *e && *e != sep; e++);      printf ("\t%.*s\n", e - s, s);      count_path_items++;      if (!*e)	break;      s = e + 1;    }  if (!GetSystemDirectory (tmp, 4000))    keyeprint ("dump_sysinfo: GetSystemDirectory()");  printf ("\nSysDir: %s\n", tmp);  GetWindowsDirectory (tmp, 4000);  printf ("WinDir: %s\n\n", tmp);  if (givehelp)    printf ("Here's some environment variables that may affect cygwin:\n");  for (i = 0; environ[i]; i++)    {      char *eq = strchr (environ[i], '=');      if (!eq)	continue;      /* int len = eq - environ[i]; */      for (j = 0; known_env_vars[j]; j++)	{	  *eq = 0;	  if (strcmp (environ[i], "PATH") == 0)	    continue;		/* we handle this one specially */	  if (strcasecmp (environ[i], known_env_vars[j]) == 0)	    printf ("%s = `%s'\n", environ[i], eq + 1);	  *eq = '=';	}    }  printf ("\n");  if (verbose)    {      if (givehelp)	printf ("Here's the rest of your environment variables:\n");      for (i = 0; environ[i]; i++)	{	  int found = 0;	  char *eq = strchr (environ[i], '=');	  if (!eq)	    continue;	  /* int len = eq - environ[i]; */	  for (j = 0; known_env_vars[j]; j++)	    {

⌨️ 快捷键说明

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