CreateProcessWithLogonW
От: Чепель Дмитрий Михайлович Россия  
Дата: 28.08.01 10:17
Оценка:
По этой теме два вопроса.

OS:Win2000
1.В MSDN написано, что заголовок должен быть в <winbase.h> через
<windows.h> но такого заголовка в моей версии Visual Studio 6.0 sp2 нет.
Вопрос почему.

2. Ладно берём из MSDN объявление, и ...

BOOL (*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
);

HINSTANCE h = LoadLibrary("ADVAPI32.dll");
CreateProcessWithLogonW=(BOOL (*)(
LPCWSTR lpUsername, LPCWSTR lpDomain, LPCWSTR lpPassword,
DWORD dwLogonFlags,LPCWSTR lpApplicationName, LPWSTR lpCommandLine,
DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory,
LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInfo))
GetProcAddress(h,"CreateProcessWithLogonW");//АДРЕС не NULL и не
// 0xcccccc. Проверял.

LPCWSTR lpUsername=L"admin";
LPCWSTR lpDomain=NULL;
LPCWSTR lpPassword=L"pass";

DWORD dwLogonFlags=0;//LOGON_WITH_PROFILE
//^^^^(в заголовочном файле
такой константы нет)
STR lpApplicationName=L"D:\\utils\\FMRadio\\FMRADIO.EXE";
LPWSTR lpCommandLine=NULL;
DWORD dwCreationFlags=CREATE_DEFAULT_ERROR_MODE;
LPVOID lpEnvironment=NULL;
LPCWSTR lpCurrentDirectory =L"D:\\utils\\FMRadio\\";
STARTUPINFOW StartupInfo;
PROCESS_INFORMATION ProcessInfo;
memset((void*)(&StartupInfo),0,sizeof(STARTUPINFOW));
StartupInfo.cb = sizeof(STARTUPINFOW);

CreateProcessWithLogonW(
lpUsername, // user's name
lpDomain, // user's domain
lpPassword, // user's password
dwLogonFlags, // logon option
lpApplicationName, // executable module name
lpCommandLine, // command-line string
dwCreationFlags, // creation flags
lpEnvironment, // new environment block
lpCurrentDirectory, // current directory name
&StartupInfo, // startup information
&ProcessInfo // process information
);//Здесь ошибка периода исполнения. Причём у меня есть подозрение, что в
MSDN неправильно описан заголовок функции.



PS: Всё это нужно для того, чтобы под учетной записью обычного пользователя
была возможность запускать программы с динамической загрузкой драйверов.
(чтото типа службы runas только без запрашивания пароля)
Re: CreateProcessWithLogonW
От: Alex Fedotov США  
Дата: 28.08.01 14:17
Оценка:
Здравствуйте Чепель Дмитрий Михайлович, вы писали:

ЧДМ>По этой теме два вопроса.


ЧДМ>OS:Win2000

ЧДМ>1.В MSDN написано, что заголовок должен быть в <winbase.h> через
ЧДМ><windows.h> но такого заголовка в моей версии Visual Studio 6.0 sp2 нет.
ЧДМ>Вопрос почему.

Потому что Visual Studio 6.0 sp2 безумно устарел. Для таких дел надо иметь установленным Platfrom SDK посвежее.

ЧДМ>2. Ладно берём из MSDN объявление, и ...


ЧДМ>BOOL (*CreateProcessWithLogonW)(


BOOL (__stdcall * CreateProcessWithLogonW)(

Далее по тексту.


ЧДМ> DWORD dwLogonFlags=0;//LOGON_WITH_PROFILE

ЧДМ> //^^^^(в заголовочном файле такой константы нет)

#define LOGON_WITH_PROFILE 0x00000001
#define LOGON_NETCREDENTIALS_ONLY 0x00000002
-- Alex Fedotov
Re[2]: CreateProcessWithLogonW
От: ZORK Россия www.zorkaltsev.com
Дата: 28.08.01 16:07
Оценка:
Здравствуйте Alex Fedotov, вы писали:

AF>Здравствуйте Чепель Дмитрий Михайлович, вы писали:


ЧДМ>>По этой теме два вопроса.


ЧДМ>>OS:Win2000

ЧДМ>>1.В MSDN написано, что заголовок должен быть в <winbase.h> через
ЧДМ>><windows.h> но такого заголовка в моей версии Visual Studio 6.0 sp2 нет.
ЧДМ>>Вопрос почему.

AF>Потому что Visual Studio 6.0 sp2 безумно устарел. Для таких дел надо иметь установленным Platfrom SDK посвежее.


Уточню, что SP вообще не помогает, даже если поставить SP5 там все равно этого нет, это есть только в Platform SDK
Думать надо ...головой :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.