Автор | Сообщение |
|
| |
Пост N: 31
Зарегистрирован: 02.10.08
|
|
Отправлено: 08.04.09 16:47. Заголовок: Выполнение проги от имени другого пользователя.
Доброго времени суток всем! Надо было мне выполнить прогу от имени другого пользователя (админа) на компе, при том, что текущая учетка - юзера. Накропал такую штуку: #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
[только новые]
|
|
|
| постоянный участник
|
Пост N: 628
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.04.09 17:11. Заголовок: Попробуйте szMsg = h..
Попробуйте szMsg = hb_mbtowc( hb_parc( 1 ) )
|
|
|
|
| |
Пост N: 32
Зарегистрирован: 02.10.08
|
|
Отправлено: 08.04.09 17:38. Заголовок: Грит: Unresolved ext..
Грит: Unresolved external '_hb_mbtowc' я нашел упоминание об етой функции только в "hbwince.h", сделал #include "hbwince.h", но все равно Unresolved external...
|
|
|
|
| постоянный участник
|
Пост N: 630
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.04.09 17:49. Заголовок: wchar_t *hb_mbtowc(..
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; }
|
|
|
|
| постоянный участник
|
Пост N: 631
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.04.09 23:06. Заголовок: Loach пишет: но вро..
Loach пишет: цитата: | но вроде и тип нужный у параметра, и MessageBox показывает "notepad.exe", т.е. параметр передается корректно... |
| Не корректно передается ( попробуйте использовать MessageBoxW и сами увидите ) 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 hb_mbtowc находится в hbcommon.lib
|
|
|
|
| |
Пост N: 33
Зарегистрирован: 02.10.08
|
|
Отправлено: 09.04.09 09:04. Заголовок: Огромное спасибо, Пе..
Огромное спасибо, Петр!!! Все заработало... Но только когда я вставил Ваш исходник hb_mbtowc в прогу... Единственно что, у меня нет hbcommon.lib. Это что за библа? У меня xHarbour Compiler build 1.1.0 (SimpLex) (Rev. 6195) , там в стандартной поставке только common.lib...
|
|
|
|
| постоянный участник
|
Пост N: 632
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.04.09 11:30. Заголовок: Подключайте тогда co..
Подключайте тогда common.lib, hbcommon.lib это для Harbour. В Harbour почти все стандартные библиотеки имеют префикс hb, за исключением rdd* и gt*..
|
|
|
|
| |
Пост N: 34
Зарегистрирован: 02.10.08
|
|
Отправлено: 09.04.09 12:24. Заголовок: Спасибо еще раз за о..
Спасибо еще раз за объяснения, но в xHb в common.lib mbtowc нету :( Я нашел в BC 5.5 функцию mbtowc, но вот такая попытка: mbtowc((wchar_t *)szMsg, (const char *)hb_parc( 1 ), 11 ) приводит только к szMsg = "n"... Опять я чего-то косячу :(
|
|
|
|
| постоянный участник
|
Пост N: 633
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.04.09 13:41. Заголовок: При чем здесь mbtowc..
При чем здесь mbtowc (ее, кстати, вызывать правильно нужно) - используйте hb_mbtowc(..). Просто подключите common.lib и ничего не меняйте в моем примере. Только не говорите, что ее нет Loach пишет: цитата: | я нашел упоминание об етой функции только в "hbwince.h" |
| P.S. Я специально скачал xHb (1.2.01) и откомпилировал пример. Все прекрасно компилируется и работает.
|
|
|
|
| |
Пост N: 35
Зарегистрирован: 02.10.08
|
|
Отправлено: 10.04.09 08:15. Заголовок: Да нет... Все есть....
Да нет... Все есть... И все работать будет, но видимо только на xHb (1.2.01). А у меня xHb (1.1.0). Там этой функции нет в common.lib (Я эту библу по умолчанию к каждому проекту компилю) А перелезать на 1.2.01 как-то боязновато... В любом случае спасибо большое!!!
|
|
|
|
| постоянный участник
|
Пост N: 634
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.04.09 16:23. Заголовок: Я не являюсь пользов..
Я не являюсь пользователем xHarbour и могу ошибаться, но если вы посмотрите на xharbour.org то увидите анонсы версий 1.0.0 Beta и дальше 1.20.01. Без упоминания 1.1.0. Т.е. разработчики более уверены в версии 1.20.01
|
|
|
|