Форум: "WinAPI";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Внизкак определить, под каким именем запущен процесс? Найти похожие ветки
← →
kami © (2005-12-14 14:48) [0]Как в стандартном TaskManager или ProcessExplorer
Имеются: Handle и ID процесса.
Так как не знаю, что искать, то поиск в MSDN дал мало чего :)
Попробовал так:if ProcessIdToSessionID(ProcessID,SessionID) then
begin
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,SessionID,WTSUserName,pUserName,BytesRet);
FProcessUserName:=pUserName;
WTSFreeMemory(pUserName);
end;
возвращает для всех процессов имя моей учетной записи (и SessionID всегда = 0). А что использовать, чтобы получить, (например) для WinLogon.exe - NT Authority/SYSTEM ?
← →
BiN © (2005-12-14 15:44) [1]function GetSidInfo(lpSystemName: PChar; Sid: PSID;
var Name, Domain: string; var Use: SID_NAME_USE):Boolean;
var
cbNameLen: DWORD;
cbDomainLen: DWORD;
begin
Result:=IsValidSid(Sid);
if not Result then
begin
SetLastError(ERROR_INVALID_SID);
Exit;
end;
cbNameLen := UNLEN + 1;
cbDomainLen := DNLEN + 1;
SetLength (Name, cbNameLen);
SetLength (Domain, cbDomainLen);
Result:=LookupAccountSid (lpSystemName, Sid, PChar (Name), cbNameLen, PChar (Domain), cbDomainLen, Use);
if not Result
then Exit;
Name := PChar (Name);
Domain := PChar (Domain);
end;
function GetProcessTokenSid(ProcessId:DWORD; Var Sid: PSID): Boolean; // освобождается через Realloc(Sid, 0);
var
hProcess:DWORD;
hToken:DWORD;
pTokenUserSID:PSIDAndAttributes;
dwRetLen:DWORD;
begin
Result:=False;
Sid:=nil;
hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId);
if hProcess=0 then Exit;
if OpenProcessToken(hProcess, TOKEN_QUERY, hToken) then
begin
if not GetTokenInformation(hToken, TokenUser, nil, 0, dwRetLen) and
(GetLastError=ERROR_INSUFFICIENT_BUFFER) then
try
GetMem(pTokenUserSID, dwRetLen);
Result:=GetTokenInformation(hToken, TokenUser, pTokenUserSID, dwRetLen, dwRetLen);
if Result then
begin
dwRetLen:=GetLengthSid(pTokenUserSID^.Sid);
ReallocMem(Sid, dwRetLen);
Result:=CopySid(dwRetLen, Sid, pTokenUserSID^.Sid);
end;
finally
FreeMem(pTokenUserSID);
if not Result then ReallocMem(Sid, 0);
end;
CloseHandle(hToken);
end;
CloseHandle(hProcess);
end;
function GetProcessUserInformation(ProcessId:DWORD;
var UserName,
Domain: String;
var SIDName:SID_NAME_USE):Boolean;
var
TokenSid: PSID;
begin
Result:=false;
if not GetProcessTokenSid(ProcessId, TokenSid) then Exit;
try
Result:=GetSidInfo(nil, TokenSid, UserName, Domain, SIDName);
finally
ReallocMem(TokenSid, 0);
end;
end;
← →
Rouse_ © (2005-12-14 15:50) [2]Можешь вот это еще посмотреть: http://rouse.front.ru/taskmon.zip
← →
kami © (2005-12-14 19:56) [3]Огромное спасибо.
Даже не думал, что нужно смотреть в сторону security identifier`ов
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c