Текущий архив: 2003.07.17;
Скачать: CL | DM;
ВнизКак запустить процесс под другим пользователем? Найти похожие ветки
← →
ng_softman (2003-05-09 10:26) [0]Как, зная имя и пароль другого пользователя, запустить процесс, чтобы тот имел все
привелегии данного пользователя, или хотябы как получить токен контекста безопасности
и/или ACE (Access Control Entry).
функции
- LoginUser & CreateProcesssAsUser
- CreateProcessWithLogonW
выдают ошибку: "A required privilege is not held by the client."
← →
ZZ (2003-05-09 13:58) [1]Определись в желаниях.
А лучше покажи НЕРАБОЧИЙ код с CreateProcessWithLogonW
← →
ng_softman (2003-05-09 15:04) [2]>Определись в желаниях.
>А лучше покажи НЕРАБОЧИЙ код с CreateProcessWithLogonW
2 zz не забудь прописать параметры командной строки
Requirements
Windows NT/2000: Requires Windows 2000.
Windows 95/98: Unsupported.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Advapi32.lib.
Unicode: Implemented only as Unicode.
<pre>
/***************
* CreatePWL.cpp
*
***************/
#ifndef UNICODE
#define UNICODE
#endif
#include "windows.h"
#include <stdio.h>
typedef BOOL (WINAPI *LPCreateProcessWithLogonW)
(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
);
int ErrMsg()
{
int nErr = GetLastError();
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, // message source
nErr, // message id
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language
(LPTSTR) &lpMsgBuf,
0,
NULL);
wprintf(L"%s\n", lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
return nErr;
}
/*
argv[1] - domain
argv[2] - user name
argv[3] - password
*/
int wmain(int argc, wchar_t *argv[])
{
// all parameters are required
//
if (argc != 4)
{
fwprintf(stderr, L"Usage: %s \\\\Domain UserName Password\n", argv[0]);
return 1;
}
int lResult = 0;
HINSTANCE hLib = LoadLibrary(L"advapi32.dll");
if ( hLib != NULL )
{
__try {
STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpDesktop = NULL; // TEXT("winsta0\\default");
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
LPCreateProcessWithLogonW CreateProcessWL;
CreateProcessWL = (LPCreateProcessWithLogonW) GetProcAddress(hLib, "CreateProcessWithLogonW");
if ( CreateProcessWL != NULL )
{
if ( CreateProcessWL(
argv[2], // username
argv[1], // domain
argv[3], // password
1, // LOGON_WITH_PROFILE
NULL, L"logon.exe", // app name & cmd line
CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS,
NULL, NULL,
&si, &pi) )
{
wprintf(L"Ok!!!!!!!\n");
}
else
lResult = ErrMsg();
}
}
__finally
{
FreeLibrary(hLib);
}
}
else
lResult = ErrMsg();
return lResult;
}
</pre>
← →
ZZ (2003-05-10 08:52) [3]Ты будешь смеяться, но эта функция работает :) (правда если изменить L"logon.exe" на L"cmd.exe" ) Ошибок не возвращает.. Вот только для полного счастья поставь 4ым параметром 2, а не 1.
W2000SP2 сеть без домена.
← →
AntonCFG (2003-05-10 09:33) [4]Удалено модератором
Примечание: Задай вопрос в СВОЕЙ ветке
← →
ng_softman (2003-05-10 12:25) [5]2 zz: thanks. Но проблема в том что CreateProcessWithLogonW работает от 2К и выше, а как быть с NT4.
← →
ZZ (2003-05-10 14:46) [6]Без потугов со стороны админа - ничего. Если есть возможность поработать под админом хоть один раз, то LogonUser/CreateProcesAsUser могут работать из сервиса, можно добавить нужные права (не рекомендуется, иначе бы их просто не убирали) всем. И много чего еще, но для настройки этого нужны права админа :(
Страницы: 1 вся ветка
Текущий архив: 2003.07.17;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c