CreateProcess x64 из i386

Тема в разделе "WASM.X64", создана пользователем dag, 31 мар 2009.

  1. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    Из 32 битного приложения запускаю x64 приложение (Vista SP1 x64) CreateProcessом, всё работает с одним но, как узнать PID порождённого x64 процесса ( !32 который возвращается в lpProcessInformation и сразу погибает) ???
     
  2. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    Сам себе отвечу - Wow64DisableWow64FsRedirection/Wow64RevertWow64FsRedirection - нет там никаких 32битных процессов. Непонятно зачем (ну в какихто случаях возможно и понятно) процесс создаётся 2 раза даже если образы x64 и i386 одинаковые.
     
  3. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Ты высок?!
    Окей, игнорируй это — оставим в стороне стенания по поводу энергии, затраченной на семантический разбор последнего предложения.

    ...
    Но почему процесс должен создаваться 2 раза? Никогда такого не было.
     
  4. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    Код (Text):
    1.   bSuccWOW=IsWow64Process(GetCurrentProcess(),&bWOW64);
    2.   if (bSuccWOW && bWOW64)
    3.   {
    4.      if (!Wow64DisableWow64FsRedirection(&oV))
    5.         ErrorExit(L"Wow64DisableWow64FsRedirection");
    6.   };
    7.   if (!CreateProcess(pProcess,pParams,NULL,NULL,true,0,NULL,NULL,rdpsi,rdppi))
    8.     ErrorExit(L"CreateProcess(mstsc)");
    9.   ShowWindow(hWnd,SW_HIDE);
    10.   WaitForSingleObject(rdppi->hProcess,-1);
    11.   ShowWindow(hWnd,SW_SHOW);
    12.   if (bSuccWOW && bWOW64)
    13.   {
    14.      Wow64RevertWow64FsRedirection(oV);
    15.   };
    без всех Wow64* функций WaitForSingleObject сразу возвращается ибо хэндл возвёрнутый в rdppi->hProcess не существует (запускаем procmon Руссиновича и видем: открывается сначала один процесс с хэндлом возвёрнутым нам, а потом этотже процесс с другим хэндлом а старый прибивается.)

    P.S.
    тотже эфект можно пронаблюдать след. образом:
    1.запускаем %systemroot%\syswow64\cmd.exe
    2.в консоле запускаем "start /wait mstsc.exe"
    3.благополучно возвращаемся в консоль, mstsc запущена и её мы не ждём =)
     
  5. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Есть предложение написать 64-битный лоадер который будет запускать приложение и ждать его.
     
  6. horpis

    horpis New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    154
    А разве может быть такое??? Кажется где-то читал что что 64 можно запустить только из 64. Приду домой попробую из фары ИЕ64 запустить.