Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2008, 08:39   #11
M.A.R.K
 
Аватар для M.A.R.K
 
Регистрация: 02.02.2008
Сообщений: 9
Восклицание

Ins:
Цитата:
3. SetSecurityInfo (второй параметр - SE_KERNEL_OBJECT) - назначаем владельцем себя
Каким образом стать владельцем? (SetSecurityInfo с какими параметрами?)
- Копирование лицензионного диска - это пиратство?
- Нет, т.к. пиратство подразумевает наличие: моря, корабля и абардажной команды.
M.A.R.K вне форума Ответить с цитированием
Старый 03.05.2008, 13:46   #12
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
SetSecurityInfo с какими параметрами?
Давно не заходил сюда, если еще нужно, то
Код:
SetSecurityInfo(TokenHandle, SE_KERNEL_OBJECT,  OWNER_SECURITY_INFORMATION, SelfSID, nil, nil, nil);
Ins вне форума Ответить с цитированием
Старый 04.05.2008, 08:51   #13
M.A.R.K
 
Аватар для M.A.R.K
 
Регистрация: 02.02.2008
Сообщений: 9
Восклицание

Ins
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,aclAPI,accCtrl;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  OwnerSid           : PSID;

  MarkSid            : PSID;
  MarkSidLen : DWORD;
  DomSidLen               : DWORD;
  DomSid                    : Pointer;
  ProcessHandle      : THandle;
  TokenProcessHandle : THandle;
  TP                 : TTokenPrivileges;
  //////////////////////////////////////////////
  tPACL               : PACL;
  tPACL_2            : PACL;
  tPSID               : PSID;
  tPSD                : PPSECURITY_DESCRIPTOR;
  //////////////////////////////////////////////
  ET                 : array[0..1023] of Char;
  peUse                  : DWORD;
begin
//Включаем 'SeTakeOwnershipPrivilege':
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,TokenProcessHandle);
LookupPrivilegeValue(nil,'SeDebugPrivilege',TP.Privileges[0].Luid);
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
TP.PrivilegeCount := 1;
AdjustTokenPrivileges(TokenProcessHandle,FALSE,TP,0,PTokenPrivileges(nil)^,PDWord(nil)^);
CloseHandle(TokenProcessHandle);

//Включаем 'SeDebugPrivilege':
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,TokenProcessHandle);
LookupPrivilegeValue(nil,'SeTakeOwnershipPrivilege',TP.Privileges[0].Luid);
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
TP.PrivilegeCount := 1;
AdjustTokenPrivileges(TokenProcessHandle,FALSE,TP,0,PTokenPrivileges(nil)^,PDWord(nil)^);
CloseHandle(TokenProcessHandle);

//Узнаем SID учетки «mark»
MarkSidLen := 0;
DomSidLen := 0;
LookupAccountName(nil,'mark',nil,MarkSidLen,nil,DomSidLen,peUse);
GetMem(MarkSid,MarkSidLen);
GetMem(DomSid,DomSidLen);
Try
  LookupAccountName(nil,'mark',MarkSid,MarkSidLen,DomSid,DomSidLen,peUse);
finally
  FreeMem(MarkSid,MarkSidLen);
  FreeMem(DomSid,DomSidLen);
end;

//Устанавливаем владельца как SID Марка:
{
ProcessHandle := OpenProcess(WRITE_OWNER,FALSE,2276); //2276 - ProcessId процесса LOCAL SERVICE
SetSecurityInfo(ProcessHandle,SE_KERNEL_OBJECT,OWNER_SECURITY_INFORMATION,MarkSid,nil,nil,nil);
} //Но это на 2-ром плане...

//Узнаем SID владельца:
ProcessHandle := OpenProcess(DesiredAccess,FALSE,2276); //DesiredAccess пробовал и READ_CONTROL ($20000) и PROCESS_ALL_ACCESS
OpenProcessToken(ProcessHandle,WRITE_OWNER,TokenProcessHandle);
GetMem(OwnerSid,SizeOf(PSID));
GetSecurityInfo(TokenProcessHandle,SE_KERNEL_OBJECT,OWNER_SECURITY_INFORMATION,OwnerSid,tPSID,tPACL,tPACL_2,tPSD);

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,nil,GetLastError,GetKeyboardLayout(1049),@ET,1023,nil);
Form1.Caption := StrPas(@ET); //Сообщаем ошибку, если она есть ;-)

end;
end.
1. GetLastError говорит, что переданная область слишком мала...Тогда как узнать необходимый размер OwnerSid для GetSecurityInfo
2. Я немного запутался т.к. не знаю, нужен ли OpenProcessToken или WRITE_OWNER надо передавать в OpenProcess...
- Копирование лицензионного диска - это пиратство?
- Нет, т.к. пиратство подразумевает наличие: моря, корабля и абардажной команды.
M.A.R.K вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
директивы в MASM - INVOKE, PROTO, LOCAL fermat_c Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.04.2008 17:25
И снова Service! Shurik Hacker Общие вопросы Delphi 5 27.01.2008 21:36
MSXML 4.0 Service Pack 2 Nevil Общие вопросы Delphi 1 16.09.2007 17:15

Реклама для незарегистрированных, регистрация на форуме