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 только без запрашивания пароля)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.