Logoff winNT user programmatically (from Java)

User avatar
nperm
Уже с Приветом
Posts: 108
Joined: 10 Oct 1999 09:01
Location: Staten Island, NY

Logoff winNT user programmatically (from Java)

Post by nperm »

If someone aware please share your ideas.

Thank you.
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Post by vaduz »

Native call

(Java - suxx, mast die)
User avatar
nperm
Уже с Приветом
Posts: 108
Joined: 10 Oct 1999 09:01
Location: Staten Island, NY

Post by nperm »

Vaduz, can you please tell me where i am wrong:

class Logoff {
public static void main(String [] str) {
Win32.ExitWindowsEx(0, 0);
}
}

public class Win32
{
/**
* @dll.import("user32",auto)
*/
public static native boolean ExitWindowsEx(int uFlags, int dwReserved);
}

Error:
java.lang.UnsatisfiedLinkError: ExitWindowsEx
at Win32.ExitWindowsEx(Native Method)
at Logoff.main(Logoff.java:3)
Exception in thread "main"
Tool completed with exit code 1

Thank you.
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Post by vaduz »

/**
* @dll.import("user32",auto)
*/

Наверное, нужно dll подгрузить. Как в VJ++ не знаю, а вообще

Code: Select all

static { System.loadLibrary("my_dll"); }
User avatar
nperm
Уже с Приветом
Posts: 108
Joined: 10 Oct 1999 09:01
Location: Staten Island, NY

Post by nperm »

I changed it to

public class Win32
{
static { System.loadLibrary("user32"); }
public static native boolean ExitWindowsEx(int uFlags, int dwReserved);
}

and got the same message. :(

Thanks anyway.
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Post by vaduz »

Надо звать A. Fig Lee - он жаваписец.

( Я бы сделал сначала пустую dll-ку и попробовал ее подключить, а потом уже туда уже добавил бы вызов ExitWindowsEx).
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Post by Palych »

nperm wrote:I changed it to

public class Win32
{
static { System.loadLibrary("user32"); }
public static native boolean ExitWindowsEx(int uFlags, int dwReserved);
}

and got the same message. :(

Thanks anyway.


AFAIR you can't call random method in random DLL/SO.
Did you look here?
http://developer.java.sun.com/developer ... tml#native
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

vaduz wrote:Надо звать A. Fig Lee - он жаваписец.

( Я бы сделал сначала пустую dll-ку и попробовал ее подключить, а потом уже туда уже добавил бы вызов ExitWindowsEx).

Точно. Напрямую звать нельзя.
1. Сделать примерно так:

public class Win32
{
public static native boolean KajukWindows();
static
{
System.LoadLibrary("kajuk");
}
}
2. Run javah.
3. Посмотреть header file который состряпала javah и убедится что имя пакеджа на месте в названии вызова процедуры, если ето у Вас в пакедше.
4. Пишем имплементацию на C/C++ для функции KajukWindows и компайлим ее с аутпут именем kajuk.dll
Внутри функции KajukWindows() загружаем user32.dll и зовем ExitWindowsEx с параметрами какие надо.
5. компайлим ету библиотеку.
6. Запускаем, если не работает - в параметре к
java добавляем -Djava.library=PATH_TO_KAJUK ну и прочие PATH по вкусу.

Теория:
http://java.sun.com/docs/books/tutorial/native1.1/
Верить нельзя никому - даже себе. Мне - можно!
User avatar
nperm
Уже с Приветом
Posts: 108
Joined: 10 Oct 1999 09:01
Location: Staten Island, NY

Post by nperm »

Thanks to Fig Lee and everyone.

Nepomernym trudom byl naiden logoff.exe for winNT that fits perfectly our needs.
when it is called, it just logoff without any silly interfaces (the same way as it is in winXP).

it is in there under logoff subtitle:

http://wwwthep.physik.uni-mainz.de/~frink/nt.html
hb
Posts: 14
Joined: 04 Jun 2001 09:01
Location: Pandora's box

logoff.exe, shutdown.exe, poweroff.exe reboot.exe длиной 1KB

Post by hb »

nperm wrote: Nepomernym trudom byl naiden logoff.exe for winNT that fits perfectly our needs.
when it is called, it just logoff without any silly interfaces (the same way as it is in winXP).

it is in there under logoff subtitle:

http://wwwthep.physik.uni-mainz.de/~frink/nt.html


Не очень понимаю, зачем было заморачиваться с такой монструозной и специфической вещью, как Ява, если вам на самом деле нужна была всего лишь консольная утилита, делающая log off. Так бы и сказали сразу.
Кстати, в результате "непомерного труда" вы нашли довольно странную вещь -- утилиту, которая делает (всего лишь) 1 системный вызов, размером 80 (!!) kB, при этом версии (!) V0.1 PRE-BETA (!!).
Вы бы сказали сразу, чтО вам нужно, я б вам дал logoff.exe размером 1 kB (1088 Bytes), а также, для комплекта, poweroff.exe, reboot.exe и shutdown.exe. Мои утилиты умнее той рабоче-крестьянской 80-килобайтной, т. к. вначале сами себе выставляют привилегию SeShutdownPrivilege, без которой сделать poweroff/reboot/shutdown не получится.
logoff.exe
poweroff.exe
shutdown.exe
reboot.exe
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: logoff.exe, shutdown.exe, poweroff.exe reboot.exe длиной 1KB

Post by A. Fig Lee »

hb wrote:
nperm wrote: Nepomernym trudom byl naiden logoff.exe for winNT that fits perfectly our needs.
when it is called, it just logoff without any silly interfaces (the same way as it is in winXP).

it is in there under logoff subtitle:

http://wwwthep.physik.uni-mainz.de/~frink/nt.html


Не очень понимаю, зачем было заморачиваться с такой монструозной и специфической вещью, как Ява, если вам на самом деле нужна была всего лишь консольная утилита, делающая log off. Так бы и сказали сразу.

А откуда ето следует? - что
на самом деле нужна была всего лишь консольная утилита, делающая log off
Верить нельзя никому - даже себе. Мне - можно!
hb
Posts: 14
Joined: 04 Jun 2001 09:01
Location: Pandora's box

Re: logoff.exe, shutdown.exe, poweroff.exe reboot.exe длиной 1KB

Post by hb »

A. Fig Lee wrote:
hb wrote:
nperm wrote: Nepomernym trudom byl naiden logoff.exe for winNT that fits perfectly our needs.
Не очень понимаю, зачем было заморачиваться с такой монструозной и специфической вещью, как Ява, если вам на самом деле нужна была всего лишь консольная утилита, делающая log off.
А откуда ето следует? - что
на самом деле нужна была всего лишь консольная утилита, делающая log off


На эту мысль меня навели те слова Mr. nperm, что выделены зеленым. Я мог понять и неправильно, конечно. В любом случае, logoff.exe объемом 80 КБайт версии (какие тут на хрен версии) 0.1 pre beta -- это анекдот. Для log off, AFAIR, не нужно править Access Token процесса, достаточно банального ExitWindowsEx. Длина _кода_ такой программы -- 17 байт.

Code: Select all

        push 0
        push EWX_LOGOFF
        call ExitWindowsEx

        push eax        ; exit code
        call ExitProcess

(При желании действовать по рабоче-крестьянски, т. е. убивать незакрывающиеся программы, нужно push EWX_LOGOFF заменить на push EWX_LOGOFF | EWX_FORCEIFHUNG )

Return to “Вопросы и новости IT”