Из 32 битного приложения запускаю x64 приложение (Vista SP1 x64) CreateProcessом, всё работает с одним но, как узнать PID порождённого x64 процесса ( !32 который возвращается в lpProcessInformation и сразу погибает) ???
Сам себе отвечу - Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection - нет там никаких 32битных процессов. Непонятно зачем (ну в какихто случаях возможно и понятно) процесс создаётся 2 раза даже если образы x64 и i386 одинаковые.
Ты высок?! Окей, игнорируй это — оставим в стороне стенания по поводу энергии, затраченной на семантический разбор последнего предложения. ... Но почему процесс должен создаваться 2 раза? Никогда такого не было.
Код (Text): bSuccWOW=IsWow64Process(GetCurrentProcess(),&bWOW64); if (bSuccWOW && bWOW64) { if (!Wow64DisableWow64FsRedirection(&oV)) ErrorExit(L"Wow64DisableWow64FsRedirection"); }; if (!CreateProcess(pProcess,pParams,NULL,NULL,true,0,NULL,NULL,rdpsi,rdppi)) ErrorExit(L"CreateProcess(mstsc)"); ShowWindow(hWnd,SW_HIDE); WaitForSingleObject(rdppi->hProcess,-1); ShowWindow(hWnd,SW_SHOW); if (bSuccWOW && bWOW64) { Wow64RevertWow64FsRedirection(oV); }; без всех Wow64* функций WaitForSingleObject сразу возвращается ибо хэндл возвёрнутый в rdppi->hProcess не существует (запускаем procmon Руссиновича и видем: открывается сначала один процесс с хэндлом возвёрнутым нам, а потом этотже процесс с другим хэндлом а старый прибивается.) P.S. тотже эфект можно пронаблюдать след. образом: 1.запускаем %systemroot%\syswow64\cmd.exe 2.в консоле запускаем "start /wait mstsc.exe" 3.благополучно возвращаемся в консоль, mstsc запущена и её мы не ждём =)
А разве может быть такое??? Кажется где-то читал что что 64 можно запустить только из 64. Приду домой попробую из фары ИЕ64 запустить.