ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

process.c
Go to the documentation of this file.
00001 
00002 /*
00003  * COPYRIGHT:       See COPYING in the top level directory
00004  * PROJECT:         ReactOS net command
00005  * FILE:
00006  * PURPOSE:
00007  *
00008  * PROGRAMMERS:     Magnus Olsen (greatlord@reactos.org)
00009  */
00010 
00011 #include "net.h"
00012 
00013 BOOL myCreateProcessStartGetSzie(CHAR *cmdline, LONG *size)
00014 {
00015     HANDLE hChildStdinRd;
00016     HANDLE hChildStdinWr;
00017     HANDLE hChildStdoutRd;
00018     HANDLE hChildStdoutWr;
00019     SECURITY_ATTRIBUTES saAttr;
00020 
00021     saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
00022     saAttr.bInheritHandle = TRUE;
00023     saAttr.lpSecurityDescriptor = NULL;
00024 
00025     if (! CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0))
00026     {
00027         return FALSE;
00028     }
00029 
00030     if (! CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0))
00031     {
00032         return FALSE;
00033     }
00034 
00035     myCreateProcess(hChildStdoutWr, hChildStdinRd,"rpcclient -c \"service enum\"");
00036     *size = ReadPipeSize(hChildStdoutWr, hChildStdoutRd);
00037     return TRUE;
00038 }
00039 
00040 BOOL myCreateProcessStart(CHAR *cmdline, CHAR *srvlst, LONG size)
00041 {
00042     HANDLE hChildStdinRd;
00043     HANDLE hChildStdinWr;
00044     HANDLE hChildStdoutRd;
00045     HANDLE hChildStdoutWr;
00046     SECURITY_ATTRIBUTES saAttr;
00047 
00048     saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
00049     saAttr.bInheritHandle = TRUE;
00050     saAttr.lpSecurityDescriptor = NULL;
00051 
00052     if (! CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0))
00053     {
00054         return FALSE;
00055     }
00056 
00057     if (! CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0))
00058     {
00059         return FALSE;
00060     }
00061 
00062     myCreateProcess(hChildStdoutWr, hChildStdinRd,"rpcclient -c \"service enum\"");
00063 
00064     return ReadPipe(hChildStdoutWr, hChildStdoutRd, srvlst, size);
00065 }
00066 
00067 BOOL myCreateProcess(HANDLE hStdoutWr, HANDLE hStdinRd, CHAR *cmdline)
00068 {
00069    PROCESS_INFORMATION piProcInfo;
00070    STARTUPINFO siStartInfo;
00071    BOOL status = FALSE;
00072 
00073    ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );
00074    ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
00075    siStartInfo.cb = sizeof(STARTUPINFO);
00076    siStartInfo.hStdError = hStdoutWr;
00077    siStartInfo.hStdOutput = hStdoutWr;
00078    siStartInfo.hStdInput = hStdinRd;
00079    siStartInfo.dwFlags |= STARTF_USESTDHANDLES;
00080    status = CreateProcess(NULL, cmdline, NULL, NULL,
00081                           TRUE, 0, NULL, NULL, &siStartInfo,  &piProcInfo);
00082 
00083    if (status != 0)
00084    {
00085       CloseHandle(piProcInfo.hProcess);
00086       CloseHandle(piProcInfo.hThread);
00087       return status;
00088    }
00089    return status;
00090 }
00091 
00092 LONG ReadPipeSize(HANDLE hStdoutWr, HANDLE hStdoutRd)
00093 {
00094   CHAR chBuf[2];
00095   LONG pos=0;
00096 
00097   if (!CloseHandle(hStdoutWr))
00098   {
00099       return 0; /* fail */
00100   }
00101 
00102   for (;;)
00103   {
00104       long dwRead;
00105       if( !ReadFile( hStdoutRd, chBuf, 1, (LPDWORD)&dwRead, NULL) || dwRead == 0)
00106       {
00107          break;
00108       }
00109       else
00110       {
00111         pos+=dwRead;
00112       }
00113    }
00114    return pos;
00115 }
00116 
00117 LONG ReadPipe(HANDLE hStdoutWr, HANDLE hStdoutRd, CHAR *srvlst, LONG size)
00118 {
00119   CHAR chBuf[2];
00120   LONG pos;
00121 
00122   pos=0;
00123 
00124   if (!CloseHandle(hStdoutWr))
00125   {
00126       return 0; /* fail */
00127   }
00128 
00129    for (;;)
00130    {
00131       LONG dwRead;
00132       if( !ReadFile( hStdoutRd, chBuf, 1, (LPDWORD)&dwRead, NULL) || dwRead == 0)
00133       {
00134          break;
00135       }
00136       else
00137       {
00138         srvlst[pos++] = chBuf[0] ;
00139       }
00140    }
00141    return 0;
00142 }
00143 
00144 INT row_scanner_service(CHAR *buffer, LONG* pos, LONG size,
00145                       CHAR *name,CHAR *save)
00146 {
00147     LONG get_semi;
00148     LONG t;
00149     LONG row_size=0;
00150     LONG start_pos;
00151 
00152     start_pos = *pos;
00153 
00154     if (*pos>=size)
00155     {
00156         return 0;
00157     }
00158 
00159 
00160     /* get row start */
00161     for (t=start_pos;t<size;t++)
00162     {
00163         if (buffer[t]=='\n')
00164         {
00165             buffer[t]='\0';
00166             if (buffer[t-1]==0x09)
00167             {
00168               buffer[t-1]='\0';
00169             }
00170             if (buffer[t-1]==0x0d)
00171             {
00172               buffer[t-1]='\0';
00173             }
00174             *pos = t+1;
00175             row_size = t;
00176             break;
00177         }
00178     }
00179 
00180     /* get : */
00181     get_semi=-1;
00182     for (t=start_pos;t<row_size;t++)
00183     {
00184         if (buffer[t]==':')
00185         {
00186             get_semi=t;
00187             break;
00188         }
00189     }
00190 
00191     if (get_semi==-1)
00192     {
00193         return 0;
00194     }
00195 
00196     /* lock for space */
00197     for (t=get_semi+1;t<row_size;t++)
00198     {
00199         if (!isspace(buffer[t]))
00200         {
00201             break;
00202         }
00203     }
00204     if (t==0)
00205     {
00206         /* : not found next row*/
00207         return 0;
00208     }
00209 
00210     /* Compare now */
00211     if (_strnicmp(name,&buffer[t],strlen(&buffer[t]))==0)
00212     {
00213         if (save != NULL)
00214         {
00215             /* lock for space */
00216             for (t=start_pos;t<get_semi;t++)
00217             {
00218                if (!isspace(buffer[t]))
00219                {
00220                    break;
00221                }
00222              }
00223 
00224              memcpy(save,&buffer[t],get_semi-t);
00225         }
00226         return 1;
00227     }
00228   return 0;
00229 }

Generated on Sun May 27 2012 04:17:14 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.