VOID AppKill() { ULONG PID, argLength; STATUS status; CHAR args[25], outstring[80]; HANDLE outp; outp = CreateFile('s'); //Get function args argLength = CopyArgs(args, 25); if (argLength == 0) { WriteString(outp, "\n\rKill needs an argument e.g. 'kill 5'\r\n"); CloseHandle(outp); KillMe(); } PID = RtlAtoUL(args); status = KillByPID(PID, 1); //ExitStatus 1 == murdered //KdPrint("after kill by pid in Appkill"); if (0 == status) { //KdPrint("before rtlformatkilled PID"); RtlFormatString(outstring, 80, "\r\nKilled %d\r\n", PID); KdPrint(outstring); // WriteString(outp, "outstring"); //KdPrint("after killed PID output"); } else { RtlFormatString(outstring, 80, "\r\nFailed to kill %d\r\n", PID); WriteString(outp, outstring); } //KdPrint("before closehandle"); CloseHandle(outp); KillMe(); }
DArgs::DArgs (unsigned int argc, char **argv) { if(argv) CopyArgs(argc, argv); }
void DArgs::SetArgs (unsigned argc, char **argv) { CopyArgs(argc, argv); }
void DArgs::SetArgs(const char *cmdline) { char *outputline, *q; char **outputargv; int outputargc; args.clear(); if(!cmdline) return; while (*cmdline && isspace(*cmdline)) cmdline++; if (!*cmdline) return; outputline = (char *)Malloc((strlen(cmdline) + 1) * sizeof(char)); outputargv = (char **)Malloc(((strlen(cmdline) + 1) / 2) * sizeof(char *)); const char *p = cmdline; q = outputline; outputargv[0] = NULL; outputargc = 1; while (*p) { int quote; while (*p && isspace(*p)) p++; if (!*p) break; outputargv[outputargc] = q; outputargc++; quote = 0; while (*p) { if (!quote && isspace(*p)) break; if (*p == '\\' || *p == '\"') { int slashes = 0, quotes = 0; while (*p == '\\') { slashes++; p++; } while (*p == '"') { quotes++; p++; } if (!quotes) while (slashes--) *q++ = '\\'; else { while (slashes >= 2) { slashes -= 2; *q++ = '\\'; } if (slashes) { quotes--; *q = '\"'; } if (quotes > 0) { if (!quote) { quotes--; quote = 1; } for (int i = 3; i <= quotes + 1; i += 3) *q++ = '\"'; quote = (quotes % 3 == 0); } } } else *q++ = *p++; } *q++ = '\0'; } CopyArgs(outputargc, outputargv); M_Free(outputargv); M_Free(outputline); return; }