Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как запустить процесс под другим пользователем? [NT4, Win2k, WinXP]


ng_softman ©   (2003-05-09 10:26:00) 

Как, зная имяи парольдругого пользователя, запустить процесс, чтобы тот имел все

привелегии данного пользователя, или хотябы как получить токен контекста безопасности

и/или ACE (Access Control Entry).

функции
- LoginUser & CreateProcesssAsUser
- CreateProcessWithLogonW
выдают ошибку: "A required privilege is not held by the client."


ZZ   (2003-05-10 14:46:00) [1]

Без потугов со стороны админа - ничего. Если есть возможность поработать под админом хоть один раз, то LogonUser/CreateProcesAsUser могут работать из сервиса, можно добавить нужные права (не рекомендуется, иначе бы их просто не убирали) всем. И много чего еще, но для настройки этого нужны права админа :(


ng_softman   (2003-05-10 12:25:00) [2]

2 zz: thanks. Но проблема в том что CreateProcessWithLogonW работает от 2К и выше, а как быть с NT4.


AntonCFG   (2003-05-10 09:33:00) [3]

Удалено модератором
Примечание: Задай вопрос в СВОЕЙ ветке


ZZ   (2003-05-10 08:52:00) [4]

Ты будешь смеяться, но эта функция работает :) (правда если изменить L"logon.exe" на L"cmd.exe" ) Ошибок не возвращает.. Вот только для полного счастья поставь 4ым параметром 2, а не 1.
W2000SP2 сеть без домена.


ng_softman   (2003-05-09 15:04:00) [5]

>Определись в желаниях.
>А лучше покажи НЕРАБОЧИЙ код с 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.


/***************
* CreatePWL.cpp
*
***************/

#ifndef UNICODE
#define UNICODE
#endif

#include "windows.h"
#include


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;
}


ZZ   (2003-05-09 13:58:00) [6]

Определись в желаниях.
А лучше покажи НЕРАБОЧИЙ код с CreateProcessWithLogonW


Наверх

Титульная страница Поиск, карта сайта Написать письмо