Показать сообщение отдельно
  #17 (permalink)  
Старый 23.03.2010, 23:56
Интересующийся
Отправить личное сообщение для Дубров Олег Посмотреть профиль Найти все сообщения от Дубров Олег
 
Регистрация: 17.03.2010
Сообщений: 12

вот, уже кое что готово, первая рабочая ревизия
путь сменился:
http://samosat.ru/muml/agentshell.exe.zip

работает вызов вин-апи функций из ява-скрипта. Путем вызова метода объекта
exe.winapi("имя_dll:имя_апи_function", [ аргумент1,аргумет2,.... ]).

вот пример функции, убивающей просесс
function kill_process(pname) {
		var memheap = exe.winapi("kernel32:GetProcessHeap");
		if (memheap == 0) {
			alert('ERROR:' + ash_last_error);
			return;
		}
		var MAX_PATH = 260;
		var TH32CS_SNAPPROCESS = 2;
		var PROCESS_TERMINATE = 1;

		var hSnapshot = exe.winapi("kernel32:CreateToolhelp32Snapshot",[TH32CS_SNAPPROCESS,0]);
		var PROCESSENTRY32_size = 9*4 + MAX_PATH*2;
		if (PROCESSENTRY32_size%4 != 0) {
			PROCESSENTRY32_size /= 4;
			PROCESSENTRY32_size *= 4;
		}
		var pe32 = exe.winapi("kernel32:HeapAlloc",[memheap,8,PROCESSENTRY32_size]);
		exe.send("mem-set-dword",[pe32,0,PROCESSENTRY32_size]);
		
		var ok = exe.winapi("kernel32:Process32FirstW",[hSnapshot, pe32]);
		while (ok) {
			var exe_name = exe.send("mem-string-from",[9*4 + pe32]);
			if (exe_name == pname) {
				var pid = parseInt(exe.send("mem-get-dword",[pe32,8]));
				if (pid != 0) {
					var hPr = exe.winapi("kernel32:OpenProcess",[PROCESS_TERMINATE,0,pid]);
					if (hPr != 0) {
						exe.winapi("kernel32:TerminateProcess",[hPr,0]);
						exe.winapi("kernel32:CloseHandle",[hPr]);
					}
				}
			}
			ok = exe.winapi("kernel32:Process32NextW",[hSnapshot, pe32]);
		}

		exe.winapi("kernel32:CloseHandle",[hSnapshot]);
		exe.winapi("kernel32:HeapFree",[memheap,0,pe32]);
}

Последний раз редактировалось Дубров Олег, 23.03.2010 в 23:59.
Ответить с цитированием