Суббота, 21.12.2024, 19:53 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx  
SID пользователя
AdamasS-98Дата: Среда, 18.03.2015, 20:03 | Сообщение # 1
Был не раз
Зарегистрирован: 26.10.2013
Группа: Пользователи
Сообщений: 8
Статус: Offline
Привет всем..
Я столкнулся с такой проблемой..
Когда я запускаю свое приложение, мне его надо запускать от системы.. Все проходит нормально, но для работы с реестром пользователя от системы нужно получать SID...
Так вот если моя прога запущена от пользователя, то она получает нужный мне SID, но если я запущен от системы, то она получает SID системы, который мне не нужен.. Мне надо как-то получить SID пользователя, когда я запущен от системы..
Помогите пожалуйста, весь интернет перерыл...

Использовал вот такую функцию:
Код

function GetCurrentUserSid: string;


DimasS
 
HTTqpДата: Четверг, 19.03.2015, 20:24 | Сообщение # 2
Частый гость
Зарегистрирован: 08.10.2014
Группа: Пользователи
Сообщений: 57
Статус: Offline
Если не секрет как получилось запустить от системы?
 
Волк-1024Дата: Четверг, 26.03.2015, 18:32 | Сообщение # 3
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
Очень плохо ищешь видно:

http://delphi.xcjc.net/viewthread.php?tid=45527
http://stackoverflow.com/questio....ine-sid
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=48705

Выпадает в первых страницах по запросу: LookupAccountName

Вот от меня рабочий вариант:

Код

function ConvertSidToStringSidA(Sid: PSID; var StringSid: PChar): Boolean; stdcall;  external 'ADVAPI32.DLL' name 'ConvertSidToStringSidA';

function SidToString(Sid : PSID) : string;
var
   Buffer: PChar;
begin
   if ConvertSidToStringSidA(Sid, Buffer) then
      Result:=string(Buffer)
   else
      Result:='';
end;

function GetUserSid(const MachineName, UserName: string): string;
var
   Sid: PSID;
   RefDomainName: PChar;
   SidNameUse: SID_NAME_USE;
   dwSidSize, dwDomainSize: DWORD;
begin
   Result:='';
   dwSidSize:=0;
   dwDomainSize:=0;
   if not LookupAccountNameA(PChar(MachineName), (PChar(UserName)), nil, dwSidSize, nil, dwDomainSize, SidNameUse) and (GetLastError() = ERROR_INSUFFICIENT_BUFFER) then
   try
     GetMem(Sid, dwSidSize);
     GetMem(RefDomainName, dwDomainSize);
     if LookupAccountNameA(PChar(MachineName), (PChar(UserName)), Sid, dwSidSize, RefDomainName, dwDomainSize, SidNameUse) then
        Result:=SidToString(Sid);
   finally
     FreeMem(Sid, dwSidSize);
     FreeMem(RefDomainName, dwDomainSize);
   end;
end;   


Pascal, C\C++, Assembler, Python
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz