Proc-ProcessTable
view release on metacpan or search on metacpan
os/MSWin32.c view on Meta::CPAN
external_pinfo *p;
int uid;
cygwin_getinfo_types query = CW_GETPINFO;
char ch;
int pid;
char *pstate;
char pname[MAX_PATH];
char uname[128];
char *fields;
uid = getuid ();
(void) cygwin_internal (CW_LOCK_PINFO, 1000);
if (query == CW_GETPINFO && !init_win_result)
query = CW_GETPINFO;
for (pid = 0;
(p = (external_pinfo *) cygwin_internal (query, pid | CW_NEXTPID));
pid = p->pid)
{
pstate = " ";
if (p->process_state & PID_STOPPED)
pstate = "stopped";
else if (p->process_state & PID_TTYIN)
pstate = "ttyin";
else if (p->process_state & PID_TTYOU)
pstate = "ttyout";
#ifdef PID_ORPHANED
if (p->process_state & (PID_ORPHANED | PID_EXITED))
#else
if (p->process_state & PID_EXITED)
#endif
strcpy (pname, "<defunct>");
else if (p->ppid)
{
char *s;
pname[0] = '\0';
cygwin_conv_path((CCP_RELATIVE|CCP_WIN_A_TO_POSIX), p->progname, pname, PATH_MAX);
s = strchr (pname, '\0') - 4;
if (s > pname && strcasecmp (s, ".exe") == 0)
*s = '\0';
}
else if (query == CW_GETPINFO)
{
FILETIME ct, et, kt, ut;
HANDLE h = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, p->dwProcessId);
if (!h)
continue;
if (!myGetModuleFileNameEx (h, myProcess32First ? p->dwProcessId : NULL, pname, MAX_PATH))
strcpy (pname, "*** unknown ***");
if (GetProcessTimes (h, &ct, &et, &kt, &ut))
p->start_time = to_time_t (&ct);
CloseHandle (h);
}
{
struct passwd *pw;
if ((pw = getpwuid (p->version >= EXTERNAL_PINFO_VERSION_32_BIT ?
p->uid32 : p->uid)))
strcpy (uname, pw->pw_name);
else
sprintf (uname, "%u", (unsigned)
(p->version >= EXTERNAL_PINFO_VERSION_32_BIT ?
p->uid32 : p->uid));
}
if (query == CW_GETPINFO) {
fields = "iiiiisiis";
} else {
fields = "iiiiisIis";
}
bless_into_proc(fields, Fields,
p->version >= EXTERNAL_PINFO_VERSION_32_BIT ? p->uid32 : p->uid,
p->pid,
p->ppid,
p->pgid,
p->dwProcessId,
pname,
p->start_time,
p->ctty,
pstate
);
}
(void) cygwin_internal (CW_UNLOCK_PINFO);
}
#else
static void get_process_owner(HANDLE process, char string_sid[184], char user_name[256], char domain_name[255])
{
HANDLE process_token;
PTOKEN_USER token_user;
DWORD token_user_size;
char *string_sid_ptr;
size_t string_sid_len;
DWORD user_name_size;
DWORD domain_name_size;
SID_NAME_USE sid_type;
string_sid[0] = 0;
user_name[0] = 0;
domain_name[0] = 0;
if (!OpenProcessToken (process, TOKEN_QUERY, &process_token))
return;
if (!GetTokenInformation (process_token, TokenUser, NULL, 0, &token_user_size) && GetLastError () != ERROR_INSUFFICIENT_BUFFER)
{
CloseHandle (process_token);
return;
}
token_user = malloc (token_user_size);
if (!token_user)
{
( run in 0.579 second using v1.01-cache-2.11-cpan-e1769b4cff6 )