Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];

Вниз

Имя пользователя на любого процесса   Найти похожие ветки 

 
Ученик   (2002-07-18 10:17) [0]

Как определить имя пользователя для произвольного процесса в системе, то что показывается в Task Manager (колонка UserName) ?


 
RV   (2002-07-18 12:14) [1]

NtQuerySystemInformation (ntdll.dll)


 
Ученик   (2002-07-18 12:19) [2]

Это из NT DDK ? Если нет, то можно описание вызова ?


 
RV   (2002-07-18 12:37) [3]

это не документированная фция виндов, продокументированная уже всеми кому не лень и где не лень.
некоторые анкновы в коде на самом деле не анкновы

typedef struct {
FILETIME ProcessorTime;
ULONG unk2, unk3;
FILETIME CreateTime;
ULONG unk6;
ULONG StartAddress;
ULONG ProcessID;
ULONG ThreadID;
ULONG CurrentPriority;
ULONG BasePriority;
ULONG ContextSwitchesPerSec;
ULONG ThreadState;
ULONG ThreadWaitReason;
ULONG unk15;
} SYSTEM_THREAD_INFORMATION;


typedef struct {
ULONG NextOffest; // следующий процесс
ULONG ThreadCount;
ULONG unk2, unk3, unk4, unk5, unk6, unk7;
FILETIME CreateTime;
FILETIME UserTime;
FILETIME KernelTime;
ULONG unk14;
WCHAR *pModuleName; /* unicode */
ULONG BasePriority;
ULONG ProcessID;
ULONG InheritedFromUniqueProcessID;
ULONG HandleCount;
ULONG unk20, unk21;
ULONG PeekVirtualSize;
ULONG VirtualSize;
ULONG PageFaultCountPerSec;
ULONG PeakWorkingSetSize;
ULONG WorkingSetSize;
ULONG PeekPagedPoolUsage;
ULONG PagedPoolUsage;
ULONG PeekNonPagedPoolUsage;
ULONG NonPagedPoolUsage;
ULONG unk31; /* PagefileUsage ? */
ULONG PeakPagefileUsage;
ULONG unk33; /* PrivateBytes ? */
SYSTEM_THREAD_INFORMATION ThreadInfos[1]; // потоки данного процесса
} SYSTEM_PROCESS_INFORMATION;

PThreadInfo = ^TThreadInfo;
TThreadInfo = record
ftCreationTime : TDateTime;
dwUnknown1 : DWORD;
dwStartAddress : DWORD;
dwOwningPID : DWORD;
dwThreadID : DWORD;
dwCurrentPriority : DWORD;
dwBasePriority : DWORD;
dwContextSwitches : DWORD;
dwThreadState : DWORD;
dwUnknown2 : DWORD;
dwUnknown3 : DWORD;
dwUnknown4 : DWORD;
dwUnknown5 : DWORD;
dwUnknown6 : DWORD;
dwUnknown7 : DWORD;
end;

PProcessInfo = ^TProcessInfo;
TProcessInfo = record
dwOffset : DWORD;
dwThreadCount : DWORD;
dwUnkown1 : array [1..6] of DWORD;
ftCreationTime : TDateTime;
dwUnkown2 : DWORD;
dwUnkown3 : DWORD;
dwUnkown4 : DWORD;
dwUnkown5 : DWORD;
dwUnkown6 : DWORD;
pszProcessName : PWideChar;
dwBasePriority : DWORD;
dwProcessID : DWORD;
dwParentProcessID : DWORD;
dwHandleCount : DWORD;
dwUnkown7 : DWORD;
dwUnkown8 : DWORD;
dwVirtualBytesPeak : DWORD;
dwVirtualBytes : DWORD;
dwPageFaults : DWORD;
dwWorkingSetPeak : DWORD;
dwWorkingSet : DWORD;
dwUnkown9 : DWORD;
dwPagedPool : DWORD;
dwUnkown10 : DWORD;
dwNonPagedPool : DWORD;
dwPageFileBytesPeak : DWORD;
dwPageFileBytes : DWORD;
dwPrivateBytes : DWORD;
dwUnkown11 : DWORD;
dwUnkown12 : DWORD;
dwUnkown13 : DWORD;
dwUnkown14 : DWORD;
ati : array [1..1] of TThreadInfo;
end;

TNtQSI = function(Nmb: integer; Ptr: Pointer; Size1, Size2: integer): DWORD; stdcall;
.................................
procedure TForm1.Button1Click(Sender: TObject);
var hLib : DWORD;
Ptr : Pointer;
Cur : DWORD;

begin

lb.Items.Clear;
hLib := LoadLibrary("NTDLL.DLL");

if hLib>0 then

begin
@NtQSI := GetProcAddress(hLib,"NtQuerySystemInformation");
NtQSI(5,@Buf,20480,0);

Cur := 1;
Ptr := Addr(Buf[Cur]);
PrcInfo := Ptr;
lb.Items.Add(PrcInfo.pszProcessName+" -----> PID : "+ IntToStr(PrcInfo.dwProcessID));
repeat
Cur := Cur + PrcInfo.dwOffset;
Ptr := Addr(Buf[Cur]);
PrcInfo := Ptr;
lb.Items.Add(PrcInfo.pszProcessName+" -----> PID : "+ IntToStr(PrcInfo.dwProcessID));
until PrcInfo.dwOffset=0;
end;
FreeLibrary(hLib);
end;


 
Ученик   (2002-07-18 12:53) [4]

>RV
Это работает ? А имя пользователя где ?


 
Ученик   (2002-07-19 10:38) [5]

Это вроде работает, если кому надо

function GetProcessUserName(ProcessID : THandle; DomainName : Boolean = False): string;
var
Token: THandle;
Process : THandle;
User: PSIDAndAttributes;
szName, szDomain: PChar;
dwSize, dwNameSize,
dwDomainSize, dwUse: DWORD;
begin
Result := "";
if ProcessID <= 8 then
Result := "SYSTEM"
else begin
Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
if Process <> 0 then try
if OpenProcessToken(Process, TOKEN_QUERY, Token) then try
User := nil; dwSize := 0;
if not GetTokenInformation(Token, TokenUser, User,
dwSize, dwSize) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin
GetMem(User, dwSize);
try
if GetTokenInformation(Token, TokenUser, User,
dwSize, dwSize) then begin
dwNameSize := 0;
dwDomainSize := 0;
if not LookupAccountSid(nil, User.Sid, nil, dwNameSize, nil, dwDomainSize, dwUse) and
(GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin
GetMem(szName, dwNameSize + 1);
GetMem(szDomain, dwDomainSize + 1);
try
if LookupAccountSid(nil, User.Sid, szName, dwNameSize, szDomain, dwDomainSize, dwUse) then
Result := IfThen(DomainName, StrPas(szDomain) + "\") + StrPas(szName)
finally
FreeMem(szName);
FreeMem(szDomain)
end
end
end
finally
FreeMem(User)
end
end
finally
CloseHandle(Token)
end
finally
CloseHandle(Process)
end
end
end;



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-97945
V aZ
2002-09-08 08:55
2002.09.30
Скажите еще раз, как из Access данные в IB перенесть


1-98070
velk
2002-09-19 12:47
2002.09.30
Подскажите как вызвать стандартное окно Dial-Up?


1-98167
kex86
2002-09-16 01:48
2002.09.30
KbLayout


7-98376
GydruS
2002-07-23 08:50
2002.09.30
LPT: Что есть tlLPTx?


1-98174
PSERG
2002-09-18 10:24
2002.09.30
EhLib 2.0 Error!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский