Форум » [x]Harbour » Выполнение проги от имени другого пользователя. » Ответить

Выполнение проги от имени другого пользователя.

Loach: Доброго времени суток всем! Надо было мне выполнить прогу от имени другого пользователя (админа) на компе, при том, что текущая учетка - юзера. Накропал такую штуку: #include "FiveWin.ch" function Main() cccc("notepad.exe") return nil #PRAGMA BEGINDUMP #include "Windows.h" #include "ClipApi.h" HB_FUNC( CCCC ) { LPWSTR szMsg ; HWND hWnd; PROCESS_INFORMATION ProcInfo; STARTUPINFOW StartInfo; ZeroMemory(&StartInfo, sizeof(STARTUPINFOW)); StartInfo.cb = sizeof(STARTUPINFOW); StartInfo.lpDesktop = 0; szMsg = _parc( 1 ) ; //MessageBox( GetActiveWindow(), szMsg, "" , 0x40 ); CreateProcessWithLogonW( L"admin", NIL, L"mypassword", LOGON_WITH_PROFILE, NULL, L"notepad.exe" , CREATE_DEFAULT_ERROR_MODE| CREATE_NEW_CONSOLE , NULL, NULL, &StartInfo, &ProcInfo ) ; _retni(1); } #PRAGMA ENDDUMP Так-то все работает как часики... Но если поставить CreateProcessWithLogonW( L"admin", NIL, L"mypassword", LOGON_WITH_PROFILE, NULL, szMsg , CREATE_DEFAULT_ERROR_MODE| CREATE_NEW_CONSOLE , NULL, NULL, &StartInfo, &ProcInfo ) ; то есть не вьявную указывать прогу или командную строку, а передавать параметром в C функцию, то ни фига не происходит... Уже устал крутить все это дело. Чуствую, что что-то с типами, но вроде и тип нужный у параметра, и MessageBox показывает "notepad.exe", т.е. параметр передается корректно... Засада какая-то короче... Может кто подскажет чего?

Ответов - 10

Петр: Попробуйте szMsg = hb_mbtowc( hb_parc( 1 ) )

Loach: Грит: Unresolved external '_hb_mbtowc' я нашел упоминание об етой функции только в "hbwince.h", сделал #include "hbwince.h", но все равно Unresolved external...

Петр: wchar_t *hb_mbtowc( const char *srcA ) { DWORD length; wchar_t *dstW; length = MultiByteToWideChar( CP_ACP, 0, srcA, -1, NULL, 0 ); dstW = ( wchar_t * ) hb_xgrab( ( length + 1 ) * sizeof( wchar_t ) ); MultiByteToWideChar( CP_ACP, 0, srcA, -1, dstW, length + 1 ); return dstW; }


Петр: Loach пишет: но вроде и тип нужный у параметра, и MessageBox показывает "notepad.exe", т.е. параметр передается корректно... Не корректно передается ( попробуйте использовать MessageBoxW и сами увидите ) [pre2]function Main() ? cccc("notepad.exe") return nil #pragma BEGINDUMP #define UNICODE #define _WIN32_WINNT 0x0500 #include "windows.h" #include "hbapi.h" HB_FUNC( CCCC ) { wchar_t * szMsg; PROCESS_INFORMATION ProcInfo = {0}; STARTUPINFOW StartInfo = {0}; StartInfo.cb = sizeof(STARTUPINFOW); szMsg = hb_mbtowc( (const char *) hb_parc(1) ); //MessageBox( GetActiveWindow(), szMsg, L"Info", 0x40 ); hb_retni( CreateProcessWithLogonW(L"adm0n", L".", L"password", 1, NULL, szMsg, CREATE_DEFAULT_ERROR_MODE|CREATE_NEW_CONSOLE, NULL, NULL, &StartInfo, &ProcInfo) ); hb_xfree( (void *) szMsg ); } #pragma ENDDUMP [/pre2] hb_mbtowc находится в hbcommon.lib

Loach: Огромное спасибо, Петр!!! Все заработало... Но только когда я вставил Ваш исходник hb_mbtowc в прогу... Единственно что, у меня нет hbcommon.lib. Это что за библа? У меня xHarbour Compiler build 1.1.0 (SimpLex) (Rev. 6195) , там в стандартной поставке только common.lib...

Петр: Подключайте тогда common.lib, hbcommon.lib это для Harbour. В Harbour почти все стандартные библиотеки имеют префикс hb, за исключением rdd* и gt*..

Loach: Спасибо еще раз за объяснения, но в xHb в common.lib mbtowc нету :( Я нашел в BC 5.5 функцию mbtowc, но вот такая попытка: mbtowc((wchar_t *)szMsg, (const char *)hb_parc( 1 ), 11 ) приводит только к szMsg = "n"... Опять я чего-то косячу :(

Петр: При чем здесь mbtowc (ее, кстати, вызывать правильно нужно) - используйте hb_mbtowc(..). Просто подключите common.lib и ничего не меняйте в моем примере. Только не говорите, что ее нет Loach пишет: я нашел упоминание об етой функции только в "hbwince.h" P.S. Я специально скачал xHb (1.2.01) и откомпилировал пример. Все прекрасно компилируется и работает.

Loach: Да нет... Все есть... И все работать будет, но видимо только на xHb (1.2.01). А у меня xHb (1.1.0). Там этой функции нет в common.lib (Я эту библу по умолчанию к каждому проекту компилю) А перелезать на 1.2.01 как-то боязновато... В любом случае спасибо большое!!!

Петр: Я не являюсь пользователем xHarbour и могу ошибаться, но если вы посмотрите на xharbour.org то увидите анонсы версий 1.0.0 Beta и дальше 1.20.01. Без упоминания 1.1.0. Т.е. разработчики более уверены в версии 1.20.01



полная версия страницы