1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| #define _WIN32_WINNT 0x0501
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <psapi.h>
void listProcesses_classic(void) {
DWORD pids[1024];
DWORD i,rc;
EnumProcesses(pids,sizeof(pids),&rc);
printf("Number of entries: %u\n",rc/sizeof(pids[0]));
for(i=0;i<rc/sizeof(pids[0]);i++) {
HANDLE hdl;
printf("%4u: pid=%4u ",i,pids[i]);
hdl=OpenProcess(READ_CONTROL|PROCESS_QUERY_INFORMATION,0,pids[i]);
if(hdl==NULL)
printf("- handle error %u\n",GetLastError());
else {
char buffer[MAX_PATH];
if(GetProcessImageFileName(hdl,buffer,sizeof(buffer))==0)
printf("- GetProcessImageFilename() error %u\n",GetLastError());
else {
char *progname;
progname=strrchr(buffer,'\\');
if(progname==NULL)
progname=buffer;
else
progname++;
printf("- %s\n",progname);
}
CloseHandle(hdl);
}
}
puts("");
}
void listProcesses_privilegied(void) {
LUID luid;
if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&luid)==0)
printf("\tLookupPrivilegeValue() error: %u\n",GetLastError());
else {
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)==0)
printf("\tOpenProcessToken() error %u\n",GetLastError());
else {
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if(AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)NULL,(PDWORD)NULL)==0)
printf("AdjustTokenPrivileges() error: %u\n",GetLastError());
else
if(GetLastError()==ERROR_NOT_ALL_ASSIGNED)
puts("\tThe token does not have the specified privilege");
else {
DWORD pids[1024];
DWORD i,rc;
EnumProcesses(pids,sizeof(pids),&rc);
printf("Number of entries: %u\n",rc/sizeof(pids[0]));
for(i=0;i<rc/sizeof(pids[0]);i++) {
HANDLE hdl;
printf("%4u: pid=%4u ",i,pids[i]);
hdl=OpenProcess(READ_CONTROL|PROCESS_QUERY_INFORMATION,0,pids[i]);
if(hdl==NULL)
printf("- handle error %u\n",GetLastError());
else {
char buffer[MAX_PATH];
if(GetProcessImageFileName(hdl,buffer,sizeof(buffer))==0)
printf("- GetProcessImageFilename() error %u\n",GetLastError());
else {
char *progname;
progname=strrchr(buffer,'\\');
if(progname==NULL)
progname=buffer;
else
progname++;
printf("- %s\n",progname);
}
CloseHandle(hdl);
}
}
}
}
CloseHandle(hToken);
}
puts("");
}
int main(void) {
listProcesses_classic();
listProcesses_privilegied();
return(0);
} |
Partager