pviewer.cpp
上传用户:jinandeyu
上传日期:2007-01-05
资源大小:620k
文件大小:3k
源码类别:

远程控制编程

开发平台:

WINDOWS

  1. /*  Back Orifice 2000 - Remote Administration Suite
  2.     Copyright (C) 1999, Cult Of The Dead Cow
  3.     This program is free software; you can redistribute it and/or modify
  4.     it under the terms of the GNU General Public License as published by
  5.     the Free Software Foundation; either version 2 of the License, or
  6.     (at your option) any later version.
  7.     This program is distributed in the hope that it will be useful,
  8.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.     GNU General Public License for more details.
  11.     You should have received a copy of the GNU General Public License
  12.     along with this program; if not, write to the Free Software
  13.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14. The author of this program may be contacted at dildog@l0pht.com. */
  15. #include<windows.h>
  16. #include<tlhelp32.h>
  17. #include<osversion.h>
  18. #include<nt_pviewer.h>
  19. #include<pviewer.h>
  20. #include<functions.h>
  21. PROCESSINFO *CreateProcListSnapshot(char *svName)
  22. {
  23. HANDLE hSnap;
  24. PROCESSINFO *pProcCur;
  25. THREADINFO *pThreadCur;
  26. PROCESSINFO phd;
  27. PROCESSENTRY32 pe;
  28. THREADENTRY32 te;
  29. if(svName!=NULL) {
  30. if(svName[0]=='') svName=NULL;
  31. }
  32. if(g_bIsWinNT || (svName!=NULL)) {
  33. if(NtProcList_ConnectComputer(svName)==-1) return NULL;
  34. return NtProcList_BuildSnapShot();
  35. }
  36. else {
  37. // Create Toolhelp Snapshot
  38. hSnap=pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPTHREAD,0);
  39. if(hSnap==INVALID_HANDLE_VALUE) return NULL;
  40. phd.next=NULL;
  41. // -------------------------- Get Process Information
  42. pe.dwSize=sizeof(PROCESSENTRY32);
  43. pProcess32First(hSnap,&pe);
  44. pProcCur=&phd;
  45. do {
  46. // Insert process into process list
  47. pProcCur->next=(PROCESSINFO *)malloc(sizeof(PROCESSINFO));
  48. pProcCur=pProcCur->next;
  49. if(pProcCur==NULL) return NULL;
  50. // Fill in information
  51. pProcCur->dwProcID=pe.th32ProcessID;
  52. lstrcpyn(pProcCur->svApp,strrchr(pe.szExeFile,'\')+1,MAX_PATH+1);
  53. char *dot;
  54. dot=strrchr(pProcCur->svApp,'.');
  55. if(dot!=NULL) *dot='';
  56. pProcCur->pThread=NULL;
  57. } while(pProcess32Next(hSnap,&pe));
  58. pProcCur->next=NULL;
  59. // -------------------------- Get Thread Information
  60. te.dwSize=sizeof(THREADENTRY32);
  61. pThread32First(hSnap,&te);
  62. do {
  63. // Find process that owns this thread
  64. pProcCur=phd.next;
  65. while(pProcCur!=NULL) {
  66. if(pProcCur->dwProcID==te.th32OwnerProcessID) break;
  67. pProcCur=pProcCur->next;
  68. }
  69. if(pProcCur!=NULL) {
  70. // Add thread to thread list
  71. pThreadCur=(THREADINFO *)malloc(sizeof(THREADINFO));
  72. if(pThreadCur==NULL) return NULL;
  73. pThreadCur->next=pProcCur->pThread;
  74. pProcCur->pThread=pThreadCur;
  75. // Fill in information
  76. pThreadCur->dwThreadID=te.th32ThreadID;
  77. }
  78. } while(pThread32Next(hSnap,&te));
  79. // Free Toolhelp Snapshot and return
  80. CloseHandle(hSnap);
  81. return phd.next;
  82. }
  83. return NULL;
  84. }
  85. void DestroyProcListSnapshot(PROCESSINFO *pSS)
  86. {
  87. PROCESSINFO *pi,*ptmp;
  88. THREADINFO *ti,*ttmp;
  89. pi=pSS;
  90. while(pi!=NULL) {
  91. ti=pi->pThread;
  92. while(ti!=NULL) {
  93. ttmp=ti->next;
  94. free(ti);
  95. ti=ttmp;
  96. }
  97. ptmp=pi->next;
  98. free(pi);
  99. pi=ptmp;
  100. }
  101. }