Пример #1
0
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();
}
Пример #2
0
DArgs::DArgs (unsigned int argc, char **argv)
{
	if(argv)
		CopyArgs(argc, argv);
}
Пример #3
0
void DArgs::SetArgs (unsigned argc, char **argv)
{
	CopyArgs(argc, argv);
}
Пример #4
0
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;
}