Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.036 c
14-1103795695
antonn
2004-12-23 12:54
2005.01.16
Мне кажется, что этот форум умирает.


14-1104393826
Layner
2004-12-30 11:03
2005.01.16
Прошу прощения, что не в тему, но кто нибудь имеет опыт


4-1101469577
Unknown user
2004-11-26 14:46
2005.01.16
try except...


1-1104328264
Egloo
2004-12-29 16:51
2005.01.16
String vs. WideString в DLL


3-1102404457
GekaNaz
2004-12-07 10:27
2005.01.16
Проблема дисконнекта в InterBase6.5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский