Pastebin

New pastes are no longer accepted · Stats

Latest Pastes

AsusSendTo

/* g++ AsusSendTo.cpp -o AsusSendTo.exe -mwindows */
/* usage: AsusSendTo EeePCName cmd.exe /K whoami */

#define UNICODE
#define _UNICODE
#include <string>
#include <windows.h>

#ifndef _T
#define _T(x) L##x
#endif

#define PIPE_TIMEOUT 10000

int main()
{
	HANDLE pipe;

	std::wstring wsname;
	std::wstring exec;
	std::wstring pipename;
	
	LPTSTR cmd = GetCommandLine();
	
	while (*cmd != ' ' && *cmd != '\0') ++cmd;
	while (*cmd == ' ' && *cmd != '\0') ++cmd;

	LPTSTR cmd2 = cmd;

	while (*cmd2 != ' ' && *cmd2 != '\0') ++cmd2;

	wsname = std::wstring(cmd, cmd2 - cmd);

	while (*cmd2 == ' ' && *cmd2 != '\0') ++cmd2;
	
	exec = std::wstring(cmd2);
	
	pipename = _T("\\\\") + wsname + _T("\\pipe\\asuspipe");

	while (1)
	{
		pipe = CreateFile(pipename.c_str(), GENERIC_READ | GENERIC_WRITE, 0,
			NULL, OPEN_EXISTING, 0, NULL);
		
		if (pipe != INVALID_HANDLE_VALUE)
			break;

		if (GetLastError() != ERROR_PIPE_BUSY)
		{
			MessageBox(NULL, _T("Failed to open asuspipe"), _T("ERROR"), MB_ICONERROR | MB_OK);
			return 1;
		}
		
		if (!WaitNamedPipe(pipename.c_str(), PIPE_TIMEOUT))
		{
			MessageBox(NULL, _T("Timed out waiting on asuspipe"), _T("ERROR"), MB_ICONERROR | MB_OK);
			return 1;
		}
	}
	
	DWORD pipemode = PIPE_READMODE_MESSAGE;
	
	if (!SetNamedPipeHandleState(pipe, &pipemode, NULL, NULL))
	{
		MessageBox(NULL, _T("Setting mode on asuspipe failed"), _T("ERROR"), MB_ICONERROR | MB_OK);
		return 1;
	}
	
	DWORD written = 0;

	if (!WriteFile(pipe, exec.c_str(), exec.size() * sizeof(wchar_t), &written, NULL))
	{
		MessageBox(NULL, _T("Write to asuspipe failed"), _T("ERROR"), MB_ICONERROR | MB_OK);
		return 1;
	}
	
	CloseHandle(pipe);
	
	return 0;
}