Запуск native приложения в режиме Win32

Тема в разделе "WASM.BEGINNERS", создана пользователем AndjellaArtavazdovna, 30 июл 2011.

  1. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Добрый день. Вопрос следующий. Прога написана с использованием только native API . Необходимо чтобы при запуске
    в режиме Win32 программа прописывала себя в ключе \\Registry\\Machine\\System\\CurrentControlSet\\Control\\Session Manager, BootExecute,а при перезагрузке запускалась бы через этот ключ и патчила определенные экзешники. Если собрать приложение с ключем /SUBSYSTEM:NATIVE,то оно не запуститься
    в Win32,если с /SUBSYSTEM:WINDOWS - не запуститься через этот ключ. Возможно ли как-то выполнить и первое и второе для
    одного из вариантов сборки?
     
  2. phoukait

    phoukait New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    43
    Код (Text):
    1.        if ( ImageInformation.SubSystemType != IMAGE_SUBSYSTEM_WINDOWS_GUI &&
    2.              ImageInformation.SubSystemType != IMAGE_SUBSYSTEM_WINDOWS_CUI ) {
    3.  
    4.             // POSIX exe
    5.  
    6.             NtClose(SectionHandle);
    7.             SectionHandle = NULL;
    8.  
    9.             if ( ImageInformation.SubSystemType == IMAGE_SUBSYSTEM_POSIX_CUI ) {
    10.  
    11.                 if ( !BuildSubSysCommandLine( L"POSIX /P ",
    12.                                               lpApplicationName,
    13.                                               lpCommandLine,
    14.                                               &SubSysCommandLine
    15.                                             ) ) {
    16.                     return FALSE;
    17.                 }
    18.  
    19.                 lpCommandLine = SubSysCommandLine.Buffer;
    20.  
    21.                 lpApplicationName = NULL;
    22.                 RtlFreeHeap(RtlProcessHeap(), 0, NameBuffer);
    23.                 NameBuffer = NULL;
    24.                 goto VdmRetry;
    25.                 }
    26.             else {
    27.                 SetLastError(ERROR_CHILD_NOT_COMPLETE);
    28.                 return FALSE;
    29.                 }
    30.             }
    31.         else {
    32.             if (!BasepIsImageVersionOk( ImageInformation.SubSystemMajorVersion,
    33.                                         ImageInformation.SubSystemMinorVersion) ) {
    34.                 SetLastError(ERROR_BAD_EXE_FORMAT);
    35.                 return FALSE;
    36.                 }
    37.             }