Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Вот похожий кусочек, различия дуаю осилишь 26.03.03 19:22 Число просмотров: 1481
Автор: leo <Леонид Юрьев> Статус: Elderman
|
function OpenThread(dwDesiredAccess: Longword; bInheritHandle: BOOL; dwThreadId: Longword): THandle; stdcall; external 'Kernel32.dll';
function ShutdownSystem(bForce: Boolean): Boolean;
var
Handle: THandle;
Priveleges: TOKEN_PRIVILEGES;
Size: Longword;
luid: int64;
begin
Result := False;
if not OpenThreadToken(OpenThread(PROCESS_ALL_ACCESS, False, GetCurrentThreadId()), TOKEN_ALL_ACCESS, True, Handle) and not OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, Handle) then
Exit;
if not LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
Exit;
Priveleges.PrivilegeCount := 1;
Priveleges.Privileges[0].Luid := luid;
Priveleges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(Handle, False, Priveleges, SizeOf(Priveleges), Priveleges, Size) then
Exit;
if bForce then
Result := ExitWindowsEx(EWX_FORCE or EWX_POWEROFF, 0) or ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN, 0)
else
Result := ExitWindowsEx(EWX_POWEROFF, 0) or ExitWindowsEx(EWX_SHUTDOWN, 0)
end;
---
|
<programming>
|
Кто может перевести с си++ на делфи? хелп 26.03.03 16:31
Автор: Fighter <Vladimir> Статус: Elderman
|
int main(int argc, char **argv)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//-------------------
char *name=""; // address of name of computer to shut down
char *msg=""; //address of message to display in dialog box
DWORD time=0; // time to display dialog box
bool force=true; // force applications with unsaved changes flag
bool reboot=true; //reboot flag
//---------------------------------------------------------------------
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken);
if(!LookupPrivilegeValue(name, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid)){
printf ("SE_SHUTDOWN_NAME Privilege облом \n");
return 1 ;};
tkp.PrivilegeCount =1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if(!LookupPrivilegeValue(name,
SE_REMOTE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid)){
printf("SE_REMOTE_SHUTDOWN_NAME Privilege облом \n");
return 2 ;};
tkp.PrivilegeCount =1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if (InitiateSystemShutdown(name,msg,time,force,reboot))
printf("%s shutdown Ok\n",name);
else printf("Can't shutdown %s \n",name);
return 0;
}
|
|
Вот похожий кусочек, различия дуаю осилишь 26.03.03 19:22
Автор: leo <Леонид Юрьев> Статус: Elderman
|
function OpenThread(dwDesiredAccess: Longword; bInheritHandle: BOOL; dwThreadId: Longword): THandle; stdcall; external 'Kernel32.dll';
function ShutdownSystem(bForce: Boolean): Boolean;
var
Handle: THandle;
Priveleges: TOKEN_PRIVILEGES;
Size: Longword;
luid: int64;
begin
Result := False;
if not OpenThreadToken(OpenThread(PROCESS_ALL_ACCESS, False, GetCurrentThreadId()), TOKEN_ALL_ACCESS, True, Handle) and not OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, Handle) then
Exit;
if not LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
Exit;
Priveleges.PrivilegeCount := 1;
Priveleges.Privileges[0].Luid := luid;
Priveleges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(Handle, False, Priveleges, SizeOf(Priveleges), Priveleges, Size) then
Exit;
if bForce then
Result := ExitWindowsEx(EWX_FORCE or EWX_POWEROFF, 0) or ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN, 0)
else
Result := ExitWindowsEx(EWX_POWEROFF, 0) or ExitWindowsEx(EWX_SHUTDOWN, 0)
end;
---
|
| |
Спасибо 27.03.03 13:27
Автор: Fighter <Vladimir> Статус: Elderman
|
|
|
|