Форум: "WinAPI";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизКак запустить программу в контексте процесса Winlogon.exe? Найти похожие ветки
← →
xAnjel © (2004-11-23 13:53) [0]Как запустить программу в контексте процесса Winlogon.exe, если я перехватил WlxWkstaLockedSAS и имею права System?
Я пробовал запускать и через WinExec и через CreateProcess и через ShellExecute но окно процесса не отображается не на Winlogon Desktop не на Explorer Desktop, а сам процесс запускается и функционирует.
← →
xAnjel © (2004-11-23 14:03) [1]Блокировку Виндовса на свою заменить хочу...
← →
Digitman © (2004-11-23 14:40) [2]
> Как запустить программу в контексте процесса
галиматья.
← →
xAnjel © (2004-11-23 15:03) [3]Не, ну серьйозно, разве никто не знает?
← →
Digitman © (2004-11-23 15:18) [4]
> Не, ну серьйозно
куда уж серьезней - галиматья и есть галиматья.
потому что каждый процесс имеет свой собственный контекст.
и галиматья - это как раз и есть "запустить программу в контексте процесса"
← →
xAnjel © (2004-11-23 15:37) [5]я запускаю із DLL которую загрузил Winlogon.exe и мне нужно, чтобы программа запускалась с окном на Winlogon desktop или на Explorer desktop!!! (messagebox работает и показывает окно на десктопе Winlogon)
← →
nomshar (2004-11-23 15:49) [6]Ты вопрос задал несколько некорректно.
> Блокировку Виндовса на свою заменить хочу...
Это можно. Есть такая штука - MSGINA. Она как раз и отвечает за всякие там диалоги авторизации, вроде нажмите CTRL+ALT+DELETE и т.п.
Читай, учись, потом нам всем покажешь.
http://www.rsdn.ru/article/baseserv/extgina.xml
Также советую посмотреть в MSDN. Вот, что мне выдал поиск по запросу "MSGINA": http://search.microsoft.com/search/results.aspx?qu=MSGINA&View=msdn&st=b&c=4&s=1&swc=4
← →
xAnjel © (2004-11-23 15:54) [7]я через Gina.dll как раз и делаю (хук)
а по английски не очень. Если можна, то по конкретний, пожалуйста
← →
xAnjel © (2004-11-23 15:55) [8]Понял, буду читать...
← →
nomshar (2004-11-23 16:03) [9]
> я через Gina.dll как раз и делаю (хук)
Так в чем же дело. Ты и так все уже знаешь. Теперь либо свою "джину" пиши, либо внедряйся в родную и фильтруй сообщения.
← →
Игорь Шевченко © (2004-11-23 16:44) [10]
> а по английски не очень.
Тогда тебе рано с WinLogon дружить. IMHO, разумеется
← →
Xaker © (2004-11-23 18:06) [11]запросто, запускаем, перехватываем КАД, и делаем, что хотим .. код ищи на форуме - где-то был
← →
xAnjel © (2004-11-23 19:39) [12]
> Тогда тебе рано с WinLogon дружить. IMHO, разумеется
Мне надо дружыть с Winlogon, потому что прогу пишу
> запросто, запускаем, перехватываем КАД, и делаем,
что хотим .. код ищи на форуме - где-то был
Что такое КАД? Пробовал найти что нить но не нашол (искал gina,winlogon,desktop)!
Кто нит киньте экзэмпл как в gina.dll запущенной Winlogon.exe запустить процес чтобы от показал окно на десктопе Winlogon или Explorer, а то процесс то запускаетса, а окна нету ни там, ни там!!!
← →
xAnjel © (2004-11-23 20:12) [13]Удалено модератором
Примечание: Создание пустых сообщений
← →
nomshar (2004-11-24 09:33) [14]
> xAnjel
Слушай, давай так. Ты говоришь, что у тебя процесс запускается, а "окна нету ни там, ни там". Могу предположить, что некоторый код у тебя уже имеется. Покажи его сообществу, чтобы хоть идти в нужном направлении.
И еще. Есть такая структура STARTUPINFO. Она передается в CreateProcess. Так вот, в ней есть такой параметр - lpDesktop. Он как раз и отвечает за рабочий стол, на котором отображается процесс. Поиграй с этим параметром, возможно поможет.
Отпиши о результатах
← →
xAnjel © (2004-11-24 16:07) [15]
> Могу предположить, что некоторый код у тебя уже имеется.
> Покажи его сообществу, чтобы хоть идти в нужном направлении.
Этот код модератор зразу удалит. (после не сложной дороботки кода можно перехватывать нажатия Ctrl+Atl+Del и пароль на вход в систему, что приравняют к хаковой проге)
> Есть такая структура STARTUPINFO. Она передается в CreateProcess.
> Так вот, в ней есть такой параметр - lpDesktop. Он как раз
> и отвечает за рабочий стол, на котором отображается процесс.
> Поиграй с этим параметром, возможно поможет.
> Отпиши о результатах
Попробую, но а WinExec и ShellExecute куда окно проги девают?
“If lpDesktop is NULL, the new process inherits the window station and desktop of its parent process”.
У меня так и било в проге но окна не показывало. Пробовал запускать прогу с plDesktop от Shell который перехватывал в WlxActivateUserShell но тогда прога вылетала с “Ошибка при инициализации приложения (0xc0000142)” .
← →
nomshar (2004-11-24 17:06) [16]
> Этот код модератор зразу удалит
С чего это вдруг?
> что приравняют к хаковой проге
Ну и что. Я размещал код внедрения в explorer.exe и все нормально. Не важно, какие цели преследует программа, важно, как она написана.
> Попробую, но а WinExec и ShellExecute куда окно проги девают?
Вообще-то WinExec просто запускает программу на текущем рабочем столе и все.
Также я бы не сказал, что ShellExecute предназначена для запуска внешних процессов. Скорее она производит некоторое действие с указанным файлом, причем что это будет за действие зависит от параметра lpOperation. Если же ты пытаешься запустить таким образом свой процесс, то, думаю, это не лучшее решение.
Есть хорошая функция CreateProcess.
И последнее. Очень прошу тебя, покажи, что ты делаешь, иначе разговор просто теряет смысл. Покажи, как ты делаешь перехват, что потом делаешь и как.
← →
xAnjel © (2004-11-24 18:48) [17]library xGina;
uses
Windows,
Messages,//shellapi,
WinWlx;
{$R main.res}
const
// Location of the real MSGINA.
REALGINA_PATH = "MSGINA.DLL";
GINASTUB_VERSION = WLX_VERSION_1_3;
var
// Winlogon function dispatch table.
g_pWinlogon: Pointer = nil;
g_dwVersion: DWORD = WLX_VERSION_1_3;
osvi: OSVersionInfo = (
dwOSVersionInfoSize: sizeof(OSVersionInfo);
);
// Pointers to redirected functions.
WlxFuncs: WLX_DISPATCH_VERSION_1_3;
hUserToken: THandle;
var
// Pointers to the real MSGINA functions.
pfWlxNegotiate: TFNWlxNegotiate;
pfWlxInitialize: TFNWlxInitialize;
pfWlxActivateUserShell: TFNWlxActivateUserShell;
pfWlxWkstaLockedSAS: TFNWlxWkstaLockedSAS;
pfWlxStartApplication: TFNWlxStartApplication = nil;
pfWlxScreenSaverNotify: TFNWlxScreenSaverNotify = nil;
{and others. It doesn"t metter}
// Hook into the real MSGINA.
function MyInitialize(hDll: HMODULE; dwWlxVersion: DWORD): Boolean;
begin
Result := False;
ZeroMemory(@WlxFuncs, sizeof(WlxFuncs));
// Get pointers to all of the WLX functions in the real MSGINA.
pfWlxInitialize := GetProcAddress(hDll, "WlxInitialize");
pfWlxActivateUserShell := GetProcAddress(hDll, "WlxActivateUserShell");
pfWlxWkstaLockedSAS := GetProcAddress(hDll, "WlxWkstaLockedSAS");
if not (
Assigned(pfWlxInitialize) and
Assigned(pfWlxActivateUserShell) and
Assigned(pfWlxWkstaLockedSAS) and
exit;
// Load functions for version 1.1 as necessary.
if dwWlxVersion > WLX_VERSION_1_0 then
begin
pfWlxStartApplication := GetProcAddress(hDll, "WlxStartApplication");
pfWlxScreenSaverNotify := GetProcAddress(hDll, "WlxScreenSaverNotify");
if not (
Assigned(pfWlxStartApplication) and
Assigned(pfWlxScreenSaverNotify)) then
exit;
end;
{and others}
Result := True;
end;
function WlxNegotiate(
dwWinlogonVersion: DWORD;
pdwDllVersion: PDWORD
): BOOL; stdcall;
var
hDll: HMODULE;
dwWlxVersion: DWORD;
begin
result := False;
dwWlxVersion := GINASTUB_VERSION;
// Load MSGINA.DLL.
hDll := LoadLibrary(REALGINA_PATH);
if hDll = 0 then
exit;
// Get pointers to WlxNegotiate function in the real MSGINA.
pfWlxNegotiate := GetProcAddress(hDll, "WlxNegotiate");
if not Assigned(pfWlxNegotiate) then
exit;
// Handle older version of Winlogon.
if (dwWinlogonVersion < dwWlxVersion) then
dwWlxVersion := dwWinlogonVersion;
// Negotiate with MSGINA for version that we can support.
if not pfWlxNegotiate(dwWlxVersion, @dwWlxVersion) then
exit;
// Load the rest of the WLX functions from the real MSGINA.
if not MyInitialize(hDll, dwWlxVersion) then
exit;
// Inform Winlogon which version to use.
pdwDllVersion^ := dwWlxVersion;
// Save it to a global variable ...
g_dwVersion := dwWlxVersion;
result := True;
end;
function WlxInitialize(
lpWinsta: PWideChar;
hWlx: THandle;
pvReserved: Pointer;
pWinlogonFunctions: Pointer;
var pWlxContext: Pointer
): BOOL; stdcall;
begin
g_pWinlogon := pWinlogonFunctions;
result := pfWlxInitialize(lpWinsta, hWlx, pvReserved, pWinlogonFunctions, pWlxContext);
end;
procedure xWait(s:string;pwc:PWideChar);
var ProcInfo: TProcessInformation;
StartupInfo: TStartupInfo;
// pc:PChar;
begin
GetStartupInfo(StartupInfo);
with StartupInfo do begin
cb:=SizeOf(StartupInfo);
wShowWindow:=SW_SHOW;
dwFlags:=dwFlags or STARTF_USESHOWWINDOW;
// GetWindowText(GetDesktopWindow,pc,255); {no windows}
// pc:="Explorer"; {exe not started}
// pc:="winlogon"; {exe not started}
lpDesktop:=pwc;
end;
CreateProcess(nil,PChar(s),nil,nil,false,NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcInfo);
// WaitForSingleObject(ProcInfo.hProcess,INFINITE);
CloseHandle(ProcInfo.hProcess);
end;
function WlxActivateUserShell(
pWlxContext: Pointer;
pszDesktopName: PWideChar;
pszMprLogonScript: PWideChar;
pEnvironment: Pointer
): BOOL; stdcall;
begin
//Start Explorer.exe from user acount
MessageBox(0,PChar(pszDesktopName),"x",MB_OK);
xWait("c:\1.exe",pszDesktopName); {don"t work}
result := pfWlxActivateUserShell(pWlxContext, pszDesktopName, pszMprLogonScript, pEnvironment);
end;
function WlxWkstaLockedSAS(
pWlxContext: Pointer;
dwSasType: DWORD
): Integer; stdcall;
begin
{ WinExec("c:\x1.exe",SW_SHOW);
ShellExecute(GetDesktopWindow,"open","c:\1.exe","","",SW_SHOW);
ShellExecute(0,"open","c:\1.exe","","",SW_SHOW);
ShellExecute(WLX_DESKTOP_HANDLE,"open","c:\1.exe","","",SW_SHOW);}
xWait("c:\1.exe","");
Sleep(10000);
Result:=WLX_SAS_ACTION_UNLOCK_WKSTA;
end;
function WlxScreenSaverNotify(
pWlxContext: Pointer;
var pSecure: BOOL
): BOOL; stdcall;
begin
//Start ScreenSaver (and on user mode too)
// Result:=false;
result := pfWlxScreenSaverNotify(pWlxContext, pSecure);
end;
function WlxStartApplication(
pWlxContext: Pointer;
pszDesktopName: PWideChar;
pEnvironment: Pointer;
pszCmdLine: PWideChar
): BOOL; stdcall;
begin
Result:=false;
MessageBox(0,PChar(pszDesktopName),"x",MB_OK);
xWait("c:\1.exe",pszDesktopName);
end;
{and others}
exports
WlxNegotiate,
WlxInitialize,
WlxDisplaySASNotice,
WlxLoggedOutSAS,
WlxActivateUserShell,
WlxLoggedOnSAS,
WlxDisplayLockedNotice,
WlxWkstaLockedSAS,
WlxIsLockOk,
WlxIsLogoffOk,
WlxLogoff,
WlxShutdown,
WlxStartApplication,
WlxScreenSaverNotify,
WlxNetworkProviderLoad,
WlxDisplayStatusMessage,
WlxGetStatusMessage,
WlxRemoveStatusMessage;
end.
← →
Xaker © (2004-11-24 19:02) [18]xAnjel © (24.11.04 18:48) [17]
thanks
а как подключать ?
(инсталлировать)
← →
nomshar © (2004-11-24 19:31) [19]
> xAnjel
Интересный код. Только в нем ничего, что о том, как ты перехватываешь функции.
Ты пытаешься просто подменить MSGINA на свою. Хорошо.
Я сегодня, завтра код протестирую, посмотрим, что там не работает и почему.
← →
Xaker © (2004-11-24 19:41) [20]xAnjel © (24.11.04 16:07) [15]
> Этот код модератор зразу удалит. (после не сложной
> дороботки кода можно перехватывать нажатия
> Ctrl+Atl+Del и пароль на вход в систему, что
> приравняют к хаковой проге)
я такую делал - несложно ;)
но удалят 100%
← →
xAnjel © (2004-11-24 19:43) [21]Да там все работает только вызов CreateProcess не делает то что далжен. Смотри WlxStartApplication,WlxWkstaLockedSAS,WlxActivateUserShell вызов xWait
← →
xAnjel © (2004-11-25 14:27) [22]Нашол другой способ решения своей проблемы, но если ктото разберьотса с тем, почему нету окна в запускаемых программах то кидайте на мыло: xAnjel@rambler.ru или в ICQ: 8999643
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.04 c