AdamasS-98
|
Дата: Среда, 18.03.2015, 20:03 | Сообщение # 1
|
Был не раз
Зарегистрирован: 26.10.2013
Группа: Пользователи
Сообщений: 8
Статус: Offline
|
Привет всем..
Я столкнулся с такой проблемой..
Когда я запускаю свое приложение, мне его надо запускать от системы.. Все проходит нормально, но для работы с реестром пользователя от системы нужно получать SID...
Так вот если моя прога запущена от пользователя, то она получает нужный мне SID, но если я запущен от системы, то она получает SID системы, который мне не нужен.. Мне надо как-то получить SID пользователя, когда я запущен от системы..
Помогите пожалуйста, весь интернет перерыл...
Использовал вот такую функцию:
- <span class="ucoz-forum-post" id="ucoz-forum-post-9398" edit-url="">
-
- function GetCurrentUserSid: string;
- </span>
-
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
Группа: Модераторы
Сообщений: 467
Статус: 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
Вот от меня рабочий вариант:
- <span class="ucoz-forum-post" id="ucoz-forum-post-9408" edit-url="">
-
- 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;
- </span>
-
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
|
|
|
|