Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Запуск exe'шника от имени другово юзера
 
Здрасте всем!
Вот на днях увидел исходник,некоментированный,и этот исходник должен запускать проги в XP  от имени любого пользователя!
Собствено вопрос состоит в следующем -
Подскажите какие функции использовать для запуска проги от любого имени...
 
Вызов команды runas, в параметры которой передаёшь имя пользователя и запускаемое приложение. Правда, после этого ручками надо будет вводить пароль этого юзера
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
Цитата
Вася в пишет:
Подскажите какие функции использовать для запуска проги от любого имени
например  CreateProcessWithLogonW
 
nalek
да именно этими функциями пользуются в том исходнике...
но хотелось бы узнать какие параметры им передавать...
в мсдн всё по английски,а в нём не очень силён...
если кто нить знает как эту функцию использовать помогите плз!
 
Цитата
Вася в пишет:
но хотелось бы узнать какие параметры им передавать...

когда-то давно писал подобную софтину, использовал ANSI поэтому пришлось гемороиццо с переводом в unicode, короче вот небольшой кусок:
Код
BOOL (WINAPI* CreateProcessWithLogonW)(
  LPCWSTR lpUsername,                 // user's name
  LPCWSTR lpDomain,                   // user's domain
  LPCWSTR lpPassword,                 // user's password
  DWORD dwLogonFlags,                 // logon option
  LPCWSTR lpApplicationName,          // executable module name
  LPWSTR lpCommandLine,               // command-line string
  DWORD dwCreationFlags,              // creation flags
  LPVOID lpEnvironment,               // new environment block
  LPCWSTR lpCurrentDirectory,         // current directory name
  LPSTARTUPINFOW lpStartupInfo,       // startup information
  LPPROCESS_INFORMATION lpProcessInfo // process information
);

//
// process
//
//
// 0 - success
// 1 - auth error
// 3 - create proc error
// 2 - MultiByteToWideChar error
// 4 - LoadLibrary error
int RunAs(char *szModule, char *szParam, char *szDomain, char *szUser, char *szPswd, DWORD dwFlags )
{
   int iRet = 2; // default: unicode translate error
   int iLen = 0;

   wchar_t *wDom = NULL;
   wchar_t *wUsr = NULL;
   wchar_t *wPss = NULL;
   wchar_t *wMod = NULL;
   wchar_t *wPar = NULL;

   STARTUPINFOW l_StartupInfo;
   ZeroMemory(&l_StartupInfo, sizeof(l_StartupInfo));
   l_StartupInfo.cb = sizeof(l_StartupInfo);
   PROCESS_INFORMATION l_ProcessInfo;

   DWORD dwErr = 0;

   HMODULE hMod = LoadLibrary("advapi32.dll");
   if( hMod == NULL )
   {
      // ERROR
      return 4;
   }
   else
   {
      *((DWORD*)&CreateProcessWithLogonW) = (DWORD)GetProcAddress(hMod, "CreateProcessWithLogonW");
      if ( CreateProcessWithLogonW == NULL )
      {
         // ERROR
         return 4;
      }
   }

   // calc unicode len
   iLen = MultiByteToWideChar( CP_ACP, 0, szDomain, -1, NULL, 0 );
   if(iLen != 0 )
   {
      wDom = new wchar_t[iLen + 1];

      if( MultiByteToWideChar( CP_ACP, 0, szDomain, -1, wDom, iLen ) != 0 )
      {
         iLen = MultiByteToWideChar( CP_ACP, 0, szUser, -1, NULL, 0 );

         if( iLen != 0 )
         {
            wUsr = new wchar_t[iLen + 1];

            if( MultiByteToWideChar( CP_ACP, 0, szUser, -1, wUsr, iLen ) != 0 )
            {
               iLen = MultiByteToWideChar( CP_ACP, 0, szPswd, -1, NULL, 0 );

               if( iLen != 0 )
               {
                  wPss = new wchar_t[iLen + 1];

                  if( MultiByteToWideChar( CP_ACP, 0, szPswd, -1, wPss, iLen ) )
                  {
                     iLen = MultiByteToWideChar( CP_ACP, 0, szModule, -1, NULL, 0 );

                     if( iLen != 0 )
                     {
                        wMod = new wchar_t[iLen + 1];

                        if( MultiByteToWideChar( CP_ACP, 0, szModule, -1, wMod, iLen ) )
                        {
                           iLen = MultiByteToWideChar( CP_ACP, 0, szParam, -1, NULL, 0 );

                           if( iLen != 0)
                           {
                              wPar = new wchar_t[iLen + 1];

                              if( MultiByteToWideChar( CP_ACP, 0, szParam, -1, wPar, iLen ) )
                              {
                                 //////////////////////////////
                                 if( !CreateProcessWithLogonW(wUsr, wDom, wPss, dwFlags,  wMod, wPar, 0, NULL, NULL, &l_StartupInfo, &l_ProcessInfo) )
                                 {
                                    // ERROR
                                    dwErr = GetLastError();

                                    // authentification error
                                    if( dwErr == 1326 )
                                    {
                                       iRet = 1;
                                    }
                                    else
                                    {
                                       iRet = 3;
                                    }
                                 }
                                 else
                                 {
                                    // SUCCESSED
                                    iRet = 0;
                                 }
                                 //////////////////////////////////////////
                              }

                              delete[] wPar;
                           }
                        }

                        delete[] wMod;
                     }
                  }
                  delete[] wPss;
               }
            }
            delete[] wUsr;
         }
      }
      delete[] wDom;
   }
   FreeLibrary(hMod);

   return iRet;
}
Страницы: 1
Читают тему