|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 23, 2003 15:59:56 Дайте кто-нибудь, пожалуйста, описание структуры, а лучше весь .inc файл для CreateProcess. И вот ещё, я нашла описание этой функции: BOOL CreateProcess( LPCTSTR lpApplicationName // pointer to name of executable module LPTSTR lpCommandLine // pointer to command line string ...); Но в ассемблерных листингах первый параметр ноль, а второй путь к exe-шнику, это у меня глупое описалово? |
|
|
Дата: Авг 23, 2003 17:03:23 Не совсем понятно, описание какой структуры нужно. CreateProcess это функция и принимает довольно много параметров. Описание в MSDN, API Reference или просто в сети поискать. инклуды есть в \masm32\include\windows.inc. Касательно двух первых параметров, там действительно немного запутано. Очень хорошо о них рассказано в книге Джеффри Рихтера. Вот пример: .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .data szNotepad db "\Notepad.exe", 0 StartupInfo STARTUPINFO <0> ProcessInfo PROCESS_INFORMATION <0> buffer db MAX_PATH dup(0) .code start: invoke GetSystemDirectory, addr buffer, sizeof buffer invoke lstrcat, addr buffer, addr szNotepad mov StartupInfo.cb, sizeof STARTUPINFO invoke CreateProcess, addr buffer, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL,NULL, addr StartupInfo, addr ProcessInfo ret end start |
|
|
Дата: Авг 23, 2003 18:58:25 Да, но мне нужен инклуд для TASMa, тот в котором описана STARTUPINFO и др. |
|
|
Дата: Авг 23, 2003 19:41:19 Four-F В MSDN рекомендуют использовать второй параметр (lpCommandLine) для совместимости с приложениями, которые активно используют командную строку. Поэтому я всегда ставлю первым параметром ноль, а вторым -- короткий путь к модулю и параметры (если есть). Кстати, это особенно актуально для запуска Java-приложений из GUI-программы. Misty тот в котором описана STARTUPINFO и др Можно просто объявлять массив байт без структуры. Например (MASM, но вы сможете переделать под TASM): .DATA sDir db "C:\mydir",0 sCmd db "C:\mydir\myexe param1 param2",0 sEnv db "var1=val1",0,"var2=val2",0,0 .DATA? SInfo db 68 dup (?) ; STARTUPINFO PInfo db 16 dup (?) ; PROCESS_INFORMATION .CODE ; . . . xor eax,eax mov DWORD PTR [SInfo],68 ; SIZEOF STARTUPINFO mov DWORD PTR [SInfo + 4],eax ; lpReserved = NULL mov DWORD PTR [SInfo + 8],eax ; lpDesktop = NULL mov DWORD PTR [SInfo + 12],eax ; lpTitle = NULL mov DWORD PTR [SInfo + 44],eax ; dwFlags = NULL mov DWORD PTR [SInfo + 52],eax ; lpReserved2 = NULL invoke CreateProcess,eax,OFFSET sCmd,eax,eax,eax,\ NORMAL_PRIORITY_CLASS,OFFSET sEnv,\ OFFSET sDir,OFFSET SInfo,OFFSET PInfo test eax,eax jnz @F INFO "CreateProcess sucks!" jmp @the_end @@: ; Ждём пока процесс отработает ; Timeout == 5 секунд invoke WaitForSingleObject,DWORD PTR [PInfo],5000 push eax invoke CloseHandle,DWORD PTR [PInfo] pop eax cmp eax,WAIT_TIMEOUT je @F INFO "Процесс повис!" jmp @the_end @@: INFO "Всё OK!" @the_endИнфу по недостающим полям STARTUPINFO и PROCESS_INFORMATION можно найти в MSDN. |
|
|
Дата: Авг 24, 2003 00:16:37 [ Quantum: В MSDN рекомендуют использовать второй параметр... ] Учту. |
|
|
Дата: Авг 24, 2003 22:53:48 Four-F Я всё думал, что-то меня в твоём примере смущает, потом допёр ;-), полный путь к Notepad.exe->c:\windows\Notepad.exe, а функция GetSystemDirectory даёт нам путь c:\windows\system\, поэтому нам всё-таки нужна функция GetWindowsDirectory ;-) |
|
|
Дата: Авг 25, 2003 00:02:18 Под 2000 и ХР (под NT4 и 2003, наверное тоже) блокнот лежит %SystemRoot%\system32\notepad.exe. Так что либо версию оси проверять, либо тупо GetSystemDirectory или GetWindowsDirectory. |
|
|
Дата: Авг 25, 2003 00:13:49 Странно, а почему у меня notepad.exe лежит и в 2k и в XP в Виндовой директории? Или он там дублируется? |
|
|
Дата: Авг 25, 2003 00:34:12 Asterix Или он там дублируется? У меня тоже лежит и в C:\WINNT\ и в C:\WINNT\SYSTEM32 |
|
|
Дата: Авг 25, 2003 00:58:25 Мистика :) |
|
|
Дата: Авг 25, 2003 10:45:01 · Поправил: Four-F Да. У меня тоже. Прикольно. Кстати, regedit лежит в %SystemRoot%\, а calc в %SystemRoot%\System32\. Т.е. калькулятор более "систем" чем редактор реестра ;-) |
|
|
Дата: Авг 26, 2003 13:54:13 И ещё, когда я попытался удалить notepad.exe из виндовой директории, помоему в ХР, то он там всё равно появлялся опять! |
|
|
Дата: Авг 26, 2003 15:15:19 Asterix а ты бы его еще и из dllcache удалил :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.139 |