Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenprocess.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
1.7.6.1
|